一、常用的GUI库
基于tkinter模块创建GUI程序包括如下4个核心步骤:
操作如下:
from tkinter import * from tkinter import messagebox root = Tk() btn01=Button(root) btn01["text"]="点我就送花" btn01.pack() def songhua(e): #e就是事件对象 messagebox.showinfo("Message","送你一朵玫瑰花") print("送你99朵玫瑰花") btn01.bind("<Button-1>", songhua) root.mainloop() #调用组件的mainloop()方法,进入事件循环
二、主窗口位置和大小
通过geometry('wxh ±x ±y‘)进行设置。w为宽度,h为高度,+x表示距屏幕左边的距离,-x表示据屏幕右边的距离,+y表示距屏幕上边的距离,-y表示距屏幕下边的距离。
root = Tk() root.title("我的第一个GUI程序") root.geometry("500x300+100+200")
实验:测试GUI程序的类的对象:
"""测试一个经典的GUI程序的写法,使用面向对象的方式""" from tkinter import * from tkinter import messagebox class Application(Frame): """一个经典的GUI程序的类的写法""" def __init__(self, master=None): super().__init__(master) #super()代表的是父类的定义,而不是父类对象 self.master=master self.pack() self.createWidget() def createWidget(self): """创建组件""" self.btn01 = Button(self) self.btn01["text"] = "点击送花" self.btn01.pack() self.btn01["command"] =self.songhua # 创建一个退出按钮 self.btnQuit= Button(self, text="退出", command=root.destroy) self.btnQuit.pack() def songhua(self): messagebox.showinfo("送花","送你99朵玫瑰花") root=Tk() root.geometry("400x100+200+300") root.title("一个经典的GUI程序类的测试") app = Application(master=root) root.mainloop()
三、label标签
Label(标签)主要用于显示文本信息,也可以显示图像
Label(标签)有这些常见的属性:
四、Options选项详解
fred=Button(self, fg="red", bg="blue")
2.创建对象后,使用字典索引方式
fred["fg"]= "red"
fred["bg"] = "blue"
3. 创建对象后,使用 config()方法
fred.config(fg="red", bg="blue")
五、 Button
Button(按钮)用来执行用户的单击操作,Button可以包含文本,也可以包含图像,按钮被单击后会自动调用对应事件绑定的方法。
六、Entry单行文本框
Entry用来接收一行字符串的控件,如果用户输入的文字长度长于Entry控件的宽度时,文字会自动向后滚动,如果想输入多行文本,需要使用Text控件。
"""测试Entry组件的基本用法,使用面向对象的方式""" from tkinter import * from tkinter import messagebox class Application(Frame): """一个经典的GUI程序的类的写法""" def __init__(self, master=None): super().__init__(master) #super()代表的是父类的定义,而不是父类对象 self.master=master self.pack() self.createWidget() def createWidget(self): """创建登录界面的组件""" self.label01 = Label(self,text="用户名") self.label01.pack() #StringVar变量绑定到指定的组件 #StringVar变量的值发生变化,组件内容也变化 #组件内容发生变化,StringVar变量的值也发生变化。 v1=StringVar() self.entry01=Entry(self,textvariable=v1) self.entry01.pack() v1.set("admin") print(v1.get());print(self.entry01.get()) #创建密码框 self.label02=Label(self,text="密码") self.label02.pack() v2 = StringVar() self.entry02 = Entry(self, textvariable=v2,show="*") self.entry02.pack() Button(self,text="登录",command=self.login).pack() def login(self): print("用户名:"+self.entry01.get()) print("密码:" + self.entry02.get()) messagebox.showinfo("学习系统","登录成功!欢迎开始学习!") if __name__=='__main__': root = Tk() root.geometry("400x130+200+300") app=Application(master=root) root.mainloop()
七、Text多行文本框
Text(多行文本框)的主要用于显示多行文本,还可以显示网页链接,图片,HTML页面,甚至CSS样式表,添加组件等,因此,也常被当做简单的文本处理器,文本编辑器或者网页浏览器来使用。比如IDLE就是Text组件组成的。
八、Radiobutton单选按钮与Checkbutton复选按钮
Radiobutton控件用于选择同一组单选按钮中的一个。Radiobutton可以显示文本,也可以显示图像。
Checkbutton控件用于选择多个按钮的情况。Checkbutton可以显示文本,也可以显示图像。
九、canvas画布
canvas(画布)是一个矩形区域,可以放置图形,图像,组件等。
十、布局管理器
grid布局管理器:grid表格布局,采用表格结构组织组件。子组件的位置由行和列的单元格来确定,并且可以跨行和跨列,,从而实现复杂的布局。
grid()方法提供的选项
选项 | 说明 | 取值范围 |
column | 单元格的列号 | 从0开始的正整数 |
columnspan | 跨列,跨越的列数 | 正整数 |
row | 单元格的行号 | 从0开始的正整数 |
rowspan | 跨行,跨越的行数 | 正整数 |
ipadx、ipady | 设置子组件之间的间隔,x方向或者y方向,默认单位为像素 | 非负浮点数,默认0.0 |
padx、pady | 与之并列的组件之间的间隔,x方向或者y方向,默认单位为像素 | 非负浮点数,默认0.0 |
sticky | 组件紧贴所在单元格的某一角,对应于东南西北中以及4个角 | “n“,”s“,”w“,”e“,”nw“,”sw“,”se“,”ne“,”center“(默认) |