一。常用的GUI库
1.Tkinter
2.wxPython(较流行,适用于大型应用程序开发)‘
3.PyQT(适合大型GUI程序编程)
基于tkinter模块创建GUI程序步骤
1.创建应用程序主窗口对象
2.在主窗口这添加各种可视化组件比如按钮(Button)、文本框(Label)
3。通过几何布局管理器,管理组件的大小和位置。
4.事件处理
通过绑定事件处理程序,响应用户操作所触发的事件
tkinter主窗口
主窗口位置和大小
通过geometry(’wxhxy‘)(注意:标红的是英文字母x)进行设置。w为宽度,h为高度,
+x表示距屏幕左边的距离,-x表示距屏幕右边的距离;+y表示距屏幕上边的距离,-y表示距屏幕下边的距离。
Label(标签)主要用于显示文本信息,也可以显示图像
常见属性:
1.width、height 用于指定区域大小。
1.显示文本时,以英文字符为单位大小,汉字占两个字符。
2.显示图像时,以像素大小为单位
2.font(用于指定字体和字体大小)font=(font-name,size)
3.image(显示在Label上的图像)
4.fg和bg(前景色和背景色)
5.justify 针对多行文字的对齐
按键选项汇总
Entry单行文本框
Entry 用来接收一行字符串的控件。如果用户输入的文字 长度长于 Entry 控件的宽度时 , 文字会自动向后滚动。如果 想输入多行文本 , 需要使用 Text 控件。
界面效果(登录界面的创建)
from tkinter import *from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master) #显示调用父类的构造器self.master = masterself.pack()self.creatWidget()def creatWidget(self):self.labe01 = Label(self, text="用户名")self.labe01.pack()v1 = StringVar()self.entry01 = Entry(self, textvariable=v1)self.entry01.pack()self.labe02 = Label(self, text="密码")self.labe02.pack()v2 = StringVar() #创建一个StringVar()对象,用于显示信息# 这里显示密码,不能直接显示,应用*来代替密码self.entry02 = Entry(self, textvariable=v2, show="*") #将Entry与StringVar()对象进行绑定self.entry02.pack()self.butn01 = Button(self, text="登录", command=self.login)#绑定事件self.butn01.pack()def login(self):username = self.entry01.get()password = self.entry02.get()if username == 'karsa' and password == '123456789':messagebox.showinfo("使命召唤", "登录成功!!!")else:messagebox.showinfo("使命召唤", "你的用户名或密码输入错误,登录失败!")if __name__ == '__main__':root = Tk()root.geometry('500x300+300+300')app = Application(root) #以OOP的方式来创建GUI编程root.mainloop()
Text多行文本框Text(多行文本框)的主要用于显示多行文本,还可以显示 网页链接,图片,HTML页面,甚至CSS样式表,添加组件 等。因此,也常被当做简单的文本处理器、文本编辑器或者 网页浏览器来使用。比如IDLE就是Text组件构成的。 对Text文本的测试
from tkinter import *import webbrowserclass Application(Frame):def __init__(self, master=None):super().__init__(master) # super()代表的是父类的定义,而不是父类对象self.master = masterself.pack()self.createWidget()def createWidget(self):self.w1 = Text(root, width=40, height=12, bg="gray")# 宽度 20 个字母(10 个汉字),高度一个行高self.w1.pack()# self.w1.insert(1.0, "0123456789\nabcdefg")# 表示在第一行第0列插入文本self.w1.insert(1.0, "0123456789\nabcdefg")self.w1.insert(2.3, "锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛苦\n")Button(self, text="重复插入文本",command=self.insertText).pack(side="left")Button(self, text="返回文本",command=self.returnText).pack(side="left")Button(self, text="添加图片",command=self.addImage).pack(side="left")Button(self, text="添加组件",command=self.addWidget).pack(side="left")Button(self, text="通过 tag 精确控制文本",command=self.testTag).pack(side="left")def insertText(self):# INSERT 索引表示在光标处插入self.w1.insert(INSERT, ' Gaoqi ')# END 索引号表示在最后插入self.w1.insert(END, '[sxt]')self.w1.insert(1.8, "gaoqi")def returnText(self):# Indexes(索引)是用来指向 Text 组件中文本的位置,Text 的组件索引也是对应实际字符之间的位置。# 核心:行号以 1 开始 列号以 0 开始print(self.w1.get(1.2, 1.6))print("所有文本内容:\n" + self.w1.get(1.0, END))def addImage(self):# global photoself.photo = PhotoImage(file="tt.gif")# END表示在文本末尾添加图片self.w1.image_create(END, image=self.photo)def addWidget(self):b1 = Button(self.w1, text='喜欢')# 在 text 创建组件的命令self.w1.window_create(INSERT, window=b1)def testTag(self):self.w1.delete(1.0, END)self.w1.insert(INSERT, "good good study,day day up!\n中国\n程序员\n百度,搜一下就知道")# Indexes(索引)是用来指向 Text 组件中文本的位置,Text 的组件索引也是对应实际字符之间的位置。# 核心:行号以 1 开始 列号以 0 开始self.w1.tag_add("good", 1.0, 1.9)self.w1.tag_config("good", background="yellow",foreground="red")self.w1.tag_add("baidu", 4.0, 4.2)# underline设置下划线self.w1.tag_config("baidu", underline=True)self.w1.tag_bind("baidu", "<Button-1>", self.webshow)def webshow(self, event):# 打开网页一定要使用import webbrowserwebbrowser.open("/")if __name__ == '__main__':root = Tk()root.geometry("450x300+200+300")app = Application(master=root)root.mainloop()
Radiobutton单选按钮Radiobutton 控件用于选择同一组单选按钮中的一个。 Radiobutton 可以显示文本,也可以显示图像。
from tkinter import *from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master) # super()代表的是父类的定义,而不是父类对象self.master = masterself.pack()self.createWidget()def createWidget(self):self.v = StringVar()self.v.set("F")# 两个按钮对应同一个变量self.r1 = Radiobutton(self, text="男性", value="M",variable=self.v)self.r2 = Radiobutton(self, text="女性", value="F",variable=self.v)# pack布局pack(side="left") 对齐方式为左对齐self.r1.pack(side="left");self.r2.pack(side="left")Button(self, text="确定",command=self.confirm).pack(side="left")def confirm(self):messagebox.showinfo("测试", "选择的性别: "+self.v.get())if __name__ == '__main__':root = Tk()root.geometry("400x50+200+300")app = Application(master=root)root.mainloop()
Checkbutton复选按钮Checkbutton 控件用于选择多个按钮的情况。 Checkbutton 可以显示文本,也可以显示图像。
"""测试 Checkbutton 组件的基本用法,使用面向对象的方式"""from tkinter import *from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master) # super()代表的是父类的定义,而不是父类对象self.master = masterself.pack()self.createWidget()def createWidget(self):# IntVar() 是 Tkinter 中的一个变量类型,它用于储存整型数据。self.codeHobby = IntVar(); self.videoHobby = IntVar()print(self.codeHobby.get()) # 默认值是 0,当选中后,变为1 onvalue=1, offvalue=0# 每个按钮对应不同的变量self.c1 = Checkbutton(self, text="敲代码", variable=self.codeHobby, onvalue=1, offvalue=0)self.c2 = Checkbutton(self, text="看视频", variable=self.videoHobby, onvalue=1, offvalue=0)self.c1.pack(side="left"); self.c2.pack(side="left")Button(self, text="确定", command=self.confirm).pack(side="left")def confirm(self):if self.videoHobby.get() == 1:messagebox.showinfo("测试", "看视频,都是正常人有的爱好!你喜欢看什么类型?")if self.codeHobby.get() == 1:messagebox.showinfo("测试", "抓获野生程序猿一只,赶紧送给他一点算法题充饥!!")if __name__ == '__main__':root = Tk()root.geometry("400x50+200+300")app = Application(master=root)root.mainloop()
如果觉得《GUI图形用户界面编程(tkinter的基础上)》对你有帮助,请点赞、收藏,并留下你的观点哦!