121.4_python_tkinter初探GUI


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 组件

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 用于显示你应用程序的消息框。

几何布局管理器管理组件的大小和位置

1
button01.pack()

几何管理

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同理。

GUI编程整体描述

继承结构

Wm进行窗口通信。

TopLevel顶级窗口。

Pack、Place、Grid位置管理(都由组件继承)。