Loading... # Python Tkinter学习 ## Python Tkinter学习 之 标签和按钮 **主要实现:** 点击按钮后,标签内容改变 **主程序:** ``` import tkinter as tk # 更改标签文字内容 def hit_me(): global on_hit if on_hit == False: # 设置变量 var.set('hello world') on_hit = True else: var.set('') on_hit = False on_hit = False # 创建窗口 window = tk.Tk() # 设置标题 window.title('hello world') # 设置窗口大小 window.geometry('500x500') #设置不可更改窗口大小,禁用全屏 window.resizable(False, False) # tk中的字符串变量定义 var = tk.StringVar() # 创建一个标签 lable1 = tk.Label(window, textvariable=var, bg='green', font='Arial,12', width=15, height=2) # 创建一个按钮 button1 = tk.Button(window, text='biubiu', width=10, height=2, command=hit_me) # 放置标签 lable1.pack() # 放置按钮 button1.pack() # 循环刷新,运行窗口,直至退出 window.mainloop() ``` **运行结果:** <div class='album_block'> [album type="photos"]   [/album] </div> ## Python Tkinter学习 之 输入框和文本框 **主要实现:** 点击按钮1,将输入框的内容插入到文本框中的光标所在位置 点击按钮2,将输入框的内容插入到文本框中的末尾所在位置 **主程序:** ``` import tkinter as tk # 添加到光标函数 def insert(): var = entry1.get() text1.insert('insert', var) # insert光标位置,0首位,5从第5个字符开始插入,end末尾 # 添加到末尾位置 def end(): var = entry1.get() text1.insert('end', var) window = tk.Tk() window.title('hello world') window.geometry('200x200') # 创建输入框 entry1 = tk.Entry(window, show=None) # 密码show='*' # 创建按钮1 button1 = tk.Button(window, text='添加到光标位置', width=15, height=2, command=insert) # 创建按钮2 button2 = tk.Button(window, text='添加到末尾位置', width=15, height=2, command=end) # 创建文本框 text1 = tk.Text(window, show=None) # 放置 entry1.pack() button1.pack() button2.pack() text1.pack() # 循环刷新,运行 window.mainloop() ``` 运行结果: <div class='album_block'> [album type="photos"]   [/album] </div> ## Python Tkinter学习 之 列表部件 **主要实现:** 列表中选中某内容,点击按钮,在标签显示该内容 **主程序:** ``` import tkinter as tk # 获取光标点击的内容,并设置为标签的内容 def selection(): value = listbox1.get(listbox1.curselection()) var1.set(value) window = tk.Tk() window.title('hello world') window.geometry('200x200') # 初始化变量 var1 = tk.StringVar() var2 = tk.StringVar() # 设置变量初始值 var2.set((11, 22, 33, 44, 55, 66)) # 创建标签 lable1 = tk.Label(window, bg='yellow', width=15, textvariable=var1) # 创建按钮1 button1 = tk.Button(window, text='输出选择', width=15, height=2, command=selection) # 创建列表 listbox1 = tk.Listbox(window, listvariable=var2) # 循环增加到列表 list_items = [1, 2, 3, 4] for item in list_items: listbox1.insert('end', item) # 删除列表第三个内容 listbox1.delete(2) # 放置 lable1.pack() button1.pack() listbox1.pack() # 循环刷新,运行 window.mainloop() ``` 运行结果: <div class='album_block'> [album type="photos"]   [/album] </div> ## Python Tkinter学习 之 尺度scale **主要实现:** 显示一个横向的尺度,左右拖动改变标签内容 **主程序:** ``` import tkinter as tk def selection(v): lable1.config(text=rf'你选择的是{v}') window = tk.Tk() window.title('hello world') window.geometry('200x200') # 创建标签 lable1 = tk.Label(window, bg='yellow', width=50, text='请选择') # 创建尺度, from_和to是范围 方向定位(横向) length像素长度 showvalue是否显示value tickinterval隔几个单位显示一个数值 resolution控制小数点 scale = tk.Scale(window, label='try me', from_=5, to=11, orient=tk.HORIZONTAL, length=200, showvalue=0, tickinterval=3, resolution=0.01, command=selection) # 放置 lable1.pack() scale.pack() # 循环刷新,运行 window.mainloop() ``` **运行结果:** <div class='album_block'> [album type="photos"]  [/album] </div> ## Python Tkinter学习 之 选择按钮 **主要实现:** 当按钮被点击时,将按钮的值设置为标签的内容 **主程序:** ``` import tkinter as tk def selection(): lable1.config(text=rf'你选择的是{var.get()}') window = tk.Tk() window.title('hello world') window.geometry('200x200') # 初始化变量 var = tk.StringVar() # 创建标签 lable1 = tk.Label(window, bg='yellow', width=50, text='请选择') # 创建选择按钮 ,当按钮被选中时,将value的值传给var radiob1 = tk.Radiobutton(window, text='option A', variable=var, value='A', command=selection) radiob2 = tk.Radiobutton(window, text='option B', variable=var, value='B', command=selection) radiob3 = tk.Radiobutton(window, text='option C', variable=var, value='C', command=selection) # 放置 lable1.pack() radiob1.pack() radiob2.pack() radiob3.pack() # 循环刷新,运行 window.mainloop() ``` **运行结果:** <div class='album_block'> [album type="photos"]   [/album] </div> ## Python Tkinter学习 之 勾选项checkbutton **主要实现:** 创建多选按钮,当选中一个按钮时,在标签显示已选择该按钮,当选中全部按钮时,在标签显示已选择全部按钮 **主程序:** ``` import tkinter as tk def selection(): # var1.get()获取var的值 if (var1.get() == 1) & (var2.get() == 0): lable1.config(text=rf'你只选择的是Python') if (var1.get() == 0) & (var2.get() == 1): lable1.config(text=rf'你只选择的是C++') if (var1.get() == 1) & (var2.get() == 1): lable1.config(text=rf'你选择了全部') if (var1.get() == 0) & (var2.get() == 0): lable1.config(text=rf'你没有选择') window = tk.Tk() window.title('hello world') window.geometry('200x200') var1 = tk.IntVar() var2 = tk.IntVar() # 创建标签 lable1 = tk.Label(window, bg='yellow', width=50, text='选择你喜欢的') # 创建多选按钮,勾选按钮,勾选按钮时onvalue值传给var,取消勾选按钮时offvalue值传给var, c1 = tk.Checkbutton(window, text='python', variable=var1, onvalue=1, offvalue=0, command=selection) c2 = tk.Checkbutton(window, text='c++', variable=var2, onvalue=1, offvalue=0, command=selection) # 放置 lable1.pack() c1.pack() c2.pack() # 循环刷新,运行 window.mainloop() ``` **运行结果:** <div class='album_block'> [album type="photos"]   [/album] </div> ## Python Tkinter学习 之 画布canvas **主要实现:** 创建一个画布,将图片添加到画布,在画布里画图形,点击按钮图形移动 **主程序:** ``` import tkinter as tk # 画布内的组件移动 def moveit(): canvas.move(line, 0, 2) window = tk.Tk() window.title('hello world') window.geometry('200x200') # 创建画布 canvas = tk.Canvas(window, bg='blue', height=100, width=200) # 创建按钮 button = tk.Button(window, text='move', command=moveit) # 打开图片 image_file = tk.PhotoImage(file='0.gif') # 将图片添加到画布 imge = canvas.create_image(10, 10, anchor='nw', image=image_file) # nw锚定的点是图像而不是画布 # 定义坐标变量 x0, y0, x1, y1 = 50, 50, 80, 80 # 画一条直线 line = canvas.create_line(x0, y0, x1, y1) # 画一个圆 oval = canvas.create_oval(x0, y0, x1, y1, fill='red') # 画一个扇形 arc = canvas.create_arc(x0 + 30, y0 + 30, x1 + 30, y1 + 30, start=0, extent=180) # 画一个方形 rect = canvas.create_rectangle(x0 + 0, y0 + 10, x1 + 30, y1 + 30) # 放置 canvas.pack() button.pack() # 循环刷新,运行 window.mainloop() ``` **运行结果:** <div class='album_block'> [album]  [/album] </div> **注意:** <div class="tip inlineBlock warning"> tkinter只能使用gif图片文件,如需兼容其他图片格式,可使用PIL的Image,和ImageTk 将`img_gif = tkinter.PhotoImage(file = '0.gif')`修改为: ``` from PIL import Image, ImageTk img_open = Image.open("0.png") img_png = ImageTk.PhotoImage(img_open) ``` </div> ## Python Tkinter学习 之 菜单menubar **主要实现:** 创建一个菜单栏,并实现菜单项的功能 **主程序:** ``` import tkinter as tk count = 0 def do_job(): global count label.config(text=f'do {count}') count += 1 window = tk.Tk() window.title('hello world') window.geometry('200x200') # 创建一个标签 label = tk.Label(window, bg='yellow', text='') # 创建一个菜单栏,可以将他理解成一个容器,在窗口上方 menubar = tk.Menu(window) # 创建一个菜单项,tearoff=0设置菜单项不能分离出去 filemenu = tk.Menu(menubar, tearoff=0) # 将菜单项命名为File,并add_cascade添加到菜单栏容器中 menubar.add_cascade(label='File', menu=filemenu) # 命名并添加功能到file菜单项 filemenu.add_command(label='NEW', command=do_job) filemenu.add_command(label='open', command=do_job) filemenu.add_command(label='save', command=do_job) # 添加一条分割线 filemenu.add_separator() # quitt()是kinter内的退出函数 filemenu.add_command(label='exit', command=window.quit) # 创建一个菜单项 editmenu = tk.Menu(menubar, tearoff=0) # 将菜单项命名为edit,并add_cascade添加到菜单栏容器中 menubar.add_cascade(label='edit', menu=filemenu) # 命名并添加功能到edit菜单项 editmenu.add_command(label='cut', command=do_job) editmenu.add_command(label='copy', command=do_job) editmenu.add_command(label='paste', command=do_job) # 创建一个二级菜单项,即在菜单项内创建菜单 submenu = tk.Menu(filemenu, tearoff=0) # 将菜单项命名为import,并添加到edit菜单项中 filemenu.add_cascade(label='import', menu=submenu, underline=0) # 命名并添加菜单功能到二级菜单 submenu.add_command(label='submenu1', command=do_job) # 显示菜单栏 window.config(menu=menubar) # 放置标签 label.pack() # 循环刷新,运行显示窗口 window.mainloop() ``` **运行结果:** <div class='album_block'> [album]  [/album] </div> ## Python Tkinter学习 之 框架frame **简单说明:** Frame:框架,用来承载放置其他GUI元素,就是一个容器,是一个在 Windows 上分离小区域的部件, 它能将 Windows 分成不同的区,然后存放不同的其他部件. 同时一个 Frame 上也能再分成两个 Frame, Frame 可以认为是一种容器. **什么时候用:** 在比如像软件或网页交互界面等,有不同的界面逻辑层级和功能区域划分时可以用到,让交互界面逻辑更加清晰。 **主程序:** ``` import tkinter as tk # 使用Tkinter前需要先导入 # 第1步,实例化object,建立窗口window window = tk.Tk() # 第2步,给窗口的可视化起名字 window.title('My Window') # 第3步,设定窗口的大小(长 * 宽) window.geometry('500x300') # 这里的乘是小x # 第4步,在图形界面上创建一个标签用以显示内容并放置 tk.Label(window, text='on the window', bg='red', font=('Arial', 16)).pack() # 和前面部件分开创建和放置不同,其实可以创建和放置一步完成 # 第5步,创建一个主frame,长在主window窗口上 frame = tk.Frame(window) frame.pack() # 第6步,创建第二层框架frame,长在主框架frame上面 frame_l = tk.Frame(frame)# 第二层frame,左frame,长在主frame上 frame_r = tk.Frame(frame)# 第二层frame,右frame,长在主frame上 frame_l.pack(side='left') frame_r.pack(side='right') # 第7步,创建三组标签,为第二层frame上面的内容,分为左区域和右区域,用不同颜色标识 tk.Label(frame_l, text='on the frame_l1', bg='green').pack() tk.Label(frame_l, text='on the frame_l2', bg='green').pack() tk.Label(frame_l, text='on the frame_l3', bg='green').pack() tk.Label(frame_r, text='on the frame_r1', bg='yellow').pack() tk.Label(frame_r, text='on the frame_r2', bg='yellow').pack() tk.Label(frame_r, text='on the frame_r3', bg='yellow').pack() # 第8步,主窗口循环显示 window.mainloop() ``` **运行结果:** <div class='album_block'> [album]  [/album] </div> ## Python Tkinter学习 之 弹窗messagebox **简单说明:** messageBox:消息框,用于显示你应用程序的消息框。(Python2中为tkMessagebox),其实这里的messageBox就是我们平时看到的弹窗。 我们首先需要定义一个触发功能,来触发这个弹窗,这里我们就放上以前学过的button按钮,通过触发功能,调用messagebox吧,点击button按钮就会弹出提示对话框。 下面给出messagebox提示信息的几种形式: ``` tk.messagebox.showinfo(title='Hi', message='你好!') # 提示信息对话窗tk.messagebox.showwarning(title='Hi', message='有警告!') # 提出警告对话窗tk.messagebox.showerror(title='Hi', message='出错了!') # 提出错误对话窗print(tk.messagebox.askquestion(title='Hi', message='你好!')) # 询问选择对话窗return 'yes', 'no' print(tk.messagebox.askyesno(title='Hi', message='你好!')) # return 'True', 'False' print(tk.messagebox.askokcancel(title='Hi', message='你好!')) # return 'True', 'False' print(tk.messagebox.askretrycancel(title='Hi', message='你好!')) # return 'True', 'False' ``` **什么时候用:** 在比如像软件或网页交互界面等,有不同的界面逻辑层级和功能区域划分时可以用到,让交互界面逻辑更加清晰。**主程序:** ``` import tkinter as tk # 使用Tkinter前需要先导入 import tkinter.messagebox # 要使用messagebox先要导入模块 # 第1步,实例化object,建立窗口window window = tk.Tk() # 第2步,给窗口的可视化起名字 window.title('My Window') # 第3步,设定窗口的大小(长 * 宽) window.geometry('500x300') # 这里的乘是小x # 第5步,定义触发函数功能 def hit_me(): tk.messagebox.showinfo(title='Hi', message='你好!') # 提示信息对话窗 tk.messagebox.showwarning(title='Hi', message='有警告!') # 提出警告对话窗 tk.messagebox.showerror(title='Hi', message='出错了!') # 提出错误对话窗 print(tk.messagebox.askquestion(title='Hi', message='你好!')) # 询问选择对话窗return 'yes', 'no' print(tk.messagebox.askyesno(title='Hi', message='你好!')) # return 'True', 'False' print(tk.messagebox.askokcancel(title='Hi', message='你好!')) # return 'True', 'False' print(tk.messagebox.askretrycancel(title='Hi', message='你好!')) # return 'True', 'False' # 第4步,在图形界面上创建一个标签用以显示内容并放置 tk.Button(window, text='hit me', bg='green', font=('Arial', 14), command=hit_me).pack() # 第6步,主窗口循环显示 window.mainloop() ``` **测试效果:** <div class='album_block'> [album type="photos"]        [/album] </div> ## Python Tkinter学习 之 放置方式pack/grid/place **简单说明:** <div class="tip inlineBlock warning"> **pack 边界布局**,由side控制,默认居中,上top,下bottom,左left,右right。 **grid 网格布局**,所有的内容会被放在这些规律的方格中,row行,column列,ipadx/ipady网格大小长和宽。 **place 自定义位置**,由坐标点控制,anchor设置锚点,anchor='nw’的含义是“将控件的左上角的点安放在指定坐标位置”。 x/y是绝对坐标,relx/rely是相对坐标值,是相对父组件的坐标,取值范围为0-1, 窗体界面左上角坐标:relx=0,rely=0 窗体界面右上角坐标:relx=1,rely=1 窗体界面正中间坐标:relx=0.5,rely=0.5 窗体界面左下角坐标:relx=0,rely=1 窗体界面右下角坐标:relx=1,rely=1 </div> **主程序:** ``` import tkinter as tk window = tk.Tk() window.title('hello world') window.geometry('200x200') # grid 网格布局 for i in range(3): for j in range(3): tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10) # pack 边界布局 tk.Label(window, text='P', fg='red').pack(side='top') # 上 tk.Label(window, text='P', fg='red').pack(side='bottom') # 下 tk.Label(window, text='P', fg='red').pack(side='left') # 左 tk.Label(window, text='P', fg='red').pack(side='right') # 右 tk.Label(window, text='P', fg='red').pack() # 中 # place 自定义位置坐标 tk.Label(window, text='hello Place2').place(x=0, y=0, anchor='nw') # 绝对位置,将控件的左上角的点安放在指定坐标位置 tk.Label(window, text='hello Place1').place(relx=0.5, rely=0.5, anchor='nw') # 相对位置,自适应,居中,窗口改变位置不变 # 循环刷新,运行显示窗口 window.mainloop() ``` 最后修改:2022 年 10 月 03 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏
3 条评论
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
新车首发,新的一年,只带想赚米的人
每个标点都承载着思考的重量。