赞
踩
本篇文章给大家谈谈python编写图形化界面的工具,以及python如何做出图形界面,希望对各位有所帮助,不要忘了收藏本站喔。
大家好,小编来为大家解答以下问题,python如何做出图形界面,用python做图形用户界面,今天让我们一起来看看吧!
Python自带了tkinter 模块,实质上是一种流行的面向对象的GUI工具包 TK 的Python编程接口,提供了快速便利地创建GUI应用程序的方法。其图像化编程的基本步骤通常包括:
~导入 tkinter 模块
创建 GUI 根窗体
添加人机交互控件并编写相应的函数自学python应该怎么学python自学好学嘛。
在主事件循环中等待用户触发事件响应。
控件 | 名称 | 作用 |
---|---|---|
Button | 按钮 | 单击触发事件 |
Canvas | 画布 | 绘制图形或绘制特殊控件 |
Checkbutton | 复选框 | 多项选择 |
Entry | 输入框 | 接收单行文本输入 |
Frame | 框架 | 用于控件分组 |
Label | 标签 | 单行文本显示 |
Listbox | 列表框 | 显示文本列表 |
Menu | 菜单 | 创建菜单命令 |
Message | 消息 | 多行文本标签,与Label用法类似 |
Radiobutton | 单选按钮 | 从互斥的多个选项中做单项选择 |
Scale | 滑块 | 默认垂直方向,鼠标拖动改变数值形成可视化交互 |
Scrollbar | 滑动条 | 默认垂直方向,鼠标拖动改变数值,可与Text,Listbox,Canvas等控件配合移动可视化空间 |
Text | 文本框 | 接收或输出多行文本 |
Toplevel | 新建窗体容器 | 在顶层创建新窗体 |
- import tkinter
- # 创建主窗口
- win = tkinter.Tk()
- # 设置标题
- win.title("小王最帅")
- #设置大写和位置
- win.mainloop()
输出:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XKFhPz0W-1654168959309)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602174222188.png)]
- import tkinter
- # 创建主窗口
- win = tkinter.Tk()
- # 设置标题
- win.title("小王最帅")
- #设置大写和位置
- win.geometry("400x400+200+50")
- '''
- Labels标签控件,可以显示文本
- win:父窗口
- text:显示的文本内容
- bg:背景颜色
- fg:字体颜色
- font:字体
- wraplength:指定text文本中多宽后换行
- justify:设置换行后的对齐方式
- anchor:位置 n北,s,w,e,center居中:还可以写在一起:ne东北方向
- '''
- label = tkinter.Label(win,
- text="this is a world!",
- bg='pink',fg='red',
- font=('黑体',20),
- width=20,
- height=10,
- wraplength=100,
- justify='left',
- anchor='ne'
- )
- #显示出来
- label.pack()
- # 进入消息循环,可以写控件
- win.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gFyhp3x7-1654168959311)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602174058643.png)]
- import tkinter
- def func():
- print("小王是憨憨")# 创建主窗口
- win = tkinter.Tk()# 设置标题
- win.title("小王最帅")#设置大写和位置
- win.geometry("400x400+200+50")# 创建按钮
- button1=tkinter.Button(win,text='按钮',command=func,width=10,height=10,anchor='ne')
- button1.pack()
- button2=tkinter.Button(win,text='按钮',command=lambda:print("放假放假"))
- button2.pack()
- button3=tkinter.Button(win,text='退出',command=win.quit)
- button3.pack()# 进入消息循环,可以写控件
- win.mainloop()
输出:
- 小王是憨憨
- 放假放假
解释:点击不同的按钮,输出不同的结果。
- import tkinter
- def func():
- print("小王是憨憨")
- win = tkinter.Tk()# 创建主窗口
- win.title("小王最帅")# 设置标题
- win.geometry("400x400+200+50")#设置大写和位置
- '''
- Entry:输入控件,用于显示简单的文本内容
- '''
- entry1=tkinter.Entry(win,show='*') # show=‘*’可以表示输入的密码#,密文显示
- entry1.pack()
- e=tkinter.Variable()# 绑定变量
- entry2=tkinter.Entry(win,textvariable=e) # show=‘*’可以表示输入的密码
- entry2.pack()
- e.set("放假放假")#e代表输入框这个对象,设置值
- # 取值
- print(e.get())
- print(entry2.get())# 进入消息循环,可以写控件
- win.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G9yK8oNA-1654168959312)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602175456315.png)]
- import tkinter
- # 创建主窗口
- win = tkinter.Tk()
- # 设置标题
- win.title("小王最帅")
- #设置大写和位置
- win.geometry("400x400+200+50")
- def showinfo():
- # 获取输入的内容
- print(entry.get())
- entry=tkinter.Entry(win)
- entry.pack()
- button=tkinter.Button(win,text="按钮",command=showinfo)
- button.pack()
- # 进入消息循环,可以写控件
- win.mainloop()
输出:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V325B1AM-1654168959313)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602175807751.png)]
123456
解释:点击按钮将框中的数据输出。
- import tkinter
- # 创建主窗口
- win = tkinter.Tk()
- # 设置标题
- win.title("小王最帅")
- #设置大写和位置
- win.geometry("400x400+200+50")
- '''
- 文本控件:用于显示多行文本
- '''
- # height表示的是显示的行数
- text = tkinter.Text(win, width=30, height=10)
- text.pack()
- str = '''长恨歌
- 白居易 〔唐代〕
- 汉皇重色思倾国,御宇多年求不得。
- 杨家有女初长成,养在深闺人未识。
- 天生丽质难自弃,一朝选在君王侧。
- 回眸一笑百媚生,六宫粉黛无颜色。
- 春寒赐浴华清池,温泉水滑洗凝脂。
- 侍儿扶起娇无力,始是新承恩泽时。
- 云鬓花颜金步摇,芙蓉帐暖度春宵。
- 春宵苦短日高起,从此君王不早朝。
- 承欢侍宴无闲暇,春从春游夜专夜。
- 后宫佳丽三千人,三千宠爱在一身。
- 金屋妆成娇侍夜,玉楼宴罢醉和春。
- 姊妹弟兄皆列土,可怜光彩生门户。
- 遂令天下父母心,不重生男重生女。
- 骊宫高处入青云,仙乐风飘处处闻。
- 缓歌慢舞凝丝竹,尽日君王看不足。
- 渔阳鼙鼓动地来,惊破霓裳羽衣曲。
- 九重城阙烟尘生,千乘万骑西南行。
- 翠华摇摇行复止,西出都门百余里。
- 六军不发无奈何,宛转蛾眉马前死。
- 花钿委地无人收,翠翘金雀玉搔头。
- 君王掩面救不得,回看血泪相和流。
- 黄埃散漫风萧索,云栈萦纡登剑阁。
- 峨嵋山下少人行,旌旗无光日色薄。
- 蜀江水碧蜀山青,圣主朝朝暮暮情。
- 行宫见月伤心色,夜雨闻铃肠断声。
- 天旋地转回龙驭,到此踌躇不能去。(地转 一作:日转)
- 马嵬坡下泥土中,不见玉颜空死处。
- 君臣相顾尽沾衣,东望都门信马归。
- 归来池苑皆依旧,太液芙蓉未央柳。
- 芙蓉如面柳如眉,对此如何不泪垂?
- 春风桃李花开日,秋雨梧桐叶落时。(花开日 一作:花开夜)
- 西宫南内多秋草,落叶满阶红不扫。(南内 一作:南苑)
- 梨园弟子白发新,椒房阿监青娥老。
- 夕殿萤飞思悄然,孤灯挑尽未成眠。
- 迟迟钟鼓初长夜,耿耿星河欲曙天。
- 鸳鸯瓦冷霜华重,翡翠衾寒谁与共?
- 悠悠生死别经年,魂魄不曾来入梦。
- 临邛道士鸿都客,能以精诚致魂魄。
- 为感君王辗转思,遂教方士殷勤觅。
- 排空驭气奔如电,升天入地求之遍。
- 上穷碧落下黄泉,两处茫茫皆不见。
- 忽闻海上有仙山,山在虚无缥缈间。
- 楼阁玲珑五云起,其中绰约多仙子。
- 中有一人字太真,雪肤花貌参差是。
- 金阙西厢叩玉扃,转教小玉报双成。
- 闻道汉家天子使,九华帐里梦魂惊。
- 揽衣推枕起徘徊,珠箔银屏迤逦开。
- 云鬓半偏新睡觉,花冠不整下堂来。
- 风吹仙袂飘飖举,犹似霓裳羽衣舞。(飘飖 一作:飘飘)
- 玉容寂寞泪阑干,梨花一枝春带雨。(阑 通:栏)
- 含情凝睇谢君王,一别音容两渺茫。
- 昭阳殿里恩爱绝,蓬莱宫中日月长。
- 回头下望人寰处,不见长安见尘雾。
- 惟将旧物表深情,钿合金钗寄将去。
- 钗留一股合一扇,钗擘黄金合分钿。
- 但令心似金钿坚,天上人间会相见。(但令 一作:但教)
- 临别殷勤重寄词,词中有誓两心知。
- 七月七日长生殿,夜半无人私语时。
- 在天愿作比翼鸟,在地愿为连理枝。
- 天长地久有时尽,此恨绵绵无绝期。'''
- text.insert(tkinter.INSERT, str)
- # 进入消息循环,可以写控件
- win.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xfhy053J-1654168959314)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602180502981.png)]
- import tkinter
- win = tkinter.Tk()
- win.title("小王最帅")
- win.geometry("400x400+200+50")
- '''
- 文本控件:用于显示多行文本
- '''
- # 创建滚动条
- scroll = tkinter.Scrollbar()
- text = tkinter.Text(win, width=30, height=10)
- # side放到窗体的哪一侧, fill填充
- scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
- text.pack(side=tkinter.LEFT, fill=tkinter.Y)
- # 关联
- scroll.config(command=text.yview)
- text.config(yscrollcommand=scroll.set)
- text.pack()
- str = '''长恨歌
- 白居易 〔唐代〕
- 汉皇重色思倾国,御宇多年求不得。
- 杨家有女初长成,养在深闺人未识。
- 天生丽质难自弃,一朝选在君王侧。
- 回眸一笑百媚生,六宫粉黛无颜色。
- 春寒赐浴华清池,温泉水滑洗凝脂。
- 侍儿扶起娇无力,始是新承恩泽时。
- 云鬓花颜金步摇,芙蓉帐暖度春宵。
- 春宵苦短日高起,从此君王不早朝。
- 承欢侍宴无闲暇,春从春游夜专夜。
- 后宫佳丽三千人,三千宠爱在一身。
- 金屋妆成娇侍夜,玉楼宴罢醉和春。
- 姊妹弟兄皆列土,可怜光彩生门户。
- 遂令天下父母心,不重生男重生女。
- 骊宫高处入青云,仙乐风飘处处闻。
- 缓歌慢舞凝丝竹,尽日君王看不足。
- 渔阳鼙鼓动地来,惊破霓裳羽衣曲。
- 九重城阙烟尘生,千乘万骑西南行。
- 翠华摇摇行复止,西出都门百余里。
- 六军不发无奈何,宛转蛾眉马前死。
- 花钿委地无人收,翠翘金雀玉搔头。
- 君王掩面救不得,回看血泪相和流。
- 黄埃散漫风萧索,云栈萦纡登剑阁。
- 峨嵋山下少人行,旌旗无光日色薄。
- 蜀江水碧蜀山青,圣主朝朝暮暮情。
- 行宫见月伤心色,夜雨闻铃肠断声。
- 天旋地转回龙驭,到此踌躇不能去。(地转 一作:日转)
- 马嵬坡下泥土中,不见玉颜空死处。
- 君臣相顾尽沾衣,东望都门信马归。
- 归来池苑皆依旧,太液芙蓉未央柳。
- 芙蓉如面柳如眉,对此如何不泪垂?
- 春风桃李花开日,秋雨梧桐叶落时。(花开日 一作:花开夜)
- 西宫南内多秋草,落叶满阶红不扫。(南内 一作:南苑)
- 梨园弟子白发新,椒房阿监青娥老。
- 夕殿萤飞思悄然,孤灯挑尽未成眠。
- 迟迟钟鼓初长夜,耿耿星河欲曙天。
- 鸳鸯瓦冷霜华重,翡翠衾寒谁与共?
- 悠悠生死别经年,魂魄不曾来入梦。
- 临邛道士鸿都客,能以精诚致魂魄。
- 为感君王辗转思,遂教方士殷勤觅。
- 排空驭气奔如电,升天入地求之遍。
- 上穷碧落下黄泉,两处茫茫皆不见。
- 忽闻海上有仙山,山在虚无缥缈间。
- 楼阁玲珑五云起,其中绰约多仙子。
- 中有一人字太真,雪肤花貌参差是。
- 金阙西厢叩玉扃,转教小玉报双成。
- 闻道汉家天子使,九华帐里梦魂惊。
- 揽衣推枕起徘徊,珠箔银屏迤逦开。
- 云鬓半偏新睡觉,花冠不整下堂来。
- 风吹仙袂飘飖举,犹似霓裳羽衣舞。(飘飖 一作:飘飘)
- 玉容寂寞泪阑干,梨花一枝春带雨。(阑 通:栏)
- 含情凝睇谢君王,一别音容两渺茫。
- 昭阳殿里恩爱绝,蓬莱宫中日月长。
- 回头下望人寰处,不见长安见尘雾。
- 惟将旧物表深情,钿合金钗寄将去。
- 钗留一股合一扇,钗擘黄金合分钿。
- 但令心似金钿坚,天上人间会相见。(但令 一作:但教)
- 临别殷勤重寄词,词中有誓两心知。
- 七月七日长生殿,夜半无人私语时。
- 在天愿作比翼鸟,在地愿为连理枝。
- 天长地久有时尽,此恨绵绵无绝期。'''
- text.insert(tkinter.INSERT, str)
- win.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0eZNbhE7-1654168959315)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602180934648.png)]
解释:跟上面的区别是增加滚动条。
属性 | 说明 | 取值 |
---|---|---|
anchor | 文本起始位置 | CENTER(默认),E,S,W,N,NE,SE,SW,NW |
bg | 背景色 | 无 |
bd | 加粗(默认2像素) | 无 |
bitmap | 黑白二值图标 | 网上查找 |
cursor | 鼠标悬停光标 | 网上查找 |
font | 字体 | 无 |
fg | 字体颜色 | 无 |
height | 高(文本控件的单位为行) | 无 |
image | 显示图像 | 无 |
justify | 多行文本的对齐方式 | CENTER(默认),LEFT,RIGHT,TOP,BOTTOM |
padx | 水平扩展像素 | 无 |
pady | 垂直扩展像素 | 无 |
relief | 3D浮雕样式 | FLAT,RAISED,SUNKEN,GROOVE,RIDGE |
state | 控件实例状态是否可用 | NORMAL(默认),DISABLED |
width | 宽(文本控件的单位为行) | 无 |
定义:字面意思只能选一个。
示例:
- from tkinter import *
- def Mysel():
- dic = {0:'甲',1:'乙',2:'丙'}
- s = "您选了" + dic.get(var.get()) + "项"
- lb.config(text = s)
- root = Tk()
- root.title('单选按钮')
- lb = Label(root)
- lb.pack()
- var = IntVar()
- rd1 = Radiobutton(root,text="甲",variable=var,value=0,command=Mysel)
- rd1.pack()
- rd2 = Radiobutton(root,text="乙",variable=var,value=1,command=Mysel)
- rd2.pack()
- rd3 = Radiobutton(root,text="丙",variable=var,value=2,command=Mysel)
- rd3.pack()
- root.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kcTMG3eR-1654168959315)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602181717894.png)]
跟多选的选择题一样
示例:
- from tkinter import *
- import tkinter
- def run():
- if(CheckVar1.get()==0 and CheckVar2.get()==0 and CheckVar3.get()==0 and CheckVar4.get()==0):
- s = '您还没选择任何爱好项目'
- else:
- s1 = "哈密瓜" if CheckVar1.get()==1 else ""
- s2 = "葡萄" if CheckVar2.get() == 1 else ""
- s3 = "羊肉串" if CheckVar3.get() == 1 else ""
- s4 = "卡瓦斯" if CheckVar4.get() == 1 else ""
- s = "您选择了%s %s %s %s" % (s1,s2,s3,s4)
- lb2.config(text=s)
- root = tkinter.Tk()
- root.title('复选框')
- lb1=Label(root,text='请选择您的爱好项目')
- lb1.pack()
- CheckVar1 = IntVar()
- CheckVar2 = IntVar()
- CheckVar3 = IntVar()
- CheckVar4 = IntVar()
- ch1 = Checkbutton(root,text='哈密瓜',variable = CheckVar1,onvalue=1,offvalue=0)
- ch2 = Checkbutton(root,text='葡萄',variable = CheckVar2,onvalue=1,offvalue=0)
- ch3 = Checkbutton(root,text='羊肉串',variable = CheckVar3,onvalue=1,offvalue=0)
- ch4 = Checkbutton(root,text='卡瓦斯',variable = CheckVar4,onvalue=1,offvalue=0)
- ch1.pack()
- ch2.pack()
- ch3.pack()
- ch4.pack()
- btn = Button(root,text="OK",command=run)
- btn.pack()
- lb2 = Label(root,text='')
- lb2.pack()
- root.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNB4x1W6-1654168959316)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602182113370.png)]
滑块控件实例的主要方法比较简单,有 get()
和set
(值),分别为取值和将滑块设在某特定值上。滑块实例也可绑定鼠标左键释放事件<ButtoonRelease-1>
,并在执行函数中添加参数event来实现事件响应。
例如:在一个窗体上设计一个200
像素宽的水平滑块,取值范围为1.0~5.0
,分辨精度为0.05
,刻度间隔为 1
,用鼠标拖动滑块后释放鼠标可读取滑块值并显示在标签上。效果如下:
示例:
- from tkinter import *
- def show(event):
- s = '滑块的滑动距离' + str(var.get())
- lb.config(text=s)
- root = Tk()
- root.title('滑块')
- root.geometry('320x180')
- var=DoubleVar()
- scl = Scale(root,orient=HORIZONTAL,length=200,from_=1.0,to=5.0,label='请拖动滑块',tickinterval=1,resolution=0.05,variable=var)
- scl.bind('<ButtonRelease-1>',show)
- scl.pack()
- lb = Label(root,text='')
- lb.pack()
- root.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1gSGPCFb-1654168959316)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602182552437.png)]
示例:
- from tkinter import *
- def new():
- s = '新建'
- lb1.config(text=s)
- def ope():
- s = '打开'
- lb1.config(text=s)
- def sav():
- s = '保存'
- lb1.config(text=s)
- def cut():
- s = '剪切'
- lb1.config(text=s)
- def cop():
- s = '复制'
- lb1.config(text=s)
- def pas():
- s = '粘贴'
- lb1.config(text=s)
- def popupmenu(event):
- mainmenu.post(event.x_root,event.y_root)
- root = Tk()
- root.title('菜单实验')
- root.geometry('320x240')
- lb1 = Label(root,text='显示信息',font=('黑体',32,'bold'))
- lb1.place(relx=0.2,rely=0.2)
- mainmenu = Menu(root)
- menuFile = Menu(mainmenu) # 菜单分组 menuFile
- mainmenu.add_cascade(label="文件",menu=menuFile)
- menuFile.add_command(label="新建",command=new)
- menuFile.add_command(label="打开",command=ope)
- menuFile.add_command(label="保存",command=sav)
- menuFile.add_separator() # 分割线
- menuFile.add_command(label="退出",command=root.destroy)
- menuEdit = Menu(mainmenu) # 菜单分组 menuEdit
- mainmenu.add_cascade(label="编辑",menu=menuEdit)
- menuEdit.add_command(label="剪切",command=cut)
- menuEdit.add_command(label="复制",command=cop())
- menuEdit.add_command(label="粘贴",command=pas())
- root.config(menu=mainmenu)
- root.bind('Button-3',popupmenu) # 根窗体绑定鼠标右击响应事件
- root.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cUwjJO0b-1654168959317)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602183021820.png)]
固定格式:
菜单实例名=Menu(根窗体)
菜单分组1=Menu(菜单实例名)
菜单实例名.add_cascade(<label=菜单分组1 显示文本>,<menu=菜单分组1>)
菜单分组1.add_command(<label=命令1文本>,<command=命令1函数名>)
示例:
- rom tkinter import *
- import tkinter.messagebox
- def xz():
- answer=tkinter.messagebox.askokcancel('请选择','请选择确定或取消')
- if answer:
- lb.config(text='已确认')
- else:
- lb.config(text='已取消')
- root = Tk()
- lb = Label(root,text='')
- lb.pack()
- btn=Button(root,text='弹出对话框',command=xz)
- btn.pack()
- root.mainloop()
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MCGd67zW-1654168959318)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602184033255.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TI8jwffq-1654168959318)(C:\Users\86139\AppData\Roaming\Typora\typora-user-images\image-20220602184057053.png)]
示例:
- from tkinter import *
- import tkinter.filedialog
- def xz():
- filename=tkinter.filedialog.askopenfilename()
- if filename != '':
- lb.config(text='您选择的文件是'+filename)
- else:
- lb.config(text='您没有选择任何文件')
- root = Tk()
- lb = Label(root,text='')
- lb.pack()
- btn=Button(root,text='弹出文件选择对话框',command=xz)
- btn.pack()
- root.mainloop()
- = Tk()
- lb = Label(root,text='')
- lb.pack()
- btn=Button(root,text='弹出对话框',command=xz)
- btn.pack()
- root.mainloop()
输出:
[外链图片转存中…(img-MCGd67zW-1654168959318)]
[外链图片转存中…(img-TI8jwffq-1654168959318)]
示例:
- from tkinter import *
- import tkinter.filedialog
- def xz():
- filename=tkinter.filedialog.askopenfilename()
- if filename != '':
- lb.config(text='您选择的文件是'+filename)
- else:
- lb.config(text='您没有选择任何文件')
- root = Tk()
- lb = Label(root,text='')
- lb.pack()
- btn=Button(root,text='弹出文件选择对话框',command=xz)
- btn.pack()
- root.mainloop()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。