Python Tkinter 项目 [分步说明]

已发表: 2020-09-14

在 Python 中学习 GUI 可能非常具有挑战性。 不用担心,因为我们有您的支持! 在本文中,我们分享了一个 Tkinter 教程,以便您可以高效地处理 Python GUI 项目。 完成本教程后,您将熟悉用于创建 Python Tkinter 项目的构建块。 如果您想获得更多关于 python 的专业知识,请查看我们的数据科学课程。

我们还分享了每一步的代码。 但是,我们建议您仅在了解其工作原理后才复制和粘贴它。 否则,它没有多大用处。

目录

什么是 Tkinter?

Tkinter 是 Python 使用 Tk GUI 工具包的一个包。 您可以使用 Tkinter 通过 Python 创建 GUI 程序。 虽然 Tkinter 能够生成许多程序,但您可能需要使用模块进行高级实现。 在从事 Python Tkinter 项目之前,您应该熟悉 Tkinter 的基础知识:

Tkinter 中的 Hello World 程序

这是 Tkinter 中的 hello world 程序的示例:

将 tkinter 导入为 tk

类应用程序(tk.Frame):

def __init__(self, master=None):

超级().__init__(主)

self.master = 主人

自我包装()

self.create_widgets()

def create_widgets(self):

self.hi_there = tk.Button(self)

self.hi_there[“text”] = “Hello World\n(点击我)”

self.hi_there[“command”] = self.say_hi

self.hi_there.pack(side=”top”)

self.quit = tk.Button(self, text=”QUIT”, fg=”red”,

命令=self.master.destroy)

self.quit.pack(side=”bottom”)

def say_hi(self):

print(“大家好!”)

根 = tk.Tk()

应用程序=应用程序(主=根)

app.mainloop()

Tkinter 中的几何管理器

在处理 Python Tkinter 项目时您应该了解的另一个主要概念是几何管理器。 如果不使用几何管理器,您的小部件将不会出现在屏幕上。 主要有三种方法可以添加几何管理器:

网格

它向父级添加了一个网格,并允许它相应地显示小部件。 网格具有用于测量其小部件的长度和高度的行和列。

此方法告诉小部件将自己打包在父级中。 它仅将小部件添加到父小部件的子小部件列表中。 简单来说,它会先将它们添加到块中,然后再将它们放置在父窗口小部件中。

地方

此方法根据父小部件将小部件放置在特定位置。

在下面的教程中,我们使用包管理器来处理小部件的位置。 这就是为什么最好熟悉这些概念。 这将帮助您更好地了解我们项目的工作。

结帐: 42个令人兴奋的Python项目想法和初学者主题

在 Python 中构建 GUI(Tkinter 教程)

步骤#1:导入模块

要开始处理应用程序,我们首先必须导入必要的模块。 您可以通过在命名空间中导入模块来做到这一点。 它将允许您按名称使用常量和类,而不是限定它们。 这意味着您可以通过使用其名称来使用“标签”,而不是将其限定为“TkinterLabel”。 这将使事情变得相对容易,并且您可以节省大量时间,因为每个班级和常数的排位赛可能非常麻烦。 使用以下代码导入模块:

>>> 从 Tkinter 导入 *

如果 Python 没有链接到您系统中的 Tk(或 Tcl),或者您的系统中没有安装 Tk(或 Tcl),您将在本节中看到一条错误消息。 要解决此问题,您需要系统管理员才能访问。 确保通过执行相同的操作来解决此问题。

另一方面,如果您在这些部分中没有看到任何错误消息,则可以继续下一步以创建一个窗口:

>>> 赢 = Tk()

我们已经为我们的窗口分配了变量“win”。 执行上述代码后,您会在屏幕上看到一个小窗口。 它的标题栏应该显示写有“tk”。

这意味着您已成功完成此步骤,现在可以开始在 Python 中构建 GUI。

步骤#2:添加按钮

现在我们已经运行了 Tkinter,我们可以向我们的程序添加按钮。 按钮是任何 GUI 程序中最简单的部分,因此我们将从它们开始:

>>> b1 = Button(win, text=”One”)

>>> b2 = Button(win, text=”Two”)

我们在上一节中创建的窗口是我们现在制作的按钮的父窗口。 随着您将从事更多 Python Tkinter 项目,您会发现框架也可以充当其他类的父级。 现在,当你实现这段代码时,你会注意到一个奇怪的现象——按钮没有出现在窗口中!

那是因为我们需要在我们的程序中添加一个网格和一个包。 它们被称为几何管理器,我们在本文前面已经讨论过它们。 我们将在下一部分添加包管理器:

步骤#3:实现包管理器

我们将使用 pack 方法将按钮添加到父窗口小部件。 使用包管理器,您可以告诉您希望将子小部件打包到父小部件的哪一侧。 您可以使用 TOP、RIGHT、BOTTOM、LEFT 作为您的功能。 如果您不指定边,程序默认选择 TOP。 让我们首先添加包管理器:

>>> b1.pack()

>>> b2.pack()

当您添加第一个按钮(代码的第一行)时,您会注意到您的窗口缩小到按钮的大小。 同样,当您添加第二个按钮(代码的第二行)时,窗口会根据该按钮的大小展开。 窗口已将按钮按垂直顺序放置,因为我们没有指定它们应该放在哪一侧。 让我们使用下面的代码将它们打包在左侧:

>>> b2.pack(边=左)

>>> b1.pack(边=左)

请注意,当我们必须将小部件仅按这两种顺序(水平和垂直)放置时,我们主要使用包管理器。 对于其他类型的小部件放置,我们使用 grid 方法或 place 方法。 您可以使用“padx”或“pady”功能在按钮和窗口之间添加一些空间。 'padx' 函数向小部件的 X 轴(左和右)添加填充,'pady' 函数向设备的 Y 轴(顶部和底部)添加填充。

>>> b1.pack(边=左,padx=10)

>>> b2.pack(边=左,padx=10)

我们建议尝试使用小部件的填充。 它将帮助您了解可以修改小部件位置的不同方式。 填充是一个具有挑战性的概念,因此最好在进入下一部分之前尝试一下。

步骤#4:网格管理器

Tkinter 中另一个流行的几何管理器是网格管理器。 正如我们在文章前面所讨论的,网格管理器允许您将父级划分为行和列。 您可以将子小部件放置在父网格的单元格中。 您可以根据需要修改每列和每行的宽度和长度。 并非每一列都必须具有相同的宽度。 同样,每一行不需要具有相同的高度。 因此,网格管理器在编辑小部件的外观和位置方面为您提供了更多的创意自由。

我们将使用之前创建的相同按钮创建一个新窗口,以测试网格管理器。 但是,我们将在 2×2 网格中添加按钮:

>>> 赢 = Tk()

>>> b1 = Button(win, text=”One”)

>>> b2 = Button(win,text=”Two”)

>>> b1.grid(行=0,列=0)

>>> b2.grid(行=1,列=1)

您会注意到我们的程序已将一些单元格留空。 那是因为我们没有向第 0 行第 1 列(或第 1 行和第 0 列)添加任何内容。 我们将尝试一个新的小部件来查看一些有趣的东西:

>>> l = Label(win, text=”这是一个标签”)

>>> l.grid(行=1,列=0)

添加上述代码后,您会注意到第二个按钮向右移动以容纳文本。 最好尝试带有多个小部件的网格管理器,看看它是如何工作的。

必读:印度的 Django 开发人员薪水

步骤#5:改进布局

在本节中,我们将尝试一个名为 frame 的新小部件。 框架仅用于包含其他小部件。 您可以将多个小部件打包到一个框架中,或使用网格将它们放在同一个框架中。 您还可以将不同的框架打包到一个框架中。 此功能允许您为您的 GUI 程序创建高级布局。 例如,我们将三个按钮连续添加到一个框架中。 水平添加按钮,然后将标签与框架垂直打包:

>>> 赢 = Tk()

>>> f = 帧(获胜)

>>> b1 = 按钮(f,“一个”)

>>> b2 = 按钮(f,“二”)

>>> b3 = 按钮(f,“三”)

>>> b1.pack(边=左)

>>> b2.pack(边=左)

>>> b3.pack(边=左)

>>> l = Label(win,”这个标签在所有按钮上”)

>>> l.pack()

>>> f.pack()

正如我们在本文前面所讨论的,您还可以使用 place 方法作为几何管理器。 place 方法允许您将小部件放置在窗口或框架内的特定位置。 但是,我们不建议频繁使用 place 方法,因为它会限制程序的响应能力。

使用网格功能,您可以使用“粘性”参数,该参数允许您使用地图坐标(S、N、W、SW、NE 等)来指定小部件的位置。 在我们进入下一部分之前,请确保您了解我们已经讨论过的功能。 测试网格和框架的功能,看看如何在其他 Python GUI 项目中使用它。

步骤#6:使按钮有用

如果您单击我们迄今为止创建的按钮,您一定注意到它们没有响应(它们不做任何事情)。 当您单击它们时它们会按下并在您将鼠标悬停在它们上方时突出显示,但它们不执行任何功能。 为了使我们的按钮执行特定的功能,我们必须使用“配置”功能。

我们可以将任何关键字参数传递给小部件的“配置”方法,以便在创建时传递它。 这是一个例子:

>>> b1.configure(text="Uno")

当您创建按钮或向按钮添加“配置”时,“命令”参数将按钮与回调函数联系起来。 为了理解它是如何工作的,我们将创建一个打印出消息的函数:

>>> def 但1():

… print(“按钮一被按下”)

>>> b1.configure(command=but1)

因此,当您单击相应的按钮时,它会打印一条消息。

步骤#7:添加条目小部件

输入小部件允许用户在程序中输入文本。 但是,我们必须像使用按钮一样使条目小部件起作用。 条目小部件必须检索(和设置)文本。 对于要执行此功能的条目小部件,您必须使用 Tkinter 对象“StringVar”。 'StringVar' 对象以字符串的形式保存文本,并通过 get 使其可读。

我们将创建一个新窗口来测试我们的条目小部件:

>>> 赢 = Tk()

>>> v = StringVar()

>>> e = Entry(win,textvariable=v)

>>> e.pack()

现在让我们添加“这是一个测试”作为条目并通过 StringVar 检索相同的条目:

>>> v.get()

“这是一个测验”

您现在可以将文本设置为 StringVar 并使其显示在小部件中:

>>> v.set(“这是从程序中设置的”)

附加小部件:列表框小部件

除了入口小部件,我们还可以添加一个列表框小部件。 列表框小部件允许用户从菜单中选择一个项目。 我们将创建一个新窗口来试用列表框小部件:

>>> 赢 = Tk()

>>> lb = Listbox(win, height=3)

>>> 磅包()

>>> lb.insert(END, “第一个条目”)

>>> lb.insert(END, “第二个条目”)

>>> lb.insert(END, “第三个条目”)

>>> lb.insert(END, “第四个条目”)

您可以在列表的开头、中间和结尾插入项目。 你也可以删除它们。 如果列表中的项目太多,可以添加滚动条:

>>> sb = 滚动条(win, orient=VERTICAL)

>>> sb.pack(边=左,填充=Y)

为了使我们的滚动条正常工作,我们必须使用回调函数:

>>> sb.configure(command=lb.yview)

>>> lb.configure(yscrollcommand=sb.set)

当您在列表框中选择项目时,curselection 方法会向您返回一个项目。 如果您不选择任何项目,它将返回一个空元组。

步骤#8:最后的步骤

我们将使用我们在 Tkinter 教程中学到的所有东西来创建电话列表编辑器:

总码

#!/usr/bin/env python3

从 tkinter 导入 *

从手机导入 *

def which_selected():

print(“在 {0}”.format(select.curselection()))

返回整数(select.curselection()[0])

def add_entry():

phonelist.append([fnamevar.get(), lnamevar.get(), phonevar.get()])

设置选择()

定义更新入口():

phonelist[which_selected()] = [fnamevar.get(),

lnamevar.get(),

phonevar.get()]

定义删除条目():

del phonelist[which_selected()]

设置选择()

def load_entry():

fname, lname, phone = phonelist[which_selected()]

fnamevar.set(fname)

lnamevar.set(lname)

phonevar.set(电话)

def make_window():

全局 fnamevar、lnamevar、phonevar、选择

赢 = Tk()

帧1 =帧(赢)

frame1.pack()

Label(frame1, text=”First Name”).grid(row=0, column=0, sticky=W)

fnamevar = StringVar()

fname = Entry(frame1, textvariable=fnamevar)

fname.grid(行=0,列=1,粘性=W)

Label(frame1, text=”Last Name”).grid(row=1, column=0, sticky=W)

lnamevar = StringVar()

lname = Entry(frame1, textvariable=lnamevar)

lname.grid(行=1,列=1,粘性=W)

标签(frame1, text=”Phone”).grid(row=2, column=0,sticky=W)

phonevar = StringVar()

电话 = 条目(框架 1,文本变量 = 电话变量)

phone.grid(行=2,列=1,粘性=W)

frame2 = Frame(win) # 按钮行

frame2.pack()

b1 = Button(frame2, text="添加", command=add_entry)

b2 = Button(frame2, text=”Update”, command=update_entry)

b3 = Button(frame2, text=”Delete”, command=delete_entry)

b4 = Button(frame2, text=”Load”, command=load_entry)

b5 = Button(frame2, text=”Refresh”, command=set_select)

b1.pack(边=左)

b2.pack(边=左)

b3.pack(边=左)

b4.pack(边=左)

b5.pack(边=左)

frame3 = Frame(win) # 选择名称

frame3.pack()

滚动=滚动条(frame3,方向=垂直)

select = Listbox(frame3, yscrollcommand=scroll.set, height=6)

scroll.config(command=select.yview)

滚动包(边=右,填充=Y)

select.pack(边=左,填充=两者,展开=1)

赢回

定义集选择():

phonelist.sort(key=lambda 记录:记录[1])

选择.删除(0,结束)

对于电话列表中的 fname、lname、电话:

select.insert(END, “{0}, {1}”.format(lname, fname))

赢 = make_window()

设置选择()

win.mainloop()

以下是电话清单:

phonelist = [['克里斯','迈耶斯','241-343-4349'],

['罗伯特','史密斯','202-689-1234'],

['珍妮特','琼斯','609-483-5432'],

['拉尔夫','巴恩哈特','215-683-2341'],

['埃里克','纳尔逊','571-485-2689'],

['福特','Prefect','703-987-6543'],

['玛丽','齐格勒','812-567-8901'],

['鲍勃','史密斯','856-689-1234']]

我们在这里分享的程序就是一个例子。 您可以使用我们在本 Tkinter 教程中讨论的功能创建程序。 上述程序缺少一些功能,例如它没有保存任何更改的选项。 您可以通过创建可执行此任务的按钮自行添加保存功能。

必读: Python教程中的马尔可夫链

了解有关 Python 和 Python GUI 项目的更多信息

如果您知道自己在做什么,那么在 Python Tkinter 项目上工作会非常有趣。 它们也是了解您的强项(和弱点)的好方法。 您可以了解有关 Python 的更多信息; 我们建议前往我们的博客。 以下是一些供进一步阅读的资源:

  • 10 个 Python GUI 项目
  • 如何用 Python 制作聊天机器人
  • 42个Python项目想法

你对这个项目有什么想法? 你参与过其他 Python Tkinter 项目吗? 让我们知道。

如果您想了解数据科学,请查看 IIIT-B 和 upGrad 的数据科学执行 PG 计划,该计划是为在职专业人士创建的,提供 10 多个案例研究和项目、实用的实践研讨会、行业专家的指导、1与行业导师一对一,400 多个小时的学习和顶级公司的工作协助。

Python 适合创建图形用户界面吗?

Python 有许多图形用户界面框架,从 Tkinter 到许多其他跨平台解决方案,以及特定于平台的绑定。 当 Python 与 Tkinter 结合使用时,创建图形用户界面既快速又简单。 Python 非常适合创建 GUI,因为它有很多内置的小部件,它可以快速生成窗口,具有强大的事件处理技术,并且具有基本的绘图功能。

Tkinter 或 KIVY:哪个更好用?

Kivy 是一个免费的开源 Python 框架,用于创建或设计独特但吸引人的用户界面程序。 如果您是一个喜欢创建应用程序的 Python 开发人员,那么 KIVY 是创建更多动态应用程序的绝佳选择。 Tkinter 是使用最广泛的 Python 接口,用于快速轻松地开发 GUI 应用程序。 如果您是 Python 新手并想学习如何创建计算机界面,请从 Tkinter 开始并学习基础知识。