python GUI编程之Tkinter详解合集

python GUI编程之Tkinter详解合集

python GUI编程之Tkinter详细讲解一

文章目录 :

  • 1. GUI编程概述
    • 1.1 GUI含义及Tkinter介绍
    • 1.2 常见的GUI库
    • 1.3 tkinter GUI开发核心步骤
  • 2 thinker 整体描述
    • 2.1 类继承关系图
    • 2.2 相关类的简单解释
    • 2.3 标准的GUI程序类的写法模板
  • 3 主窗口和布局管理器
    • 3.1 主窗口大小位置方法
    • 3.2 布局管理器

1. GUI编程概述

1.1 GUI含义及Tkinter介绍

  • GUI:Graphic User Interface,图形用户界面编程,即通过鼠标对菜单、按钮等图形化元素触发指令,并从标签对话框等图型化显示容器中获取人机对话信息。
  • tkinter 模块 :Python自带了 tkinter 模块,实质上是一种流行的面向对象的GUI工具包 TK 的 Python 编程接口,提供了快速便利地创建GUI应用程序的方法。

1.2 常见的GUI库

  • 常见的GUI库
    • tkinter : 基础,小型程序编写
    • wxPython : 大型应用程序开发
    • PyQT : 开源库,大型应用程序开发

1.3 tkinter GUI开发核心步骤

  • 图像化编程的基本步骤通常包括: (1) 导入 tkinter 模块 (2) 创建根窗口,并添加各种可视化组件 (3) 对组件进行几何布局,管理组件的大小和位置 (4) 编写相应的函数并和对应的组件进行绑定 (5) 在主事件循环中等待用户触发事件响应

2 thinker 整体描述

2.1 类继承关系图

继承关系

2.2 相关类的简单解释

名称

简介

Misc,Wm

组件根父类

所有组件根父类,提供窗口管理器通信功能函数

TK

主窗口

编辑主窗口

Pack,Place,Grid

布局管理器

管理组件大小,位置

BaseWidget,Widget

所有组件父类

所有组件父类

Toplevel

顶层

容器类,可用于为其他组件提供单独的容器;Toplevel 有点类似于窗口

Button

按钮

代表按钮组件

Canvas

画布

提供绘图功能,包括直线、矩形、椭圆、多边形、位图等

Checkbutton

复选框

可供用户勾选的复选框

Entry

单行输入框

用户可输入内容

Frame

容器

用于装载其它GUI 组件

Label

标签

用于显示不可编辑的文本或图标

LabelFrame

容器

也是容器组件,类似于Frame,但它支持添加标题

Listbox

列表框

列出多个选项,供用户选择

Menu

菜单

菜单组件

Menubutton

菜单按钮

用来包含菜单的按钮(包括下拉式、层叠式等)

OptionMenu

菜单按钮

Menubutton 的子类,也代表菜单按钮,可通过按钮打开一个菜单

Message

消息框

类似于标签,但可以显示多行文本;后来当Label 也能显示多行文本之后,该组件基本处于废弃状态

PanedWindow

分区窗口

该容器会被划分成多个区域,每添加一个组件占一个区域,用户可通过拖动分隔线来改变各区域的大小

Radiobutton

单选钮

可供用户点边的单选钮

Scale

滑动条

拖动滑块可设定起始值和结束值,可显示当前位置的精确值

Spinbox

微调选择器

用户可通过该组件的向上、向下箭头选择不同的值

Scrollbar

滚动条

用于为组件(文本域、画布、列表框、文本框)提供滚动功能

Text

多行文本框

显示多行文本

2.3 标准的GUI程序类的写法模板

from tkinter import *
from tkinter import messagebox
 
class Application(Frame):
    """
    一个经典的GUI程序的类的写法
    """
    def __init__(self, master = None):
        super().__init__(master)   # 父类继承的定义
        self.master = master
        self.pack()
        self.createWidget()
 
    def createWidget(self):
        """
        创建组件
        """
        self.btn01 = Button(self)  # 创建按钮
        self.btn01["text"] = "点击按钮" 
        self.btn01.pack()
        self.btn01["command"] = self.event # 事件绑定
 
        self.btnQuit = Button(self, text="退出", command = root.destroy) # 创建一个退出按钮
        self.btnQuit.pack()
 
    def event(self):
        messagebox.showinfo("event","这是一个消息弹出界面")
 
if __name__ == '__main__':
    root = Tk()
    root.geometry("400x100+200+300")
    root.title("一个经典的GUI程序类的测试")
    app = Application(master=root)
    root.mainloop()

3 主窗口和布局管理器

3.1 主窗口大小位置方法

方法名

说明

使用方法

参数说明

geometry

设置大小及位置

tk.geometry("WxH±X±Y")

W:宽度
H:高度
±X : 屏幕左(+)右(-)距离
±Y: 屏幕上(+)下(-)距离

title

主窗口名字

root.title("QWQ的工具箱")

主窗口显示:QWQ的工具箱

  • 示例代码
from tkinter import *  # 导入tkinter模块
root = Tk()  # 创建主窗口对象
root.title("QWQ的工具箱") # 设计主窗口名字
root.geometry("500x300+100+100") # 主窗口尺寸,WxH±X±Z
root.mainloop() # 调用组件的mainloop方法,进入事件循环
  • 显示示意图

3.2 布局管理器

  • 组件的布局通常有pack()grid() 和 place() 三种方法

3.2.1 pack()

  • pack()方法:一种简单的布局方法,如果不加参数的默认方式,将按布局语句的先后,以最小占用空间的方式自上而下地排列控件实例,并且保持控件本身的最小尺寸。
  • 使用方法: 组件对象.pack(fill= "X",side = "LEFT" )
  • pack()方法的所有属性参数(fill 和side最常用):

名称

描述

取值范围

expand

当值为“yes”时,side 选项无效。组件显示在父配件中心位置;若fill 选项为”both”,则填充父组件的剩余空间

“yes”:自然数,”no”:0,默认值”no”或0

fill

填充x(y)方向上的空间,当属性side=”top”或”bottom”时,填充x 方向;当属性side=”left”或”right”时,填充”y”方向;当expand 选项为”yes”时,填充父组件的剩余空间

“x”, “y”, “both”,“none”(默认值为none)

ipadx,ipady

设置子组件之间的间隔,x 方向或者y 方向,默认单位为像素

非负浮点数,默认0.0

padx,pady

与之并列的组件之间的间隔,x 方向或者y 方向,默认单位是像素

非负浮点数,默认0.0

side

定义停靠在父组件的哪一边上

“ top ” , “ bottom ” ,“left”, “right”(默认为”top”)

before

将本组件于所选组建对象之前pack,类似于先创建本组件再创建选定组件

已经pack 后的组件对象

after

将本组件于所选组建对象之后pack,类似于先创建选定组件再本组件

已经pack 后的组件对象

in_

将本组件作为所选组建对象的子组件,类似于指定本组件的master 为选定组件

已经pack 后的组件对象

anchor

对齐方式,左对齐”w”,右对齐”e”,顶对齐”n”,底对齐”s”

“n”, “s”, “w”, “e”,“nw”, “sw”, “se”,“ne”, “center”(默认)

from tkinter import  *
root = Tk()
lbred = Label(root,text="Red",fg="Red",relief=GROOVE)
lbred.pack() 
lbgreen = Label(root,text="绿色",fg="green",relief=GROOVE)
lbgreen.pack(side = RIGHT) 
lbblue = Label(root,text="",fg="blue",relief=GROOVE)
lbblue.pack(fill = X)
root.mainloop()

3.2.1 grid()

  • grid()方法:基于网格的布局,先虚拟一个二维表格,再在表格中布局控件实例。由于在虚拟表格的单元中所布局的控件实例大小不一,单元格也没有固定或均一的大小,因此其仅用于布局的定位
  • pack()方法与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”(默认)

  • 利用grid 布局 - 实现计算器软件界面代码示例:
from tkinter import *  
root = Tk() 
root.title("GUI 计算器") 
root.geometry("500x500+100+100") 
btnText = ( ("MC","M+","M-","MR"),
            ("C","±","/"," "),
            (7,8,9,"-"),
            (4,5,6,"+"),
            (1,2,3,"="),
            (0,"."))
Entry(root, width=50).grid(row=0, column=0, columnspan=4, pady=10)  # 布局上方显示窗口
for rindex, r in enumerate(btnText):   # 布局按钮输入窗口
    for cindex, c in enumerate(r):
        if c == "=":
            but = Button(root, text=c, height=3, width=10)
            but.grid(row=rindex+1, column=cindex, rowspan=2, sticky
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒风5212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值