GUI-tkinter
2021年10月7日
22:04
GUI类似于搭积木,将一个个Widget(组件)堆叠组合。
https://docs.python.org/zh-cn/3.9/library/tk.html
大型应用使用wxPython,PyQT是开源的QT的python版本。
DAY1 THE OPEN
1
2
| import tkinter as tk
rootwindow = Tk()
|
1
2
| button01 = Button(rootwindow)
button01["text"]="这是一个可以点击的按钮"
|
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。
目前有15种Tkinter的部件。我们提出这些部件以及一个简短的介绍,在下面的表:
控件 描述
Button 按钮控件;在程序中显示按钮。
Canvas 画布控件;显示图形元素如线条或文本
Checkbutton 多选框控件;用于在程序中提供多项选择框
Entry 输入控件;用于显示简单的文本内容
Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label 标签控件;可以显示文本和位图
Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton 菜单按钮控件,用于显示菜单项。
Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message 消息控件;用来显示多行文本,与label比较类似
Radiobutton 单选按钮控件;显示一个单选的按钮状态
Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text 文本控件;用于显示多行文本
Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox 输入控件;与Entry类似,但是可以指定输入范围值
PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox 用于显示你应用程序的消息框。
Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包、网格、位置
几何方法 描述
pack() 包装;
grid() 网格;
place() 位置;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| def reaction_after_click(e)
messagebox.showinfo("Message","我感受到你点击了我的按钮")
print("牛蛋")
button01.bind("<Button-1>",reaction_after_click)
#将事件【reaction_after_click】绑定在button01上。
from tkinter import *
from tkinter import messagebox
rootwindow = Tk()
button01 = Button(rootwindow) # 将btn01放到rootwindow
button01["text"]="这是一个可以点击的按钮"
button01.pack()
def reaction_after_click(e):
messagebox.showinfo("Message","我感受到你点击了我的按钮")
print("牛蛋")
button01.bind("<Button-1>",reaction_after_click)
rootwindow.mainloop() # 调用组件的mainloop进入时间循环(就是一直监听事件)
|
$geometry(‘wxh+x+y’)
500x300+100+200距离左边100上边200;
500x300-100-200同理。
Wm进行窗口通信。
TopLevel顶级窗口。
Pack、Place、Grid位置管理(都由组件继承)。
Frame 用来放其他组件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| Test2.py
============>>
#测试面向对象的写法
from tkinter import *
calss application(Frame):
#一个检点的GUI写法
def __init__(self, master=None
):
super().__init__(master) #不主动调用不行,super()代表父对象的定义而不是父类对象
self.master = master
self.pack()
self.creatWidget()
def creatWidget(self):
pass
root = Tk()
root.geometry("400x300+200+200")
app = Application(master =root
)# 告诉构造器的master
root.mainloop()
创建root【tk】---》app继承frame(不会自动调用构造器)【虚拟的,代表app对象】master=root---》app又定义一个master,等于调用的master---》对象frame和root绑定了。
def creatWidget(self):
# 创建组件
self.btn01 = Button(self)
self.btn01["text"] = "这是一个按钮"
# 或
self.btn01=Button(self,text="这是一个按钮")
#同理 构建一个退出按钮
self.btnQuit = Button(self, text="Quit", command=root.destroy)
self.btnQuit.pack() #将按钮封装到frame(root)
|
DAY1 THE END