使用 Tkinter GUI 库开始在 Python 中创建桌面应用程序

Tkinter 是一个图形用户界面 (GUI) 工具包,如果您想探索 Python 在创建桌面应用程序方面的强大功能,您应该尝试一下。

在这里,我们来看看 Tkinter GUI 模块的基础知识。

Tkinter 设置

通常,如果您安装了更高版本的 Python(从 Python 3 开始),则不需要单独安装tkinter 。不过,该库可能不适用于旧的 Python 版本。这是 Mac 和 Linux 用户的常见问题,因为默认情况下,这些操作系统通常带有较旧版本的 Python。

通常,要使用tkinter模块,请确保从官方python.org网站在您的 PC 上下载并安装最新的 Python 兼容版本。

如果你在Mac上,或者,你可以下载最新版本的ActiveTcl,从Tkinter的编译器的ActiveState

如何使用 Tkinter

Tkinter 依赖于它内置的TK类。它将 GUI 中的所有事件包装在一个mainloop 中。因此,主循环包装,使您的Tkinter的可执行代码。

开始使用tkinter

 from tkinter import Tk
Tk().mainloop()

运行上面的代码会启动一个空的tkinter框架。

然而,Tkinter 的自定义功能在其内置小部件中。

要使用这些小部件,您可以从tkinter导入它们,方法是将from tkinter import Tk替换

 from tkinter import *
t = Tk()
t.mainloop()

您还可以使用几何函数调整窗口大小,然后使用tkinter标题小部件指定标题:

 t = Tk()
t.geometry("600x600")
t.title("Tk Tutorial")
t.mainloop()

Tkinter 标签小部件

Tkinter 允许您使用Label小部件将纯文本直接写入 GUI:

 t = Tk()
Label(t, text = "MUO Tkinter tutorial").grid()
t.mainloop()

但是grid()方法是pack()方法的替代方法。它将您的小部件粘贴到 GUI 上,使它们可见。

您还可以为标签文本指定字体:

 t = Tk()
Label(t, text = "MUO Tkinter tutorial", font=(60)).grid()
t.mainloop()

在 Tkinter 中使用按钮小部件

按钮是一些Tkinter的最常用的小部件。您可以使用各种内置按钮小部件将这些可点击的按钮添加到您的 GUI 中。

以下是使用Button小部件向 GUI 添加主按钮的方法:

 t = Tk()
Button(t, text = "Clickable", bg = "black", fg = "white").grid()
t.mainloop()

bgfg关键字分别描述按钮的背景颜色和其中文本的颜色。

您还可以通过包含高度宽度参数来调整按钮的尺寸:

 t = Tk()
Button(t, text = "Clickable", bg = "black", fg = "white", height="2", width="10").grid()
t.mainloop()

这是输出:

如果你想让按钮在视觉上更有吸引力,你可以包含一个浮雕关键字,然后调整它的边框宽度:

 t = Tk()
Button(t, text="Clickable", bg="blue", fg="white",
height=2, width=10, relief=RAISED, borderwidth=6).grid()
t.mainloop()

看起来像这样:

RAISED替换为FLAT以查看结果如何。

您可以添加任意数量的按钮。但是您要小心避免内容重叠。

为避免重叠,您可以为每个按钮指定行和列位置:

 t = Tk()
Button(t, text=1, bg="black", fg="white").grid(row=1, column=1)
Button(t, text=2, bg="black", fg="white").grid(row=2, column=1)
Button(t, text=3, bg="black", fg="white").grid(row=3, column=1)
Button(t, text=4, bg="black", fg="white").grid(row=4, column=1)
t.mainloop()

但是,一个可选的命令关键字将事件添加到Button小部件。本质上,它锚定了一个可选函数,用于在您单击按钮时处理某些事件。

例如,下面的代码在您单击每个按钮时将其值乘以 6。它基于一个预定义的函数:

 def buttonpress(r):
r = 6*r
Label(t, text=r, font=(60)).grid(row=5, column=2)
t = Tk()
Button(t, text = 1, bg = "black", fg = "white", width = 10, height = 2,
command = lambda:buttonpress(1)).grid(row=1, column = 1, pady = 6)
Button(t, text = 2, bg = "black", fg = "white", width = 10,
command = lambda:buttonpress(2)).grid(row = 2, column = 1, pady = 6)
Button(t, text = 3, bg = "black", fg = "white", width = 10,
command = lambda:buttonpress(3)).grid(row = 3, column = 1, pady = 6)
Button(t, text = 4, bg = "black", fg = "white", width = 10,
command = lambda:buttonpress(4)).grid(row = 4, column = 1, pady = 6)
t.mainloop()

在上面的代码中, buttonpress处理乘法事件。然后Button小部件使用匿名lambda函数指向该事件处理程序。

如果您担心pady关键字,它会在行中清楚地分隔每个按钮。用padx替换它可以将整个列中的按钮分开。您可以根据需要同时使用这两个关键字来分隔两个轴上的按钮。

也就是说,您不想像在之前的代码中那样为每个按钮重新发明轮子。这会减慢执行时间,而且会使您的代码难以阅读和缩小范围。

但是您可以使用 for 循环来避免这种重复。

所以这是上面代码的一个更短更好的版本:

 def buttonpress(r):
r = 6*r
Label(t, text = r, font = (60)).grid(row = 5, column = 2)
t = Tk()
a = [1, 4, 6, 7]
for i in a:
j = lambda y = i:buttonpress(y)
Button(t, text = i, bg = "black", fg = "white", width = 10, height = 2,
command=j).grid(row = i, column = 1, pady = 6)
t.mainloop()

让我们进一步探索for循环向 GUI 添加菜单按钮的能力:

 from tkinter import *
t = Tk()
buttons = ["Files", "Dashboard", "Menu", "Settings", "Help"]
m = 0
for i in range(len(buttons)):
# Get each text in the buttons array using a list index as m increases.
# Then let the column increase by 1 through the length of the array:

Menubutton(t, text=buttons[m], bg="blue", fg="white").grid(row=5, column=i)
m += 1
t.mainloop()

向您的 GUI 添加复选按钮也很容易:

 t = Tk()
Checkbutton(t, text = "Select option").grid()
t.mainloop()

就像我们之前所做的那样,随意使用for循环乘以该检查按钮。

如何使用 Tkinter 的菜单小部件创建下拉菜单

菜单小部件可让您在tkinter 中设计可点击的下拉菜单。

如前所述, tkinter提供了许多小部件选项。您将在设计下拉菜单时使用其中的一些。

以下是您在创建下拉菜单时会遇到的一些常见小部件选项:

  • add_cascade:它显示一个菜单标签并将它贴在它所属的地方。
  • add_separator:划分子菜单并将它们分为上下子菜单。
  • add_command:这是您为子菜单命名的地方。最终,它接受一个命令参数,您可以在其中指定一个事件处理程序。

这是一个使用这三个选项的下拉示例:

 from tkinter import *
t = Tk()
fileOptions = ["New", "open", "Save", "Save as"]
fileOptionsAfterseparator = ["Import", "Export", "Exit"]
viewOptions = ["Transform", "Edit", "Create"]
menuBar = Menu(t)
file = Menu(menuBar, tearoff=0)
for i in fileOptions:
file.add_command(label=i, command=None)
file.add_separator()
for i in fileOptionsAfterseparator:
file.add_command(label=i, command=None)
menuBar.add_cascade(label="File", menu=file)
View = Menu(menuBar, tearoff=0)
for i in viewOptions:
View.add_command(label=i, command=None)
menuBar.add_cascade(label="View", menu=View)
t.config(menu=menuBar)
t.mainloop()

看看它的样子:

Tkinter 选项菜单

OptionmenuMenu下拉菜单不同,它将其标签切换到选定的选项。

尽管您可以为选项菜单指定默认标签值,但默认情况下它没有标签。

相关:适合初学者的Python项目思路

以下是在tkinter 中创建选项菜单的方法:

 t = Tk()
Omenu = StringVar() #set the variable type of the options
Omenu.set("MUO") #specify a default value for the menu icon
OptionMenu(t, Omenu, "MUO", "Amazon", "Tutorial").grid()
t.mainloop()

使用 Tkinter 构建可重用的桌面应用程序

Tkinter 提供了一系列功能,可帮助您制作交互式 GUI 桌面应用程序。虽然它可能不像其他一些 Python GUI 模块那样具有很多灵活的美化功能,但它仍然是一个值得探索的方便工具。虽然此处的示例仅展示了一些基本概念,但tkinter提供了更多高级功能供您试用。

也就是说,您可以构建一个 GUI 桌面计算器,制作一个迷你文本编辑器,甚至创建一个 GUI 桌面应用程序来管理您的库存。如果你想展翅高飞,成为桌面 GUI 专业人士,你甚至可以查看 Python 的其他 GUI 模块。