gui - tkinter 开发
Posted lws865
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gui - tkinter 开发相关的知识,希望对你有一定的参考价值。
GUI 用户交互界面
tkinter 介绍
tkinter python自带的gui库,对图形图像处理库tk的封装
其他gui:pythonwin,wxpython,pyQT。。
概念介绍
组件:组成界面的构成内容就是组件。 按钮,文本输入框,滚动条,菜单,列表。。。
窗口:一个软件的矩形区域
界面开发的最小内容:
1.导入tkinter模块
2.创建主窗口对象
3.将主窗口对象加入消息循环当中
组件的摆放方式:
1.pack()方式 ->方向/方位摆放方法
2.grid()方式 ->网格摆放方法
3.place()方式 ->定位摆放方法(推荐)
pack()方式:(少用)
side 设置组件相对于父组件的摆放位置
ipadx,ipady 设置组件的内部间距
padx,pady 设置多个组件之间的外部间距
expand 设置side是否失效
注意:仅仅使用pack无法实现表格方式,必须借助后面的Frame组件才可以实现,非常复杂。
gird()方式:(少用)
row 设置行数 默认为0
column 设置列数 默认为0
rowspan 设置跨行数量
cloumnspan 设置跨列的数量
ipadx,ipady 设置组件内部间距
padx,pady 设置多个组件之间的外部间距
place() 方式:
绝对定位布局:
x 设置距离左上角的水平长度 单位 都是像素
y 设置距离左上角的垂直高度 单位 都是像素
width 设置组件所占据的宽度 单位 都是像素
height 设置组件所占据的宽度 单位 都是像素
相对定位布局:
relx 设置距离左上角的水平长度(取值0~1)
rely 设置距离左上角的垂直高度(取值0~1)
relwidth 设置组件所占据的宽度(取值0~1)
relheight 设置组件所占据的宽度(取值0~1)
以上属性设置都是相对于界面宽度或者高度的百分比,可以根据界面的带下改变而改变~!
place()方式 ->定位摆放方法(推荐)----绝对位置----
1 #导入模块 2 import tkinter 3 4 #创建主窗口对象 5 root = tkinter.Tk() 6 #大小 7 root.minsize(500,500) 8 9 #place()方式 ->定位摆放方法(推荐)----绝对位置----=========================== 10 #创建组件 11 btn1 = tkinter.Button(root,text = ‘按钮1‘) 12 btn1.place(x = 100 ,y = 20,width= 50,height = 50) 13 14 #创建组件 15 btn2 = tkinter.Button(root,text = ‘按钮2‘) 16 btn2.place(x = 200 ,y = 50,width = 300,height = 30) 17 18 #加入消息循环 19 root.mainloop()
place()方式 ->定位摆放方法(推荐)----相对位置----
1 #导入模块 2 import tkinter 3 4 #创建主窗口对象 5 root = tkinter.Tk() 6 #大小 7 root.minsize(500,500) 8 9 #place()方式 ->定位摆放方法(推荐)----相对位置----=========================== 10 #创建组件 11 btn1 = tkinter.Button(root,text = ‘按钮1‘) 12 btn1.place(relx = 0.2,rely = 0.1,relwidth = 0.1,relheight = 0.1) 13 14 #加入消息循环 15 root.mainloop()
tkinter组件:Button 按钮的样式
Label:标签控件,可以显示文本
win:主窗口
text:显示的文本内容
bg:背景颜色
fg:字体颜色
font:设置字体属性
wraplength:指定text文本中多款之后进行换行
anchor:文本显示的位置 n北 e东 s南 w西 center居中 ne se sw nw
justify:设置换行之后的对齐方式
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.minsize(500,500) 6 ‘‘‘ 7 8 #绝大部分尺寸的默认单位是像素 9 btn1 = tkinter.Button(root,text=‘尺寸‘) 10 btn1.pack(ipadx = 100, ipady = 20) 11 ‘‘‘ 12 13 ‘‘‘ 14 15 #坐标系(提示: 禁止同时使用两种布局) 16 btn2 = tkinter.Button(root,text=‘坐标系‘) 17 btn2.place(x = 100, y = 20) 18 19 ‘‘‘ 20 21 #颜色: 22 #颜色单词 23 btn3 = tkinter.Button(root,text=‘颜色‘,bg=‘gold‘) 24 btn3.pack() 25 26 #hex颜色模式 #红色绿色蓝色 0-255 ->> 使用十六进制 27 btn4 = tkinter.Button(root,text=‘颜色‘,bg=‘#ff0000‘) 28 btn4.pack() 29 30 #字体 31 btn5 = tkinter.Button(root,text=‘字体‘,font = (‘黑体‘,40,‘bold‘,‘italic‘)) 32 btn5.pack() 33 34 #锚点 35 btn6 = tkinter.Button(root,text=‘锚点‘,anchor=‘sw‘) 36 btn6.pack(ipadx = 20, ipady = 20) 37 38 # 三维效果 39 btn7 = tkinter.Button(root,text=‘3‘,relief= tkinter.FLAT) 40 btn7.pack() 41 42 #位图 43 btn8 = tkinter.Button(root,text=‘位图‘,bitmap = ‘question‘) 44 btn8.pack() 45 46 #鼠标样式 47 btn9 = tkinter.Button(root,text=‘鼠标‘,cursor=‘heart‘) 48 btn9.pack(ipadx=30,ipady=20) 49 50 #图片设置 51 #将图片设置为图像对象 52 long = tkinter.PhotoImage(file = ‘long.gif‘) 53 btn10 = tkinter.Button(root,text=‘图片‘,image=long) 54 btn10.pack() 55 56 #加入消息循环 57 root.mainloop()
1 import tkinter 2 3 # 创建一个主窗口 4 win = tkinter.Tk() 5 6 # 设置 标题 7 win.title("python-13") 8 9 # 设置窗口大小和位置 10 win.geometry("500x500+200+50") 11 12 """ 13 Label:标签控件,可以显示文本 14 win:主窗口 15 text:显示的文本内容 16 bg:背景颜色 17 fg:字体颜色 18 font:设置字体属性 19 wraplength:指定text文本中多款之后进行换行 20 anchor:文本显示的位置 n北 e东 s南 w西 center居中 ne se sw nw 21 justify:设置换行之后的对齐方式 22 """ 23 label = tkinter.Label(win, 24 text = "this is a python test", 25 bg = "red", 26 fg = "yellow", 27 font = ("黑体",25), 28 height = 5, 29 width = 10, 30 wraplength = 100, 31 # anchor = "ne", 32 # justify = "center" 33 ) 34 label.pack() 35 36 #启动主窗口 37 win.mainloop()
tkinter组件:画布
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 #创建画布 8 canvas = tkinter.Canvas(root,bg=‘white‘) 9 canvas.pack() 10 11 #画布中回值长方形 12 canvas.create_rectangle(20,20,100,100,fill=‘red‘,outline=‘yellow‘) 13 14 root.mainloop()
tkinter组件:复选框
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 #创建组件 8 #checkbutton = tkinter.Checkbutton(root, text=‘同意此协议‘) #设置文本方法1 : 文本不变 9 10 #设置显示内容tkinter变量 11 text = tkinter.StringVar() 12 13 #设置内容 14 text.set(‘同意嫁给你‘) 15 16 #设置复选框勾选与否的值 17 result = tkinter.IntVar() 18 19 #设置操作checkbutton的方法 20 def func(): 21 print(result.get()) 22 23 checkbutton = tkinter.Checkbutton(root,textvariable=text,variable=result,command=func,onvalue=66,offvalue=77) 24 checkbutton.pack() 25 26 root.mainloop()
tkinter组件:文本框
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 #创建组件 8 #用户名 9 username = tkinter.Entry(root,width=50,bg=‘yellow‘,fg=‘red‘) 10 username.pack() 11 12 #密码 13 password = tkinter.Entry(root,show=‘*‘) 14 password.pack() 15 16 root.mainloop()
1 """""" 2 """ 3 复选框 4 """ 5 6 import tkinter 7 8 # 创建一个主窗口 9 win = tkinter.Tk() 10 11 # 设置 标题 12 win.title("python-13") 13 14 # 设置窗口大小和位置 15 win.geometry("500x500+200+50") 16 17 def func(): 18 message = "" 19 if res1.get(): 20 message += "张三\n" 21 if res2.get(): 22 message += "李四\n" 23 if res3.get(): 24 message += "王五\n" 25 26 text.delete(0.0,tkinter.END) 27 text.insert(tkinter.INSERT,message) 28 29 res1 = tkinter.BooleanVar() 30 check1 = tkinter.Checkbutton(win,text = "张三",variable = res1) 31 check1.pack() 32 33 res2 = tkinter.BooleanVar() 34 check2 = tkinter.Checkbutton(win,text = "李四",variable = res2) 35 check2.pack() 36 37 res3 = tkinter.BooleanVar() 38 check3 = tkinter.Checkbutton(win,text = "王五",variable = res3) 39 check3.pack() 40 41 text = tkinter.Text(win,width = 50,height = 20) 42 text.pack() 43 44 button = tkinter.Button(win,text = "submit",width = 10,height = 5,command = func) 45 button.pack() 46 47 #启动主窗口 48 win.mainloop() 49 50 51 52 53 54 55 """""" 56 """ 57 复选框 58 """ 59 60 import tkinter 61 62 # 创建一个主窗口 63 win = tkinter.Tk() 64 65 # 设置 标题 66 win.title("python-13") 67 68 # 设置窗口大小和位置 69 win.geometry("500x500+200+50") 70 71 def func(): 72 message = "" 73 if res1.get(): 74 message += "张三\n" 75 if res2.get(): 76 message += "李四\n" 77 if res3.get(): 78 message += "王五\n" 79 80 text.delete(0.0,tkinter.END) 81 text.insert(tkinter.INSERT,message) 82 83 res1 = tkinter.BooleanVar() 84 check1 = tkinter.Checkbutton(win,text = "张三",variable = res1) 85 check1.pack() 86 87 res2 = tkinter.BooleanVar() 88 check2 = tkinter.Checkbutton(win,text = "李四",variable = res2) 89 check2.pack() 90 91 res3 = tkinter.BooleanVar() 92 check3 = tkinter.Checkbutton(win,text = "王五",variable = res3) 93 check3.pack() 94 95 text = tkinter.Text(win,width = 50,height = 20) 96 text.pack() 97 98 button = tkinter.Button(win,text = "submit",width = 10,height = 5,command = func) 99 button.pack() 100 101 #启动主窗口 102 win.mainloop()
tkinter组件:框架
1 import tkinter 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry(‘500x500‘) 7 8 #创建框架1 9 frame1 = tkinter.Frame(root,bg=‘red‘,width=500,height=100) 10 frame1.pack(side=‘top‘) 11 12 #框架1中横向摆放 13 btn1 = tkinter.Button(frame1,text=‘按钮‘) 14 btn1.pack(side=‘left‘,padx=20) 15 16 btn2 = tkinter.Button(frame1,text=‘按钮‘) 17 btn2.pack(side=‘left‘,padx=20) 18 19 btn3 = tkinter.Button(frame1,text=‘按钮‘) 20 btn3.pack(side=‘left‘,padx=20) 21 22 #创建框架2 23 frame2 = tkinter.Frame(root,bg=‘green‘,width=500,height=100) 24 frame2.pack(side=‘top‘) 25 26 btn4 = tkinter.Button(frame2,text=‘按钮‘) 27 btn4.pack(side=‘left‘,padx=20) 28 29 btn5 = tkinter.Button(frame2,text=‘按钮‘) 30 btn5.pack(side=‘left‘,padx=20) 31 32 btn6 = tkinter.Button(frame2,text=‘按钮‘) 33 btn6.pack(side=‘left‘,padx=20) 34 root.mainloop()
tkinter组件:labelframe框架
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 #创建组件 8 labelframe = tkinter.LabelFrame(root,text=‘四大美女‘) 9 labelframe.pack(ipadx = 100) 10 11 #讲其他组件摆放到labelframe中 12 btn1 = tkinter.Button(labelframe,text=‘貂蝉‘) 13 btn1.pack() 14 15 btn1 = tkinter.Button(labelframe,text=‘杨玉环‘) 16 btn1.pack() 17 18 btn1 = tkinter.Button(labelframe,text=‘西施‘) 19 btn1.pack() 20 21 btn1 = tkinter.Button(labelframe,text=‘王昭君‘) 22 btn1.pack() 23 24 root.mainloop()
tkinter组件:标签
1 import tkinter # 标签 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 #创建组件 8 label = tkinter.Label(root,text=‘这是一个标签‘,fg = ‘red‘) 9 label.pack() 10 11 root.mainloop()
tkinter组件:列表盒子(列表框)
1 import tkinter # 列表盒子 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry(‘500x500‘) 7 8 #设置listbox的内容 9 names = (‘杨巅峰‘,‘鲍菊花‘,‘刘产‘,‘杜子腾‘,‘熊初墨‘) 10 11 #将数据转换为tkinter的字符串变量 12 students = tkinter.StringVar(value=names) 13 14 #创建组件 15 listbox = tkinter.Listbox(root,listvariable=students) 16 listbox.pack() 17 18 root.mainloop()
tkinter组件:菜单栏
1 import tkinter #菜单 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry(‘500x500‘) 7 8 #1.创建主菜单 9 bigmenu = tkinter.Menu(root) 10 #2.创建子菜单 11 filemenu = tkinter.Menu(bigmenu,tearoff=0) 12 #子菜单可以添加功能 13 filemenu.add_command(label=‘打开文件‘) 14 filemenu.add_command(label=‘保存文件‘) 15 16 filemenu.add_separator() 17 filemenu.add_command(label=‘另存为文件‘) 18 filemenu.add_command(label=‘导出文件‘) 19 filemenu.add_command(label=‘退出‘) 20 21 #3.将子菜单加入子菜单 22 bigmenu.add_cascade(label=‘文件‘,menu=filemenu) 23 24 25 #2.创建子菜单 26 editmenu = tkinter.Menu(bigmenu) 27 #3.将子菜单加入子菜单 28 bigmenu.add_cascade(label=‘编辑‘,menu=editmenu) 29 30 #4.将主菜单加入界面 31 32 root.config(menu=bigmenu) 33 34 35 root.mainloop()
tkinter组件:option菜单(列表菜单)
1 import tkinter #option菜单 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry(‘500x500‘) 7 8 #创建变量接收结果 9 result = tkinter.StringVar() 10 result.set(‘请选择问题‘) 11 #创建组件 12 optionmenu = tkinter.OptionMenu(root,result,‘你的初恋是谁‘,‘你的初中老师是谁‘,‘你的初吻给了谁‘) 13 optionmenu.pack() 14 15 root.mainloop()
tkinter组件:按钮菜单
1 import tkinter #按钮菜单 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry(‘500x500‘) 7 8 #创建组件 9 menubutton = tkinter.Menubutton(root,text=‘性别‘) 10 menubutton.pack() 11 12 sex = tkinter.StringVar() 13 #添加选项 14 menu = tkinter.Menu(menubutton,tearoff=0) 15 menu.add_radiobutton(label=‘男‘,variable=sex) 16 menu.add_radiobutton(label=‘女‘,variable=sex) 17 18 #将菜单配置到组件 19 menubutton.config(menu=menu) 20 root.mainloop()
tkinter组件:划分窗口
1 import tkinter # 划分窗口 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry(‘500x500‘) 7 8 #创建组件 orient = ‘vertical‘ 9 panedwindow = tkinter.PanedWindow(root,orient = ‘horizontal‘) 10 11 #添加组件 12 btn1 = tkinter.Button(panedwindow,text=‘按钮1112222‘) 13 btn2 = tkinter.Button(panedwindow,text=‘按钮2‘) 14 15 panedwindow.add(btn1) 16 panedwindow.add(btn2) 17 18 panedwindow.pack(fill = ‘both‘,expand=‘yes‘) 19 20 root.mainloop()
tkinter组件:单选框
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 # 创建组件 8 sex = tkinter.StringVar() 9 10 radio1 = tkinter.Radiobutton(root,text=‘男‘,variable=sex,value=‘man‘) 11 radio1.pack() 12 13 radio2 = tkinter.Radiobutton(root,text=‘女‘,variable=sex,value=‘woman‘) 14 radio2.pack() 15 16 root.mainloop()
tkinter组件:滚动条1
1 import tkinter #进度条 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 #创建组件 8 scale = tkinter.Scale(root,orient=‘horizontal‘,from_=50,to= 80,resolution=0.5) 9 scale.pack() 10 11 root.mainloop()
tkinter组件:滚动条2
1 import tkinter #滚动条 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry(‘500x500‘) 7 8 #简单的滚动条 9 scroll = tkinter.Scrollbar(root) 10 scroll.pack(fill = ‘y‘, side = ‘right‘) 11 12 root.mainloop()
tkinter组件:限定类型输入框
1 import tkinter # 限定类型的输入框 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 spinbox = tkinter.Spinbox(root,from_ = 0, to=120,increment = 0.5) 8 spinbox.pack() 9 10 root.mainloop()
tkinter组件:多行文本框
1 import tkinter # 多行文本输入框 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry(‘500x500‘) 7 8 text = tkinter.Text(root,width = 50,height= 10) 9 text.pack() 10 11 #设置值 12 text.insert(‘0.0‘,‘你好啊,小姐姐‘) 13 root.mainloop()
tkinter组件:弹出新窗口
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry(‘500x500‘) 6 7 #聊天函数 8 9 def talk(): 10 #新窗口 11 newroot = tkinter.Toplevel() 12 13 # 弹出新窗口 14 btn = tkinter.Button(root,text=‘点击开始对话‘,command = talk) 15 btn.pack() 16 17 root.mainloop()
tkinter组件:消息对话框
1 #messagebox 消息对话框 2 import tkinter 3 #导入消息对话框子模块 4 import tkinter.messagebox 5 6 #创建主窗口 7 root = tkinter.Tk() 8 #设置大小 9 root.minsize(300,300) 10 11 ‘‘‘ 12 #声明函数 13 def okcancel(): 14 #弹出对话框 15 result = tkinter.messagebox.askokcancel(title = ‘okcancel‘,message = ‘先生,反已经做好了,要吃饭码?‘) 16 print(result) 17 18 19 #添加按钮 20 btn1 = tkinter.Button(root,text = ‘okcancel‘,command = okcancel) 21 btn1.pack() 22 23 24 #声明函数 25 def question(): 26 # 弹出对话框 27 result = tkinter.messagebox.askquestion(title = ‘question‘,message = ‘你是男人吗?‘) 28 print(result) 29 #添加按钮 30 btn2 = tkinter.Button(root,text = ‘question‘,command = question) 31 btn2.pack() 32 33 34 #声明函数 35 def retrycancel(): 36 # 弹出对话框 37 result = tkinter.messagebox.askretrycancel(title = ‘retrycancel‘,message = ‘女生拒绝了你,你要继续追码??‘) 38 print(result) 39 #添加按钮 40 btn3 = tkinter.Button(root,text = ‘retrycancel‘,command = retrycancel) 41 btn3.pack() 42 43 #声明函数 44 def yesno(): 45 # 弹出对话框 46 result = tkinter.messagebox.askyesno(title = ‘yesno‘,message = ‘你喜欢日本人吗?‘) 47 print(result) 48 #添加按钮 49 btn4 = tkinter.Button(root,text = ‘yesno‘,command = yesno) 50 btn4.pack() 51 52 53 54 #声明函数 55 def error(): 56 # 弹出对话框 57 tkinter.messagebox.showerror(title = ‘出错了‘,message = ‘你的年龄不符合要求!‘) 58 #添加按钮 59 btn5 = tkinter.Button(root,text = ‘error‘,command = error) 60 btn5.pack() 61 62 63 #声明函数 64 def warning(): 65 # 弹出对话框 66 tkinter.messagebox.showwarning(title = ‘警告‘,message = ‘18岁以下禁止进入‘) 67 #添加按钮 68 btn6 = tkinter.Button(root,text = ‘warning‘,command = warning) 69 btn6.pack() 70 ‘‘‘ 71 72 #声明函数 73 def info(): 74 # 弹出对话框 75 tkinter.messagebox.showinfo(title = ‘信息提示‘,message = ‘1区王者已上线!‘) 76 #添加按钮 77 btn7 = tkinter.Button(root,text = ‘info‘,command = info) 78 btn7.pack() 79 80 #加入消息循环 81 root.mainloop()
tkinter组件:消息输出框
1 #导入tkinter 2 import tkinter 3 #导入子模块 4 import tkinter.simpledialog 5 6 #创建主界面 7 root = tkinter.Tk() 8 #设置大小 9 root.minsize(300,300) 10 11 ‘‘‘ 12 def askname(): 13 result = tkinter.simpledialog.askstring(title = ‘获取信息‘,prompt = ‘请输入用户名‘,initialvalue = ‘匿名‘) 14 print(result) 15 16 #添加按钮 17 btn1 = tkinter.Button(root,text = ‘获取用户名‘,command = askname) 18 btn1.pack() 19 20 21 def askage(): 22 result = tkinter.simpledialog.askinteger(title = ‘获取信息‘,prompt = ‘请输入年龄‘,initialvalue = 18) 23 print(result) 24 25 #添加按钮 26 btn2 = tkinter.Button(root,text = ‘获取年龄‘,command = askage) 27 btn2.pack() 28 ‘‘‘ 29 30 def askheight(): 31 result = tkinter.simpledialog.askfloat(title = ‘获取信息‘,prompt = ‘请输入身高(单位:米)‘,initialvalue = 0) 32 print(result) 33 34 #添加按钮 35 btn3 = tkinter.Button(root,text = ‘获取身高‘,command = askheight) 36 btn3.pack() 37 38 root.mainloop()
tkinter组件:文件选择框
1 #导入tkinter 2 import tkinter 3 #导入子模块 4 import tkinter.filedialog 5 6 #help(tkinter.filedialog) 7 ‘‘‘ 8 askdirectory(**options) 9 获取一个文件夹的路径 10 11 askopenfile(mode=‘r‘, **options) 12 打开文件获取单个文件指针,具有open()的作用 13 14 askopenfiles(mode=‘r‘, **options) 15 打开文件获取多个文件指针,具有open()的作用 16 17 askopenfilename(**options) 18 选择单个文件,获取其路径 19 20 askopenfilenames(**options) 21 选择多个文件,获取其路径 22 23 Returns a list of filenames or empty list if 24 cancel button selected 25 26 asksaveasfile(mode=‘w‘, **options) 27 Ask for a filename to save as, and returned the opened file 28 29 asksaveasfilename(**options) 30 选择保存文件的路径 31 32 33 ‘‘‘ 34 35 36 #主界面 37 root = tkinter.Tk() 38 #设置大小 39 root.minsize(300,300) 40 41 42 ‘‘‘ 43 #定义函数 44 def filename(): 45 path = tkinter.filedialog.askopenfilename() 46 print(path) 47 48 #添加按钮触发 49 btn1 = tkinter.Button(root,text = ‘filename‘,command = filename) 50 btn1.pack() 51 ‘‘‘ 52 53 ‘‘‘ 54 #定义函数 55 def filenames(): 56 paths = tkinter.filedialog.askopenfilenames() 57 print(paths) 58 59 #添加按钮触发 60 btn2 = tkinter.Button(root,text = ‘filenames‘,command = filenames) 61 btn2.pack() 62 ‘‘‘ 63 64 ‘‘‘ 65 #定义函数 66 def file(): 67 fp = tkinter.filedialog.askopenfile(mode = ‘r‘) 68 print(fp) 69 70 #添加按钮触发 71 btn3 = tkinter.Button(root,text = ‘file‘,command = file) 72 btn3.pack() 73 ‘‘‘ 74 75 ‘‘‘ 76 #定义函数 77 def dir(): 78 path = tkinter.filedialog.askdirectory() 79 print(path) 80 81 #添加按钮触发 82 btn4 = tkinter.Button(root,text = ‘dir‘,command = dir) 83 btn4.pack() 84 ‘‘‘ 85 86 ‘‘‘ 87 #定义函数 88 def saveas(): 89 path = tkinter.filedialog.asksaveasfilename() 90 print(path) 91 92 #添加按钮触发 93 btn5 = tkinter.Button(root,text = ‘saveas‘,command = saveas) 94 btn5.pack() 95 ‘‘‘ 96 97 #参数设定 98 #定义函数 99 def filename(): 100 path = tkinter.filedialog.askopenfilename(initialdir = ‘c:/‘,initialfile = ‘abc.exe‘,title = ‘打开你心意的文件‘,filetypes = ((‘可执行文件‘,‘*.exe‘),(‘python file‘,‘*.py‘),(‘所有文件‘,‘*.*‘))) 101 print(path) 102 103 #添加按钮触发 104 btn1 = tkinter.Button(root,text = ‘filename‘,command = filename) 105 btn1.pack() 106 107 root.mainloop()
tkinter组件:颜色组件
1 #导入模块 2 import tkinter 3 #导入子模块 4 import tkinter.colorchooser 5 6 #主界面 7 root = tkinter.Tk() 8 root.minsize(300,300) 9 10 #函数 11 def color(): 12 result = tkinter.colorchooser.askcolor(color = ‘#ff9900‘) 13 print(result) 14 #设置界面背景颜色 15 root[‘bg‘] = result[1] 16 17 #添加按钮 18 btn = tkinter.Button(root,text = ‘选择颜色‘,command = color) 19 btn.pack() 20 21 22 23 root.mainloop()
tkinter组件:键盘-鼠标 事件
1 #事件学习: 2 #1.事件绑定函数 3 #2.事件类型 4 #3.事件对象 5 6 ‘‘‘ 7 以按钮为例: 8 1.为按钮添加一个【点击时候】的操作 ->事件类型 9 2.使用按钮的【command参数指定类函数】 ->事件绑定函数 10 3.按钮操作过程中的信息 ->事件对象 11 ‘‘‘ 12 13 #1.事件绑定函数(3个) 14 ‘‘‘ 15 1.组件.bind(‘事件类型‘,事件函数) 16 为一个组件绑定一个操作 17 2.组件.bind_class(‘组件类型‘,‘事件类型‘,事件函数) 18 为一类组件绑定一个操作 19 组件类型就是创建组件的方法名 例如按钮组件:Button 20 3.组件.bind_all(‘事件类型‘,事件函数) 21 为所有组件绑定一个操作(所有操作都会当作对主界面的操作) 22 ‘‘‘ 23 24 #2.事件类型 25 ‘‘‘ 26 鼠标事件类型 27 <Button-1> 按下了鼠标左键 <ButtonPress-1> 28 <Button-2> 按下了鼠标中键 <ButtonPress-2> 29 <Button-3> 按下了鼠标右键 <ButtonPress-3> 30 <Enter> 鼠标进入组件区域 31 <Leave> 鼠标离开组件区域 32 <ButtonRelease-1> 释放了鼠标左键 33 <ButtonRelease-2> 释放了鼠标中键 34 <ButtonRelease-3> 释放了鼠标右键 35 <B1-Moion> 按住鼠标左键移动 36 <B2-Moion> 按住鼠标中键移动 37 <B3-Moion> 按住鼠标右键移动 38 <Double-Button-1> 双击鼠标左键 39 <Double-Button-2> 双击鼠标中键 40 <Double-Button-3> 双击鼠标右键 41 <MouseWheel> 滚动鼠标滚轮 42 键盘事件类型 43 <KeyPress> 表示任何键盘按下 44 <KeyPress-A> 表示按下键盘A键 A可以设置为其他的按键 45 <Alt-KeyPress-A> 表示同时按下Alt和A键 A可以设置为其他的按键 46 <Control-KeyPress-A> 表示同时按下Ctrl和A键 A可以设置为其他的按键 47 <Shift-KeyPress-A> 表示同时按下Shift和A键 A可以设置为其他的按键 48 <Double-KeyPress-A> 表示双击键盘A键 A可以设置为其他的按键 49 <Lock-KeyPress-A> 表示开启大写之后键盘A键 A可以设置为其他的按键 50 <Alt-Control-KeyPress-A> 表示同时按下alt+Ctrl和A键 A可以设置为其他的按键 51 52 注意:键盘事件除了entry和text组件其他组件的事件最好绑定在主界面上 53 窗口和组件相关事件类型 54 Activate 当中组件由不可以用变为可用时 针对于state的变值 55 Deactivate 当组件由可用变为不可用时触发 56 Configure 当组件大小发生变化时触发 57 Destory 当组件销毁时触发 58 FocusIn 当组件获取焦点时触发 针对于Entry和Text有效 59 Map 当组件由隐藏变为显示时触发 60 UnMap 当组件由显示变为隐藏时触发 61 Perproty 当窗口属性发生变化时触发 62 63 ‘‘‘ 64 #3.事件对象 65 ‘‘‘ 66 x,y 当前触发事件时鼠标相对触发事件的组件的坐标值 67 x_root,y_root 当前触发事件时鼠标相对于屏幕的坐标值 68 char 获取当前键盘事件时按下的键对应的字符 69 keycode 获取当前键盘事件时按下的键对应的的ascii码 70 type 获取事件的类型 71 num 获取鼠标按键类型 123 左中右 72 widget 触发事件的组件 73 width/height 组件改变之后的大小和configure()相关 74 75 ‘‘‘ 76 77 #事件绑定的案例1: 78 import tkinter 79 80 root = tkinter.Tk() 81 root.minsize(300,200) 82 83 #单行文本 84 entry = tkinter.Entry(root) 85 entry.pack() 86 #事件函数 87 def changered(eventobj): 88 eventobj.widget[‘bg‘] = ‘red‘ 89 90 def changegreen(eventobj): 91 eventobj.widget[‘bg‘] = ‘green‘ 92 93 #事件绑定 94 entry.bind(‘<FocusIn>‘,changered) #entry获取焦点组件 变红 95 entry.bind(‘<FocusOut>‘,changegreen)#entry失去焦点组件 变绿 96 97 #注意:通过绑定函数操作,对应的事件函数,必须有形参接受事件对象。 98 # 事件函数必须在绑定之间定义 99 100 entry2 = tkinter.Entry(root) 101 entry2.pack() 102 103 #键盘事件 104 105 #变红色 106 def changer(eventobj): 107 print(‘#@@@@@@@@@@@@@@‘) 108 eventobj.widget[‘bg‘] = ‘red‘ 109 110 #变绿色 111 def changeg(eventobj): 112 print(‘#@@@@@@@@@@@@@@‘) 113 eventobj.widget[‘bg‘] = ‘green‘ 114 115 root.bind(‘<Control-KeyPress-r>‘,changer) 116 root.bind(‘<Control-KeyPress-R>‘,changer) 117 118 root.bind(‘<Control-KeyPress-g>‘,changeg) 119 root.bind(‘<Control-KeyPress-G>‘,changeg) 120 121 root.mainloop()
tkinter组件:鼠标事件1
1 import tkinter 2 3 root = tkinter.Tk() 4 root.minsize(300,300) 5 6 #按钮1 7 btn1 = tkinter.Button(root,text = ‘1‘) 8 btn1.place(x = 20,y = 20,width = 40,height = 40) 9 10 #按钮1 11 btn2 = tkinter.Button(root,text = ‘2‘) 12 btn2.place(x = 80,y = 20,width = 40,height = 40) 13 14 #按钮1 15 btn3 = tkinter.Button(root,text = ‘3‘) 16 btn3.place(x = 140,y = 20,width = 40,height = 40) 17 18 #按钮1 19 btn4 = tkinter.Button(root,text = ‘4‘) 20 btn4.place(x = 20,y = 80,width = 40,height = 40) 21 22 #按钮1 23 btn5 = tkinter.Button(root,text = ‘5‘) 24 btn5.place(x = 80,y = 80,width = 40,height = 40) 25 26 #按钮6 27 btn6 = tkinter.Button(root,text = ‘6‘) 28 btn6.place(x = 140,y = 80,width = 40,height = 40) 29 30 def changebg(e): 31 e.widget[‘bg‘] = ‘green‘ 32 33 #绑定按钮鼠标进入有事件 34 btn1.bind_class(‘Button‘,‘<Enter>‘,changebg) 35 36 37 def changebg(e): 38 e.widget[‘bg‘] = ‘yellow‘ 39 40 #绑定按钮鼠标离开有事件 41 btn1.bind_class(‘Button‘,‘<Leave>‘,changebg) 42 43 root.mainloop()
tkinter组件:鼠标事件2
1 import tkinter 2 3 root = tkinter.Tk() 4 root.minsize(300,300) 5 6 #按钮 7 btn = tkinter.Button(root,text = ‘##########‘) 8 btn.pack() 9 10 #输入框 11 entry = tkinter.Entry(root) 12 entry.pack() 13 14 #文本 15 text = tkinter.Text(root,width = 20,height = 5) 16 text.pack() 17 18 #函数 19 def changeentry(e): 20 entry[‘bg‘] = ‘cyan‘ 21 22 #事件绑定 23 btn.bind_all(‘<Button-1>‘,changeentry) 24 25 root.mainloop()
以上是关于gui - tkinter 开发的主要内容,如果未能解决你的问题,请参考以下文章
用Tkinter打造GUI开发工具(49)在Tkinter窗口上动态显示matplotlib.pyplot图形