Python绘制GUI界面-Tkinter篇
在tkinter中,每个控件(widget)都是一个对象,可以使用类似于字典的方式来访问它们的属性和方法。例如,通过Label类可以创建一个标签控件对象,通过Button类可以创建一个按钮控件对象。
以下是tkinter中常见的控件:
-
Label:文本标签控件,用于显示文本或图像等信息。
-
Button:按钮控件,用于触发事件或执行命令。
-
Entry:文本输入框控件,用于接收用户输入的文本。
-
Text:文本框控件,用于显示和编辑多行文本。
-
Checkbutton:复选框控件,用于选择一项或多项。
-
Radiobutton:单选框控件,用于从多个选项中选择一项。
-
Listbox:列表框控件,用于显示选项列表或多选项列表。
-
Scrollbar:滚动条控件,用于控制可滚动区域的滚动位置。
-
Canvas:画布控件,用于绘制图形和图像等。
tkinter还提供了布局管理器(layout manager)来帮助组织和排列控件,例如pack、grid和place三种常用的布局管理器。
-
pack:按顺序将控件逐个添加到容器中,自动调整控件大小和位置。
-
grid:使用网格布局将控件放置在表格中,可以通过行列和跨度参数指定控件位置。
-
place:手动指定控件的位置和大小。
除此之外,tkinter还提供了许多其他的功能和方法,如对话框、菜单、画图等。同时它还可以与Python的其他库和框架进行集成,实现更加复杂和强大的GUI应用程序。
下面是使用Tkinter创建一个简单窗口的示例代码:
import tkinter as tkwindow = tk.Tk()window.title("My GUI")window.geometry("300x200")label = tk.Label(window, text="Hello World!")label.pack()window.mainloop()
在这个例子中,我们首先导入了tkinter模块,并将其重命名为tk。接着,通过Tk()函数创建了一个根窗口对象root,并设置了窗口标题为"My GUI",大小为300x200像素。然后,通过Label类创建了一个标签控件对象label,并将其文本设置为"Hello World!"。最后,通过pack()方法将label控件添加到root窗口中进行显示。mainloop()方法用于启动GUI应用程序的事件循环,即监听用户事件和响应用户操作,直到用户关闭窗口或退出程序为止。这样,整个程序就实现了一个简单的GUI界面,在窗口中显示了一个"Hello World!"的标签。
让我们再给这个Tkinter 程序加点新东西东西,它显示了一个窗口和一个按钮。当您单击按钮时,它会在控制台中打印一条消息。
import tkinter as tkroot = tk.Tk()root.geometry("200x100")def button_click():print("Hello, World!")button = tk.Button(root, text="Click me!", command=button_click)button.pack()root.mainloop()

在这个例子中,我们首先导入 tkinter 库并创建了一个名为 root 的窗口。窗口大小设置为 200x100 像素。接下来,我们定义了一个名为 button_click 的函数。该函数会在控制台输出“Hello, World!”。我们还定义了一个名为 button 的按钮,并将其放置在窗口上。按钮文本是 Click me!,并且当我们点击该按钮时,它会调用 button_click 函数。最后,我们使用 mainloop() 函数启动 tkinter 应用程序的事件循环,以便它可以接收用户输入并响应事件。
让我们来实现一个简单的交互计算器,完整的体验一下Tkinter的魅力吧。
import tkinter as tk# 定义计算函数def calculate():try:result = eval(entry.get())label.config(text="结果为:" + str(result))except:label.config(text="请输入正确的表达式!")# 创建窗口window = tk.Tk()window.geometry("200x100")window.title("简单计算器")# 创建标签和文本框label = tk.Label(window, text="请输入表达式:")label.pack()entry = tk.Entry(window)entry.pack()# 创建按钮并绑定计算函数button = tk.Button(window, text="计算", command=calculate)button.pack()# 运行窗口window.mainloop()
这段代码使用Python的图形用户界面(GUI)库tkinter创建了一个简单的计算器窗口。它包括一个标签、文本框和一个按钮。定义了 calculate() 函数,该函数使用 eval() 函数来计算文本框中输入的表达式,并在标签上显示结果。如果表达式不正确,则在标签上显示 "请输入正确的表达式!"。接下来,通过 tk.Tk() 创建了一个名为 "window" 的窗口对象,并设置其大小为 200x100 像素。然后,创建了一个标签并将其添加到窗口中,用于提示用户输入表达式。接着,创建了一个文本框和一个按钮,并绑定了计算函数到按钮的点击事件上。最后,通过调用 window.mainloop() 来启动事件循环,使得窗口能够响应用户交互操作,并保持打开状态,直到用户关闭窗口。
让我们再来加点难度,写一个更漂亮的计算器吧。
import tkinter as tkclass Calculator:def __init__(self, master):self.master = mastermaster.title("Calculator")# 显示器self.display = tk.Entry(master, width=20, font=("Arial", 16))self.display.grid(row=0, column=0, columnspan=4, padx=5, pady=5)# 数字键for i in range(10):row = (9 - i) // 3 + 1col = (i - 1) % 3if i == 0:row = 4col = 1btn = tk.Button(master, text=str(i), width=5, height=2, command=lambda x=i: self.add_digit(x))btn.grid(row=row, column=col, padx=5, pady=5)# 运算符键ops = ["+", "-", "*", "/", "C", "="]for i, op in enumerate(ops):btn = tk.Button(master, text=op, width=5, height=2, command=lambda x=op: self.calc(x))btn.grid(row=i + 1, column=3, padx=5, pady=5)# 清空键clear_btn = tk.Button(master, text="Clear", width=5, height=2, command=self.clear)clear_btn.grid(row=4, column=0, padx=5, pady=5)# 表达式self.expression = ""def add_digit(self, digit):self.expression += str(digit)self.display.insert(tk.END, str(digit))def calc(self, op):if op == "=":result = eval(self.expression)self.display.delete(0, tk.END)self.display.insert(tk.END, str(result))self.expression = str(result)elif op == "C":self.clear()else:self.expression += opself.display.insert(tk.END, op)def clear(self):self.expression = ""self.display.delete(0, tk.END)# 创建根窗口root = tk.Tk()# 创建计算器应用程序app = Calculator(root)# 进入主事件循环root.mainloop()
以下是主要的代码逻辑:
-
首先定义了一个 Calculator 类,它包含一个构造函数 init() 和三个方法 add_digit()、calc() 和 clear()。
-
在构造函数中,首先设置了主窗口的标题为 "Calculator"。然后创建了一个 Entry 控件作为显示器,并将其放置在第 0 行、第 0 列,跨越 4 列,设置了边距 padx 和 pady。
-
接着创建数字键和运算符键的按钮控件,使用了 for 循环和 lambda 函数,将按钮的文本和回调函数传入 Button 构造函数来创建按钮。
-
数字键的回调函数 add_digit() 会将被点击的数字添加到表达式 expression 中,并在显示器上显示。
-
运算符键的回调函数 calc() 判断被点击的按钮是哪个运算符或清空键,对应地更新表达式 expression 和显示器的内容,并在等号键被点击时进行计算。
-
清空键的回调函数 clear() 会清空表达式 expression 并清空显示器的内容。
-
最后创建了一个根窗口 root,使用 Calculator 类创建了一个计算器应用程序 app,并进入 Tkinter 的主事件循环以响应用户输入。
通过以上代码逻辑,实现了一个简单的计算器应用程序,支持加减乘除四则运算以及清空功能。
再来点有意思的?
通过Tkinter写视频下载器,翻译器,图片处理器等需要GUI界面的程序,只需要通过组件调用即可,具体项目可以翻之前的文章记录有发过。

浙公网安备 33010602011771号