Python中Tkinter 图形化界面设计(详细教程)

本文详细介绍了Python的tkinter模块,用于创建GUI应用程序。从基本的GUI理解开始,讲解了窗体控件布局,包括place()、pack()和grid()方法的使用。此外,还列举了常用控件及其属性,并探讨了事件响应、背景图片和摄像头操作。通过实例代码,读者可以深入理解tkinter的图形化设计过程。
部署运行你感兴趣的模型镜像

一、图形化界面设计的基本理解

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

  • 导入 tkinter 模块
  • 创建 GUI 根窗体
  • 添加人机交互控件并编写相应的函数。
  • 在主事件循环中等待用户触发事件响应。

二、 窗体控件布局

2.1 根窗体呈现示例

根窗体是图像化应用程序的根控制器,是tkinter的底层控件的实例。当导入tkinter模块后,调用 Tk()方法可初始化一个根窗体实例 root ,用 title() 方法可设置其标题文字,用geometry()方法可以设置窗体的大小(以像素为单位)。将其置于主循环中,除非用户关闭,否则程序始终处于运行状态。执行该程序,一个窗体就呈现出来了。在这个主循环的根窗体中,可持续呈现中的其他可视化控件实例,监测事件的发生并执行相应的处理程序。下面是根窗体呈现示例:

#coding=utf-8
import tkinter

Win = tkinter.Tk()
Win.title("点击按钮打印输入框的内容")
Win.geometry("400x400+20+20") # 这里的400x400是指窗口大小,+20+20是指窗口运行后距离屏幕左上角的位置
Win.mainloop()

在这里插入图片描述

2.2 tkinter 常用控件

2.2.1常用控件
控件名称作用
Button按钮单击触发事件
Canvas画布绘制图形或绘制特殊控件
Checkbutton复选框多项选择
Entry输入框接收单行文本输入
Frame框架用于控件分组
Label标签单行文本显示
Listbox列表框显示文本列表
Menu菜单创建菜单命令
Message消息多行文本标签,与Label用法类似
Radiobutton单选按钮从互斥的多个选项中做单项选择
Scale滑块默认垂直方向,鼠标拖动改变数值形成可视化交互
Scrollbar滑动条默认垂直方向,鼠标拖动改变数值,可与Text,Listbox,Canvas等控件配合移动可视化空间
Text文本框接收或输出多行文本
Toplevel新建窗体容器在顶层创建新窗体
2.2.2 控件的共同属性

在窗体上呈现的可视化控件,通常包括尺寸、颜色、字体、相对位置、浮雕样式、图标样式和悬停光标形状等共同属性。不同的控件由于形状和功能不同,又有其特征属性。在初始化根窗体和根窗体主循环之间,可实例化窗体控件,并设置其属性。父容器可为根窗体或其他容器控件实例。常见的控件共同属性如下表:

属性说明取值
anchor文本起始位置CENTER(默认),E,S,W,N,NE,SE,SW,NW
bg背景色
bd加粗(默认2像素)
bitmap黑白二值图标网上查找
cursor鼠标悬停光标网上查找
font字体
fg字体颜色
height高(文本控件的单位为行)
image显示图像
justify多行文本的对齐方式CENTER(默认),LEFT,RIGHT,TOP,BOTTOM
padx水平扩展像素
pady垂直扩展像素
relief3D浮雕样式FLAT,RAISED,SUNKEN,GROOVE,RIDGE
state控件实例状态是否可用NORMAL(默认),DISABLED
width宽(文本控件的单位为行)
#coding=utf-8
import tkinter
Win = tkinter.Tk()
Win.title("这是标题")
Win.geometry("400x400+200+200")
label = tkinter.Label(Win,text='这是文本标签',
        bg='#d3fbfb',
        fg='red',
        font=('宋体',32),
        width=20,
        height=2,
        relief="sunken")
label.pack()
Win.mainloop()

在这里插入图片描述
其中,标签实例label 在父容器Win中实例化,具有代码中所示的text(文本)、bg(背景色)、fg(前景色)、font(字体)、width(宽,默认以字符为单位)、height(高,默认以字符为单位)和 relief(浮雕样式)等一系列属性。
在实例化控件时,实例的属性可以“属性=属性值”的形式枚举列出,不区分先后次序。例如:“ text=‘这是文本标签’ ”显示标签的文本内容,“bg=’#d3fbfb’”设置背景色为十六进制数RGB色 #d3fbfb等等。属性值通常用文本形式表示。
当然如果这个控件实例只需要一次性呈现,也可以不必命名,直接实例化并布局呈现出来,例如:

tkinter.Label(Win,text='这是文本标签',bg='#d3fbfb',fg='red',font=('宋体',32),width=20,height=2,relief="sunken").pack()

属性 relief 为控件呈现出来的3D浮雕样式,有 FLAT(平的)、RAISED(凸起的)、SUNKEN(凹陷的)、GROOVE(沟槽状边缘)和 RIDGE(脊状边缘) 5种。
在这里插入图片描述

2.3 控件布局

2.3.1 place() 使用方法
  • place()方法:根据控件实例在父容器中的绝对或相对位置参数进行布局。其常用布局参数如下:
  1. x,y:控件实例在根窗体中水平和垂直方向上的其实位置(单位为像素)。注意,根窗体左上角为0,0,水平向右,垂直向下为正方向。
  2. relx,rely:控件实例在根窗体中水平和垂直方向上起始布局的相对位置。即相对于根窗体宽和高的比例位置,取值在0.0~1.0之间。
  3. height,width:控件实例本身的高度和宽度(单位为像素)。
  4. relheight,relwidth:控件实例相对于根窗体的高度和宽度比例,取值在0.0~1.0之间。

利用place()方法配合relx,rely和relheight,relwidth参数所得的到的界面可自适应根窗体尺寸的大小。place()方法与grid()方法可以混合使用。如下例子:利用place()方法排列消息(多行标签)。

#coding=utf-8
import tkinter
Win = tkinter.Tk()
Win.title("这是标题")
Win.geometry('400x400+200+200')

Str = '''我的水平起始位置相对窗体 0.2,垂直起始位置为绝对位置 80 像素,我的高度是窗体高度的0.4,宽度是200像素'''
Msg = tkinter.Message(Win,text = Str,relief = 'groove')
Msg.place(relx = 0.2,y = 80,relheight = 0.4,width = 200)
Win.mainloop()

在这里插入图片描述

2.3.2 pack() 使用方法
  • pack()方法:是一种简单的布局方法,如果不加-
    参数的默认方式,将按布局语句的先后,以最小占用空间的方式自上而下地排列控件实例,并且保持控件本身的最小尺寸。
  • 用pack() 方法不加参数排列标签。为看清楚各控件所占用的空间大小,文本用了不同长度的中英文,并设置relief="groove"的凹陷边缘属性。如下所示:
#coding=utf-8
import tkinter
Win = tkinter.Tk()
Win.title("这是标题")
Win.geometry("400x400+200+200")
LabelRed = tkinter.Label(Win,text="abcdefghijklmnopqrstuvwxyz",fg="Red",relief = "groove")
LabelRed.pack()
LabelGreen = tkinter.Label(Win,text="一二三四五六七八九十",fg="green",relief = "groove")
LabelGreen.pack()
LabelBlue = tkinter.Label(Win,text="1234567890",fg="blue",relief = "groove")
LabelBlue.pack()
Win.mainloop()

在这里插入图片描述

  • 使用pack()方法可设置 fill、side 等属性参数。其中,参数fill 可取值:fill=X,fill=Y或fill=BOTH,分别表示允许控件向水平方向、垂直方向或二维伸展填充未被占用控件。参数 side 可取值:side=TOP(默认),side=LEFT,side=RIGHT,side=BOTTOM,分别表示本控件实例的布局相对于下一个控件实例的方位。如下例子:
#coding=utf-8
import tkinter
Win = tkinter.Tk()
Win.title("这是标题")
Win.geometry("400x400+200+200")
LabelRed = tkinter.Label(Win,text="abcdefghijklmnopqrstuvwxyz",fg="Red",relief = "groove")
LabelRed.pack()
LabelGreen = tkinter.Label(Win,text="一二三四五六七八九十",fg="green",relief = "groove")
LabelGreen.pack(fill = "y",side = "right")
LabelBlue = tkinter.Label(Win,text="1234567890",fg="blue",relief = "groove")
LabelBlue.pack(fill = "x",side = "bottom")
LabelBlack = tkinter.Label(Win,text = "This is BlackLabel",fg = "black",relief = "groove")
LabelBlack.pack(fill = "both",side = "left")
Win.mainloop()

在这里插入图片描述

2.3.3 grid() 使用方法
  • grid()方法:是基于网格的布局。先虚拟一个二维表格,再在该表格中布局控件实例。由于在虚拟表格的单元中所布局的控件实例大小不一,单元格也没有固定或均一的大小,因此其仅用于布局的定位。pack()方法与grid()方法不能混合使用。
    grid()方法常用布局参数如下:
  1. column: 控件实例的起始列,最左边为第0列。
  2. columnspan: 控件实例所跨越的列数,默认为1列。
  3. ipadx,ipady: 控件实例所呈现区域内部的像素数,用来设置控件实例的大小。
  4. padx,pady: 控件实例所占据空间像素数,用来设置实例所在单元格的大小。
  5. row: 控件实例的起始行,最上面为第0行。
  6. rowspan: 控件实例的起始行数,默认为1行。

看下面的例子:用grid()方法排列标签,设想有一个3x4的表格,起始行、列序号均为0.将标签lbred 至于第2列第0行;将标签lbgreen置于第0列第1行;将标签lbblue置于第1列起跨2列第2行,占20像素宽。

#coding=utf-8
import tkinter
Win = tkinter.Tk()
Win.title("这是标题")
Win.geometry("400x400+200+200")
LabelRed = tkinter.Label(Win,text="Red",fg="Red",relief='groove')
LabelRed.grid(column=2,row=0)
LabelGreen = tkinter.Label(Win,text="绿色",fg="green",relief='groove')
LabelGreen.grid(column=0,row=1)
LabelBlue = tkinter.Label(Win,text="蓝",fg="blue",relief="groove")
LabelBlue.grid(column=1,columnspan=2,ipadx=20,row=2)
Win.mainloop()

在这里插入图片描述

三、tkinter常见控件的特征属性

第三部分内容,详见此帖
tkinter常见控件的特征属性

四、事件响应

五、背景图片

六、打开摄像头,显示

一.图形化界面设计的基本理解

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### 回答1: Python tkinter 是一个常用的 GUI (图形用户界面) 开发库,可以用于创建桌面应用程序。使用 tkinter 可以轻松地创建按钮、标签、文本框、滑块、菜单等界面组件,还可以设置这些组件的属性和事件处理函数,实现各种交互和动态效果。 在进行 tkinter 界面设计时,一般需要先创建一个主窗口,然后在该窗口中添加各种组件。可以使用 tkinter 中的 Frame 或者其他布局管理器来实现组件的布局和排列。同时,还需要处理各种事件响应,比如按钮点击、鼠标移动等等。 在 tkinter 界面设计中,还需要注意一些细节问题,比如组件的大小、颜色、字体、对齐方式等等,以及如何使用 tkinter 的各种功能来实现所需的界面效果。因此,在学习 tkinter 界面设计时,建议多多练习和实践,积累经验。 ### 回答2: Python是一种高级脚本语言,适合用于Web开发、数据分析、机器学习、网站爬虫等各种领域的应用。TkinterPython标准库之一,提供一套GUI(图形用户界面)编程接口,可以用于设计Python图形界面。本文主要讲解的是Python tkinter界面设计方面的知识。 一、Tkinter基本组件 1、Label(标签):用于显示文本和图像。 2、Button(按钮):用于执行特定的功能或事件。 3、Entry(输入框):用于接收用户输入的文本。 4、Text(文本框):用于显示大段文本内容。 5、Frame(框架):用于组织其他组件集合。 6、Canvas(画布):用于显示图形、绘制图形等。 7、Menu(菜单):用于显示一个下拉菜单。 8、Scrollbar(滚动条):用于提供对可滚动组件的操作。 二、Tkinter布局管理器 Tkinter提供了三种布局管理器:pack、grid和place。 1、pack布局:根据组件的大小自动排列组件。 2、grid布局:网格布局,类似于表格布局。 3、place布局:通过坐标定位组件的位置。 三、Tkinter的事件处理 事件主要包括鼠标点击、键盘输入、窗口关闭等,Tkinter提供了bind方法用于绑定和响应事件。 1、bind方法用法:widget.bind(event, handler) widget:指代要响应的组件。 event:指代事件类型,可以是鼠标单击、鼠标移动、键盘按键等。 handler:指代事件处理函数。 2、Tkinter常用事件类型 <Button-1>:鼠标左键单击事件 <Button-2>:鼠标中键单击事件 <Button-3>:鼠标右键单击事件 <ButtonRelease-1>:鼠标左键释放事件 <ButtonRelease-2>:鼠标中键释放事件 <ButtonRelease-3>:鼠标右键释放事件 <Key>:键盘输入事件 <FocusIn>:焦点进入事件 <FocusOut>:焦点离开事件 <Configure>:窗口大小改变事件 四、Python tkinter界面设计实例 下面是一个简单的Python tkinter界面设计的实例,一个简单的计算器程序,以下代码展示了如何将Tkinter组件排列在画布上,项目使用pack布局,并绑定事件处理程序: from tkinter import * class CalculatorGUI(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.pack(expand=YES, fill=BOTH) self.createWidgets() def createWidgets(self): self.display = Label(self, text="0") self.display.pack(side=TOP, expand=YES, fill=BOTH) self.buttons = Frame(self) self.buttons.pack(side=TOP, expand=YES, fill=BOTH) self.addButton("7") self.addButton("8") self.addButton("9") self.addButton("/") self.addButton("4") self.addButton("5") self.addButton("6") self.addButton("*") self.addButton("1") self.addButton("2") self.addButton("3") self.addButton("-") self.addButton("0") self.addButton(".") self.addButton("=") self.addButton("+") def addButton(self, text): button = Button(self.buttons, text=text) button.pack(side=LEFT, expand=YES, fill=BOTH) button.bind("<Button-1>", self.buttonClick) def buttonClick(self, event): button = event.widget text = button["text"] if text == "=": try: result = eval(self.display["text"]) self.display["text"] = str(result) except: self.display["text"] = "Error" elif text == "C": self.display["text"] = "0" else: if self.display["text"] == "0": self.display["text"] = text else: self.display["text"] += text app = CalculatorGUI() app.master.title("Calculator") app.mainloop() 五、总结 Python tkinter界面设计的基础知识包括Tkinter基本组件、布局管理器、事件处理等方面。通过Python tkinter界面设计实例可以初步了解Tkinter的应用。通过Tkinter可以快速打造Python图形化界面应用,提高程序的易用性。 ### 回答3: Python是一种有着广泛应用的编程语言,它的库非常丰富,可以帮助程序员们快速地完成各种任务。而TKinterPython中一款常用的GUI工具包,能够为用户提供创建各种窗口、按钮、标签、滑动条等常见UI组件的方法和函数,可以帮助程序员们快速地设计出美观的图形用户界面。 Tkinter提供的窗口以及其他控件中,可以传递事件,比如鼠标点击事件或键盘按键事件,以便程序响应。 除了基本控件,Tkinter还提供了许多其他的控件,如复选框、单选按钮、下拉列表等,以及用于创建菜单栏、对话框、消息框、分隔符等的控件。 为了使用Tkinter创建GUI,首先需要导入Tkinter模块。之后,可以使用Tk()函数创建一个主窗口,此时主窗口并没有任何内容,只是一个空白窗口。接着,可以使用各种控件创建UI界面,例如Button、Label、Text、Entry、Listbox、Canvas、Scrollbar等等。 例如,要创建一个简单的GUI应用程序以计算两个数的加法和,可以使用如下示例代码实现: ``` python from tkinter import * def calculate(): num1 = int(e1.get()) num2 = int(e2.get()) result = num1 + num2 label3.config(text="Result: "+str(result)) root = Tk() label1 = Label(root, text="Enter the first number:") label2 = Label(root, text="Enter the second number:") label3 = Label(root, text="Result: ") e1 = Entry(root) e2 = Entry(root) button = Button(root, text="Calculate", command=calculate) label1.pack() e1.pack() label2.pack() e2.pack() button.pack() label3.pack() root.mainloop() ``` 这个简单的应用程序创建了一个主窗口,包含两个标签、两个Text控件和一个Button控件。用户可以分别输入两个数,并单击Calculate按钮计算它们的总和。计算结果将在另一个标签中显示。 总之,Python Tkinter提供了丰富的控件和方法来创建用户界面,使得开发人员能够轻松地设计并使用各种GUI应用程序。同时,Tkinter也可以与其他Python库(例如numpy、pandas)集成,可以编程实现更加复杂的功能。因此,学会使用Python Tkinter是编写PythonGUI程序的重要组成部分。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西门一刀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值