在本教程中,我们将使用Tkinter建立一个简单的GUI应用程序,从用户那里获取信息,然后将数据输出到Python控制台。这是一种表单应用,类似于你在网站上建立一个Html表单来收集信息的方式。然而,这个版本严格来说是使用Tkinter和Python构建的一个图形用户界面。这将我们一直在学习的一些概念联系在一起,如Tkinter部件、标签、按钮和事件处理。让我们看一下代码。
Python源代码
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
class Feedback:
def __init__(self, mainframe):
mainframe.title('Add Your Comment')
mainframe.resizable(False, False)
mainframe.configure(background='#f7f7f7')
self.style = ttk.Style()
self.style.configure('TFrame', background='#f7f7f7')
self.style.configure('TButton', background='#e1d8b9')
self.style.configure('TLabel', background='#f7f7f7', font=('Arial', 12))
self.style.configure('Header.TLabel', font=('Arial', 18, 'bold'))
self.header_frame = ttk.Frame(mainframe)
self.header_frame.pack()
self.logo = PhotoImage(file='python_logo.gif')
ttk.Label(self.header_frame, image=self.logo).grid(row=0, column=0, rowspan=2)
ttk.Label(self.header_frame, text='Comment App', style='Header.TLabel').grid(row=0, column=1)
ttk.Label(self.header_frame, wraplength=300,
text=(
'Add your name, email, and comment, then click submit to add your comment. Click clear if you make a mistake.')).grid(
row=1, column=1)
self.content_in_frame = ttk.Frame(mainframe)
self.content_in_frame.pack()
ttk.Label(self.content_in_frame, text='Name:').grid(row=0, column=0, padx=5, sticky='sw')
ttk.Label(self.content_in_frame, text='Email:').grid(row=0, column=1, padx=5, sticky='sw')
ttk.Label(self.content_in_frame, text='Comments:').grid(row=2, column=0, padx=5, sticky='sw')
self.comment_name = ttk.Entry(self.content_in_frame, width=24, font=('Arial', 10))
self.comment_email = ttk.Entry(self.content_in_frame, width=24, font=('Arial', 10))
self.comments = Text(self.content_in_frame, width=50, height=10, font=('Arial', 10))
self.comment_name.grid(row=1, column=0, padx=5)
self.comment_email.grid(row=1, column=1, padx=5)
self.comments.grid(row=3, column=0, columnspan=2, padx=5)
ttk.Button(self.content_in_frame, text='Submit',
command=self.submit).grid(row=4, column=0, padx=5, pady=5, sticky='e')
ttk.Button(self.content_in_frame, text='Clear',
command=self.clear).grid(row=4, column=1, padx=5, pady=5, sticky='w')
def submit(self):
print(f'Name: {self.comment_name.get()}')
print(f'Email: {self.comment_email.get()}')
print(f'Comments: {self.comments.get(1.0, "end")}')
self.clear()
messagebox.showinfo(title='Comment info', message='Thanks for your comment!')
def clear(self):
self.comment_name.delete(0, 'end')
self.comment_email.delete(0, 'end')
self.comments.delete(1.0, 'end')
def main():
root = Tk()
root.geometry('500x400')
feedback = Feedback(root)
root.mainloop()
if __name__ == '__main__': main()

一旦你提交了评论,你就会得到一个漂亮的提示,评论信息会输出到控制台。

现在我们在这里看到控制台中的输出。
Name: Tim
Email: Tim@apple.com
Comments: This is a cool comment application!
它是如何工作的
该应用程序利用以下概念来完成其工作。
Python ttk
以Tk为主题的部件,提供跨平台的外观和感觉。
tkinter messagebox
tkinter.messagebox模块提供了一个模板基类和常用配置的方便方法。消息框是模态的,并将根据用户的选择返回一个子集(True, False, OK, None, Yes, No)。
Python类
关于类和类型的说明:
在Python中每个变量总是有一个类型。如果不给它分配一个类型,就不能创建一个变量。有趣的是,在Python中,我们不必事先声明类型,就像你在C语言中需要做的那样。Python足够聪明,可以推断出类型。使用Python,程序员可以使用class关键字而不是def关键字来创建自己的类。为了把类分配给一个变量,我们首先要创建一个我们的类的实例。我们创建实例并把这个实例分配给我们的变量。
class MyClass(object):
print('Hello from MyClass')
classInstance = MyClass()
现在,变量classInstance的类型是MyClass。
命名为__init__
_init__是一个特殊的Python方法,每次从一个类中实例化出一个新的对象时都会调用这个方法。__init__的主要目的是为新对象设置实例成员的初始值。我们的注释应用程序的大部分繁重工作都是在实例化过程中完成的。
ttk.Style()
样式类是用来操作样式数据库的,我们利用它来获得所示的外观和感觉。
style.configure()
一旦一个Style对象被创建,你可以使用.configure()方法来应用颜色、背景等。
ttk.Frame()
这个类是一个简单的容器小部件,用来在应用程序中创建容器。
.pack()
打包方法是我们如何将部件附加到应用程序中的方法。它可以调整框架的大小,使它的所有内容都在它们喜欢的尺寸上。
PhotoImage()
PhotoImage类用于在标签、按钮、画布和文本部件中显示图像。
.Label()
标签是一个Tkinter Widget类,用来显示文本或图像。它是一个用户只是查看但不与之互动的小部件。
.grid()
grid() 几何管理器组织了父部件中的部件。主部件被分割成行和列,网格的每一部分都可以容纳一个部件。你可以使用 column, columnspan, ipadx, ipady, padx, pady, row, rowspan 和 sticky 的属性来放置。
.Entry()
为了接受来自用户的单行文本字符串,你可以使用Entry widget。
.Text()
文本小部件允许你显示可以编辑的多行文本
.Button()
在这个应用程序中,Button类被用于提交和清除功能。
命令回调
为了让用户点击按钮时有事情发生,你必须指定一个回调函数。
F 字符串
Python 中的 F 字符串是一个很好的新特性,它允许程序员放弃更粗略的 format() 方法。
messagebox.showinfo
我们使用 messagebox.showinfo() 方法来向用户显示一些文本。
Tk()
这是用Tkinter启动GUI的主要结构。
.geometry()
你可以使用这个方法来更精确地控制小部件的布局。