Python图形界面设计(Tkinter库)

本文介绍了Python的Tkinter库,用于创建GUI应用程序。详细讨论了三种几何布局管理器pack、grid和place,以及各种组件如标签、按钮、文本框、列表框、单选按钮和复选框的使用。此外,还涵盖了字体设置、事件处理和菜单组件的创建。通过实例展示了Tkinter在实际应用中的功能和效果。
摘要由CSDN通过智能技术生成


  Tkinter 模块( Tk 接口)是 Python 的标准 Tk GUI 工具包的接口。Tkinter可以在大多数 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk 8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

创建 Windows 窗口

import tkinter                      # 导入 Tkinter 模块
win = tkinter.Tk()                  # 创建 Windows 窗口对象
win.title('我的第一个 GUI 程序')     # 设置窗口标题
win.geometry("800x600")             # 设置串口大小
#win.minsize(400, 600)      # (选用)
#win.maxsize(1440, 800)
win.mainloop()                      # 进入消息循环,也就是显示窗口

效果如下图
在这里插入图片描述
其中,

  • 设置窗口大小可使用geometry()方法,格式如下:
宽度x高度       (注:x是小写字母x,不是乘号)
  • 可以使用minsize()方法设置窗口的最小尺寸,使用maxsize()方法设置窗口的最大尺寸,方法如下:
窗口对象.minsize(最小宽度, 最大宽度)
窗口对象.maxsize(最小高度, 最大高度)

 

几何布局管理器

  Tkinter 几何布局管理器(Geometry Manager)用于组织和管理父组件(往往是窗口)中子组件的布局方式。Tkinter 提供了 3 种不同风格的几何布局管理类,即packgridplace

pack 几何布局管理器

  pack 几何布局管理器采用块的方式组织组件,pack 布局根据子组件创建生成的顺序将其放在快速生成的界面中。
  调用子组件的方法pack(),则该子组件在其父组件中采用 pack 布局:

pack(option=value, ...)

  pack()方法提供了如下表所示的若干参数选项。

选项 描述 取值范围
side 停靠在父组件的哪一边上 ‘top’(默认值)、‘bottom’、‘left’、‘right’
anchor 停靠位置,对应于东、南、西、北以及4个角 ‘n’、‘s’、‘e’、‘w’、‘nw’、‘sw’、‘se’、‘ne’、‘center’(默认值)
fill 填充空间 ‘x’、‘y’、‘both’、‘none’
expand 扩展空间 0或1
ipadx、ipady 组件内部在x/y方向上填充的空间大小 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点)
padx、pady 组件外部在x/y方向上填充的空间大小 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点)
pack 几何布局管理器的 GUI 程序如下所示:
import tkinter
root = tkinter.Tk()
root.geometry("400x300")
label = tkinter.Label(root, text='hello, python')
label.pack()        # 将Label组件添加到窗口中显示
button1 = tkinter.Button(root, text='BUTTON1')
                    # 创建文字是“BUTTON1”的Button组件
button1.pack(side=tkinter.LEFT)
                    # 将button1组件添加到窗口中显示,左停靠
button2 = tkinter.Button(root, text='BUTTON2')
                    # 创建文字是“BUTTON2”的Button组件
button2.pack(side=tkinter.RIGHT)
                    # 将button2组件添加到窗口中显示,右停靠
root.mainloop()

运行效果如下图所示。
在这里插入图片描述

grid 几何布局管理器

  grid 几何布局管理器采用表格结构组织组件。 子组件的位置由行/列确定的单元格决定,子组件可以跨越多行/列。在每一列中,列宽由这一列中最宽的单元格确定。grid 几何布局管理器适合表现表格形式的布局,可以实现复杂的界面,因而被广泛使用。
  调用子组件的grid()方法,则该子组件在其父组件中采用 grid 几何布局:

grid(option=value, ...)

  grid()方法提供了如下表所示的若干参数选项。

选项 描述 取值范围
sticky 组件津贴所在单元格的某一边角,对应于东、南、西、北以及4个角 ‘n’、‘s’、‘e’、‘w’、‘nw’、‘sw’、‘se’、‘ne’、‘center’(默认值)
row 单元格行号 整数
column 单元格列号 整数
rowspan 行跨度 整数
columnspan 列跨度 整数
ipadx、ipady 组件内部在x/y方向上填充的空间大小 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点)
padx、pady 组件外部在x/y方向上填充的空间大小 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点)
  grid 几何布局管理器有两个最为重要的参数,一个是 row,另一个是 column,用来指定将子组件放置到什么位置,如果不指定 row,会将子组件放置到第 1 个可用的行上,如果不指定 column,则使用第 0 列(首列)。   grid 几何布局管理器的 GUI 程序如下所示:
from tkinter import *
root = Tk()
# 200x200代表了初始化是主窗口的大小,280和280代表了
# 初始化时窗口所在的位置
root.geometry('200x200+280+280')
root.title('计算器示例')
# grid(网格)布局
L1 = Button(root, text='1', width=5, bg='yellow')
L2 = Button(root, text='2', width=5)
L3 = Button(root, text='3', width=5)
L4 = Button(root, text='4', width=5)
L5 = Button(root, text='5', width=5, bg='green')
L6 = Button(root, text='6', width=5)
L7 = Button(root, text='7', width=5)
L8 = Button(root, text='8', width=5)
L9 = Button(root, text='9', width=5, bg='yellow')
L0 = Button(root, text='0')
Lp = Button(root, text='.')
L1.grid(row=0, column=0)    # 按钮放置在0行0列
L2.grid(row=0, column=1)    # 按钮放置在0行1列
L3.grid(row=0, column=2)    # 按钮放置在0行2列
L4.grid(row=1, column=0)    # 按钮放置在1行0列
L5.grid(row=1, column=1)    # 按钮放置在1行1列
L6.grid(row=1, column=2)    # 按钮放置在1行2列
L7.grid(row=2, column=0)    # 按钮放置在2行0列
L8.grid(row=2, column=1)    # 按钮放置在2行1列
L9.grid(row=2, column=2)    # 按钮放置在2行2列
L0.grid(row=3, column=0, columnspan=2,
        sticky=E+W)    # 跨两行,左右贴紧
Lp.grid(row=3, column=2,
        sticky=E+W)    # 左右贴紧
root.mainloop()

运行效果如下图所示:
在这里插入图片描述

place 几何布局管理器

  place 几何布局管理器允许指定组件的大小和位置。place 几何布局管理器的优点是可以精确地控制组件的位置,不足之处是改变窗口大小时子组件不能随之灵活地改变大小。
  调用子组件的方法place(),则该子组件在其父组件中采用 place 布局:

place(option=value, ...)

  place()方法提供了如下表所示的若干参数选项,用户可以直接给参数选项赋值加以修改。

选项 描述 取值范围
x,y 将组件放到指定位置的绝对坐标 从0开始的整数
relx,rely 将组件放到指定位置的相对坐标 0~1.0
height,width 高度和宽度,单位为像素   
anchor 对齐方式,对应于东、南、西、北以及4个角 ‘n’、‘s’、‘e’、‘w’、‘nw’、‘sw’、‘se’、‘ne’、‘center’(默认值)

注意
Python 的坐标系是左上角为原点位置(0,0),向右是 x 坐标正方向,向下是 y 坐标正方向。

place 几何布局管理器的 GUI 示例程序如下所示:

from tkinter import *
root = Tk()
root.title("登录")
root['width'] = 200; root['height'] = 80
Label(root, text='用户名', width=6).place(x=1, y=1)
                            # 绝对坐标(1, 1)
Entry(root, width=20).place(x=45, y=1)
                            # 绝对坐标(45, 1)
Label(root, text='密码', width=6).place(x=1, y=20)
                            # 绝对坐标(1, 20)
Entry(root, width=20, show='*').place(x=45, y=20)
                            # 绝对坐标(45, 20)
Button(root, text='登录', width=8).place(x=40, y=40)
                            # 绝对坐标(40, 40)
Button(root, text='取消', width=8).place(x=110, y=40)
                            # 绝对坐标(110, 40)
root.mainloop()

运行效果如下图所示:
在这里插入图片描述


 

Tkinter 组件

  Tkinter 提供了很多组件,例如按钮、标签和文本框等,在一个 GUI 应用程序中使用,这些组件通常被称为控件或者部件。Tkinter 组件如下表所示:

控件 描述
Button 按钮控件,在程序中显示按钮
Canvas 画布控件,显示图形元素,例如线条或文本
Checkbutton 多选框控件,用于在程序中提供多项选择框
Entry 输入控件,用于显示简单的文本内容
Frame 框架控件,在屏幕上显示一个矩形区域,多用来作为容器
Label 标签控件,可以显示文本和位图
Listbox 列表框控件,用来显示一个字符串列表给用户
Menubutton 菜单按钮控件,用于显示菜单项
Menu 菜单控件,显示菜单栏、下拉菜单和弹出菜单
Message 消息控件,用来显示多行文本,与Label比较类似
Radiobutton 单选按钮控件,显示一个单选的按钮状态
Scale 范围控件,显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,在内容超过可视化区域时使用,例如列表框
Text 文本控件,用于显示多行文本
Toplevel 容器控件,用来提供一个单独的对话框,和Frame比较类似
Spinbox 输入控件,与Entry类似,但是可以指定输入范围值
PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件
LabelFrame LabelFrame是一个简单的容器控件,常用语复杂的窗口布局
tkMessageBox 用于显示应用程序的消息框
通过组件类的构造函数可以创建其对象实例。例如:
from tkinter import *
root = Tk()
button1 = Button(root, text="确定")

组件的标准属性也就是所有组件(控件)的共同属性,例如大小、字体和颜色等。Tkinter 组件常用的标准属性如下表所示。

属性 描述
dimension 控件大小
color 颜色
font 控件字体
anchor 锚点(内容停靠位置),对应于东、南、西、北以及4个角
relief 控件样式
bitmap 位图,内置位图包括error、gray75、gray50、gray25
  • 46
    点赞
  • 367
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值