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 tk
window = 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 tk
root = 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 tk

class Calculator: def __init__(self, master):
self.master = master master.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 + 1 col = (i - 1) % 3if i == 0: row = 4 col = 1 btn = 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界面的程序,只需要通过组件调用即可,具体项目可以翻之前的文章记录有发过。

 

 

 

posted @ 2023-06-04 11:41  祺琪  阅读(1525)  评论(0)    收藏  举报