Tkinter文档
一,Tkinter基本流程
1. 创建应用程序主窗口对象
from tkinter import *
window = Tk()
window.mainloop()#开启主循环
2. 在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等。
btn = Button(window)
3. 通过几何布局管理器,管理组件的大小和位置
btn.pack()
4. 事件处理 : 通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)
btnQuit = Button(self,text="退出",command=self.master.destroy)
二,类与对象的角度使用Tkinter
import tkinter as tkclass Application(tk.Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.create_widgets()def create_widgets(self):self.hi_there = tk.Button(self)self.hi_there["text"] = "Hello World\n(click me)"self.hi_there["command"] = self.say_hiself.hi_there.pack(side="top")self.quit = tk.Button(self, text="QUIT", fg="red",command=self.master.destroy)self.quit.pack(side="bottom")def say_hi(self):print("hi there, everyone!")root = tk.Tk()
app = Application(master=root)
app.mainloop()
class Application(tk.Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.create_widgets()
其中,Application 继承tk.Frame控件,初始化函数后super().__init__(master)将master传入tk.Frame父类中,其中,master为主窗口(或者上一级窗口)。接下来将Application放在主窗口中(self.pack()),再调用create_widgets()创建其他控件。
包装器(pack)
包装器是 Tk 的形状管理机制之一。 形状管理器用于指定部件在容器内的相对位置——彼此的 宿主 关系。与更为麻烦的 定位器 相比(不太常用,这里不做介绍),包装器可接受定性的相对关系—— 上面 、左边 、填充 等,并确定精确的放置坐标。
fred.pack() # defaults to side = "top"
fred.pack(side="left")
fred.pack(expand=1)
包装器参数设置
anchor
锚点类型。 表示包装器要放置的每个从属组件的位置。
expand
布尔型,
0
或1
。fill
合法值为:
'x'
、'y'
、'both'
、'none'
。ipadx 和 ipady
距离值,指定从属部件每一侧的内边距。
padx 和 pady
距离值,指定从属部件的外边距。
side
合法值为:
'left'
、'right'
、'top'
、'bottom'
。
def create_widgets(self):self.hi_there = tk.Button(self)self.hi_there["text"] = "Hello World\n(click me)"self.hi_there["command"] = self.say_hiself.hi_there.pack(side="top")self.quit = tk.Button(self, text="QUIT", fg="red",command=self.master.destroy)self.quit.pack(side="bottom")def say_hi(self):print("hi there, everyone!")
关于控件参数设置
1.字典型设置参数
self.hi_there = tk.Button(self)self.hi_there["text"] = "Hello World\n(click me)"self.hi_there["command"] = self.say_hiself.hi_there.pack(side="top")
2.关键词设置参数
self.quit = tk.Button(self, text="QUIT", fg="red",command=self.master.destroy)
3.利用config()方法设置参数
fred.config(fg="red", bg="blue")
三, 部分控件的使用
1.Button类
在Button类中,我们一般看重text和command参数,text为该控件的显示内容,command为控件绑定的事件,当然,也不能忘了将控件绑在窗口上。
所以,一般地讲,一个按键的基本形式为
btnQuit = Button(self,text="退出",command=self.master.destroy)
2.Label类
Label(标签)主要用于显示文本信息,也可以显示图像。
以下是label控件常见的一些属性
1. width,height: 用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字宽度占 2 个字符位置,高度和英文字符一样);如果显示是图像,则以像素为单位。默认值是 根据具体显示的内容动态调整。
2. font 指定字体和字体大小,如:font = (font_name,size)
3. image: 显示在 Label 上的图像,目前 tkinter 只支持 gif 格式。
4. fg 和 bg fg(foreground):前景色、bg(background):背景色
5. justify 针对多行文字的对齐,可设置 justify 属性,可选值"left", "center" or "right"
label01 = Label(self,text="Hello",width=10,height=2,bg="black",fg="white")
3.Entry类
Entry用来接收一行字符串的控件。如果用户输入的文字长度长于Entry控件的宽度时, 文字会自动向后滚动。
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):self.label01 = Label(self,text="用户名")self.label01.pack()self.v1 = StringVar()self.v1.set("ashto")self.entry01 = Entry(self,textvariable=self.v1)self.entry01.pack()self.label02 = Label(self,text="密码")self.label02.pack()self.v2 = StringVar()self.entry02 = Entry(self,textvariable=self.v2,show="*")self.entry02.pack()self.btnQuit = Button(self,text="登录",command=self.login)self.btnQuit.pack()def login(self):usrname = self.v1.get()pwd = self.v2.get()print("用户:",usrname)print("密码:",pwd)if usrname == "Ashto" and pwd == "123456":messagebox.showinfo(Message, "欢迎登录")else:messagebox.showinfo(Message,"用户不存在在!")if __name__ == '__main__':window = Tk()window.title("登录gui")window.geometry("400x200+100+100")app = Application(master=window)window.mainloop()
4.RadioButton类
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):self.v1 = StringVar()self.v1.set("M")self.r1 = Radiobutton(self,text="男",value="M",variable=self.v1)self.r2 = Radiobutton(self,text="女",value="F",variable=self.v1)self.r1.pack(side="left")self.r2.pack(side="left")if __name__ == '__main__':window = Tk()window.title("表单gui")window.geometry("500x200+100+100")app = Application(master=window)window.mainloop()
对于Radiobutton而言,重点关注value与variable参数就可以了,value表示选中该控件得到的值,而variable为绑定在该控件上的变量,控件获取到的值返回给该变量。我们通过StringVar来构造变量,同样地,我们可以通过IntVar,DoubleVar,BooleanVar来分别构造其他变量。
5.CheckButton类
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):self.v1 = IntVar()self.v2 = IntVar()self.c1 = Checkbutton(self,text="睡觉",variable=self.v1,onvalue=1,offvalue=0)self.c2 = Checkbutton(self,text="吃饭",variable=self.v2,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.v1.get() == 1:messagebox.showinfo("Test","睡觉有益健康")if self.v2.get() == 1:messagebox.showinfo("Test","吃饭有益健康")if __name__ == '__main__':window = Tk()window.title("表单gui")window.geometry("500x200+100+100")app = Application(master=window)window.mainloop()
onvalue为选中返回值,offvalue为未选中返回值。
6.Canvas类
self.canvas = Canvas(self,width=300,height=200,bg="green")
self.canvas可以调用方法来生成各种图形
关于其他的方法可以自行阅读文档或者ctrl+左键类名查看函数文档。
四,关于其他
关于Tk类
Misc 和 Wm 派生出子类 Tk,它代表应用程序的主窗口。一般应用程序都需要直接或间接 使用 Tk。
Tk类继承自Misc和Wm两个父类
Misc 和 Wm: Tkinter 的 GUI 组件有两个根父类,它们都直接继承了 object 类:
Misc:它是所有组件的根父类
Wm:它主要提供了一些与窗口管理器通信的功能函数。
以上仅举例,了解更多可以继续阅读wm父类的函数文档。
def destroy(self):"""Destroy this and all descendants widgets. This willend the application of this Tcl interpreter."""for c in list(self.children.values()): c.destroy()self.tk.call('destroy', self._w)Misc.destroy(self)global _default_rootif _support_default_root and _default_root is self:_default_root = None
关闭主窗口,该方法为Tk所有。
通过Tkinter文档,我们可以得到一些Tk对象的属性:
color
可在 rgb.txt 文件中以颜色名的形式给出,或是 RGB 字符串的形式,4 位 :
"#RGB"
,8 位 :"#RRGGBB"
,12 位:"#RRRGGGBBB"
,16 位:"#RRRRGGGGBBBB"
,其中R、G、B 为合法的十六进制数值。 详见 Ousterhout 书中的第 160 页。cursor
可采用
cursorfont.h
中的标准光标名称,去掉XC_
前缀。 比如要获取一个手形光标(XC_hand2
),可以用字符串"hand2"
。也可以指定自己的位图和掩码文件作为光标。参见 Ousterhout 书中的第 179 页。distance
屏幕距离可以用像素或绝对距离来指定。像素是数字,绝对距离是字符串,后面的字符表示单位:
c
是厘米,i
是英寸,m
是毫米,p
则表示打印机的点数。例如,3.5 英寸可表示为"3.5i"
。font
Tk 采用一串名称的格式表示字体,例如
{courier 10 bold}
。正数的字体大小以点为单位,负数的大小以像素为单位。geometry
这是一个
widthxheight
形式的字符串,其中宽度和高度对于大多数部件来说是以像素为单位的(对于显示文本的部件来说是以字符为单位的)。例如:fred["geometry"] = "200x100"。justify
合法的值为字符串:
"left"
、"center"
、"right"
和"fill"
。region
这是包含四个元素的字符串,以空格分隔,每个元素是表示一个合法的距离值(见上文)。例如:
"2 3 4 5"
、"3i 2i 4.5i 2i"
和"3c 2c 4c 10.43c"
都是合法的区域值。relief
决定了组件的边框样式。 合法值包括:
"raised"
、"sunken"
、"flat"
、"groove"
和"ridge"
。scrollcommand
这几乎就是带滚动条部件的
set()
方法,但也可是任一只有一个参数的部件方法。wrap:
只能是以下值之一:
"none"
、"char"
、"word"
。