python人机交互界面设计_Python-Tkinter图形化界面设计(详细教程 )

本文详细介绍了Python的Tkinter模块,用于创建GUI应用程序。内容包括图形化界面的基础理解、窗体控件布局、常用控件如标签、消息、输入框、文本框、按钮的特性和用法,以及如何处理事件响应。此外,文章还涵盖了菜单、子窗体、模式对话框的使用,提供多个实例代码,便于读者学习和开发。
摘要由CSDN通过智能技术生成

声明:本篇文章为转载自https://www.jianshu.com/p/91844c5bca78,在原作者的基础上添加目录导航,旨在帮助大家以更高效率进行学习和开发。

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

本文目录

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

当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI),即通过鼠标对菜单、按钮等图形化元素触发指令,并从标签、对话框等图型化显示容器中获取人机对话信息。

Python自带了tkinter 模块,实质上是一种流行的面向对象的GUI工具包 TK 的Python编程接口,提供了快速便利地创建GUI应用程序的方法。其图像化编程的基本步骤通常包括:

○ 导入 tkinter 模块

○ 创建 GUI 根窗体

○ 添加人机交互控件并编写相应的函数。

○ 在主事件循环中等待用户触发事件响应。

二.窗体控件布局

2.1. 数据集导入

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

from tkinter import *

root= Tk()

root.title('我的第一个Python窗体')

root.geometry('240x240') # 这里的乘号不是 * ,而是小写英文字母 x

root.mainloop()

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

2.2. tkinter 常用控件

常用控件:常用的10 多种,如下:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

2.2.1 控件的共同属性

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

标签及常见属性示例:

from tkinter import *

root = Tk()

lb = Label(root,text='我是第一个标签',\

bg='#d3fbfb',\

fg='red',\

font=('华文新魏',32),\

width=20,\

height=2,\

relief=SUNKEN)

lb.pack()

root.mainloop()

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

其中,标签实例lb 在父容器root中实例化,具有代码中所示的text(文本)、bg(背景色)、fg(前景色)、font(字体)、width(宽,默认以字符为单位)、height(高,默认以字符为单位)和 relief(浮雕样式)等一系列属性。

在实例化控件时,实例的属性可以“属性=属性值”的形式枚举列出,不区分先后次序。例如:“ text=‘我是第一个标签’ ”显示标签的文本内容,“bg=’#d3fbfb’”设置背景色为十六进制数RGB色 #d3fbfb等等。属性值通常用文本形式表示。

当然如果这个控件实例只需要一次性呈现,也可以不必命名,直接实例化并布局呈现出来,例如:

Label(root,text='我是第一个标签',font='华文新魏').pack()

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

2019050322292620.

2.3 控件布局

控件的布局通常有pack()、grid() 和 place() 三种方法。

2.3.1 place()方法

根据控件实例在父容器中的绝对或相对位置参数进行布局。其常用布局参数如下:

x,y:控件实例在根窗体中水平和垂直方向上的其实位置(单位为像素)。注意,根窗体左上角为0,0,水平向右,垂直向下为正方向。

relx,rely:控件实例在根窗体中水平和垂直方向上起始布局的相对位置。即相对于根窗体宽和高的比例位置,取值在0.0~1.0之间。

height,width:控件实例本身的高度和宽度(单位为像素)。

relheight,relwidth:控件实例相对于根窗体的高度和宽度比例,取值在0.0~1.0之间。

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

from tkinter import *

root = Tk()

root.geometry('320x240')

msg1 = Message(root,text='''我的水平起始位置相对窗体 0.2,垂直起始位置为绝对位置 80 像素,我的高度是窗体高度的0.4,宽度是200像素''',relief=GROOVE)

msg1.place(relx=0.2,y=80,relheight=0.4,width=200)

root.mainloop()

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

3.1、文本输入和输出相关控件

文本的输入与输出控件通常包括:标签(Label)、消息(Message)、输入框(Entry)、文本框(Text)。他们除了前述共同属性外,都具有一些特征属性和功能。

○ 3.1.1 标签(Label)和 消息(Message)

除了单行与多行的不同外,属性和用法基本一致,用于呈现文本信息。值得注意的是:属性text通常用于实例在第一次呈现时的固定文本,而如果需要在程序执行后发生变化,则可以使用下列方法之一实现:1、用控件实例的configure()方法来改变属性text的值,可使显示的文本发生变化;2、先定义一个tkinter的内部类型变量var=StringVar() 的值也可以使显示文本发生变化。

看下面的一个例子:制作一个电子时钟,用root的after()方法每隔1秒time模块以获取系统当前时间,并在标签中显示出来。

方法一:利用configure()方法或config()来实现文本变化。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

import tkinter

import time

def gettime():

timestr = time.strftime("%H:%M:%S") # 获取当前的时间并转化为字符串

lb.configure(text=timestr) # 重新设置标签文本

root.after(1000,gettime) # 每隔1s调用函数 gettime 自身获取时间

root = tkinter.Tk()

root.title('时钟')

lb = tkinter.Label(root,text='',fg='blue',font=("黑体",80))

lb.pack()

gettime()

root.mainloop()

方法二:利用textvariable变量属性来实现文本变化

import tkinter

import time

def gettime():

var.set(time.strftime("%H:%M:%S")) # 获取当前时间

root.after(1000,gettime) # 每隔1s调用函数 gettime 自身获取时间

root = tkinter.Tk()

root.title('时钟')

var=tkinter.StringVar()

lb = tkinter.Label(root,textvariable=var,fg='blue',font=("黑体",80))

lb.pack()

gettime()

root.mainloop()

○ 3.1.2 文本框(Text)

文本框的常用方法如下:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JOR191emlf,size_16,color_FFFFFF,t_70

上表位置的取值可为整数,浮点数或

  • 11
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A:以下是一个使用tkinter设计的简单计算器界面的案例: ``` import tkinter as tk class Calculator: def __init__(self, master): self.master = master master.title("Calculator") self.create_display() self.create_buttons() def create_display(self): self.display = tk.Entry(self.master, width=30, borderwidth=5, justify="right") self.display.grid(column=0, row=0, columnspan=4, padx=10, pady=10) def create_button(self, num): button = tk.Button(self.master, text=num, padx=20, pady=10, command=lambda: self.button_click(num)) return button def create_buttons(self): self.button_1 = self.create_button("1") self.button_2 = self.create_button("2") self.button_3 = self.create_button("3") self.button_4 = self.create_button("4") self.button_5 = self.create_button("5") self.button_6 = self.create_button("6") self.button_7 = self.create_button("7") self.button_8 = self.create_button("8") self.button_9 = self.create_button("9") self.button_0 = self.create_button("0") self.button_dot = self.create_button(".") self.button_add = self.create_button("+") self.button_subtract = self.create_button("-") self.button_multiply = self.create_button("x") self.button_divide = self.create_button("/") self.button_equal = self.create_button("=") self.button_clear = self.create_button("C") self.button_1.grid(row=1, column=0) self.button_2.grid(row=1, column=1) self.button_3.grid(row=1, column=2) self.button_4.grid(row=2, column=0) self.button_5.grid(row=2, column=1) self.button_6.grid(row=2, column=2) self.button_7.grid(row=3, column=0) self.button_8.grid(row=3, column=1) self.button_9.grid(row=3, column=2) self.button_0.grid(row=4, column=1) self.button_dot.grid(row=4, column=0) self.button_add.grid(row=1, column=3) self.button_subtract.grid(row=2, column=3) self.button_multiply.grid(row=3, column=3) self.button_divide.grid(row=4, column=3) self.button_equal.grid(row=4, column=2) self.button_clear.grid(row=5, column=1) def button_click(self, num): current = self.display.get() self.display.delete(0, tk.END) if num == ".": if "." in current: return else: self.display.insert(0, current + num) elif num == "C": self.display.delete(0, tk.END) elif num == "=": try: result = eval(current) self.display.insert(0, result) except ZeroDivisionError: self.display.insert(0, "Error") except: self.display.insert(0, "Invalid Input") else: self.display.insert(0, current + num) root = tk.Tk() my_calculator = Calculator(root) root.mainloop() ``` 该计算器界面包含数字、小数点、加号、减号、乘号、除号、等号、清除键,可以进行四则运算并显示结果。使用grid布局管理界面元素。界面响应使用lambda表达式绑定到相应的方法上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值