Tkinter
Tkinter 模块(Tk接口)是Python 中最受欢迎的 GUI 开发库之一。Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
我们将讨论一个名为“customtkinter”的新库,它引入了一组用于在 Tkinter 中创建现代 GUI 的新小部件、主题和样式。
如果您有兴趣,现在有 CTk Theme Builder创建自己的 CustomTkinter 主题。可以从 GitHubhttps://github.com/avalon60/ctk_theme_builder/wiki 下载
开始
要使用此库,您将需要 tkinter 和 customtkinter 库。默认情况下,tkinter 库包含在所有 python 安装中,但对于 customtkinter 库,您需要运行以下命令。
pip install customtkinter
请检查安装是否成功,尝试在 Python 代码中导入库。
import customtkinter
如果此命令有效,则安装成功。
创建基本应用程序
我们要做的第一件事是在 CustomTkinter 中设置一个基本应用程序,没有任何小部件。在进一步讨论之前,我们需要了解 Tkinter 和 CustomTkinter 之间的一些细微差异。
下面是一个创建空 tkinter 窗口的简单应用程序的示例代码。
这将创建以下窗口。
import tkinter as tk
from customtkinter import *
class App(CTk):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.main_frame = CTkFrame(self)
self.main_frame.pack(expand=True, fill=tk.BOTH)
app = App()
app.geometry("400x240")
app.mainloop()
以下是您在上述代码中可以观察到的Tkinter和CustomTkinter应用程序之间的一些常见差异。
我们现在使用CTk()来创建tkinter应用程序,而不是使用Tk()。
customtkinter中的所有小部件都与Tkinter中相同的名称,但前面都有“CTk”。例如,Tkinter中的“Button”类在CustomTkinter中将被称为“CTkButton”。
考虑到这些差异,我们所知道的关于tkinter的一切都可以应用于定制的tkinter应用程序。小部件、功能和布局都是一样的。然而,这里和那里有一些细微的差异,比如参数名称。
那么CustomTkinter到底带来了什么呢?
CustomTkinter为Tkinter UI带来了完全不同的外观(我们将在本教程中看到),还引入了许多新功能,例如在移动中更改主题和小部件样式的能力。等待教程结束,看看我们如何为我们的应用程序启用黑暗模式主题!
开发登录应用程序
利用我们对tkinter的了解,我们开发了以下应用程序。您可能会在下面的代码中注意到一些细微的差异。例如,我们不再使用“背景”和“前景”来更改帧的颜色,而是使用参数“bg_color”和“fg_color“。我们使用了一个名为cget()的特殊函数,使框架颜色与窗口其余部分的颜色相匹配(由于某种原因,默认情况下没有发生)。
下面代码中的另一个细微差别是“CheckButton”小部件在CustomTkinter中被称为“CheckBox”。小部件名称不同的罕见情况。
import tkinter as tk
from customtkinter import *
class App(CTk):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
main_frame = CTkFrame(self, fg_color=self.cget("bg"))
main_frame.grid(row=0, column=0, padx=10, pady=10)
# Login Window title
title = CTkLabel(master=main_frame, text="Login Window")
title.grid(row=0, column=0, pady=(0, 20))
# Username label and entry box
user_label = CTkLabel(master=main_frame,
text="Username:")
user_label.grid(row=1, column=0, sticky="w", pady=(0, 10))
user_entry = CTkEntry(master=main_frame)
user_entry.grid(row=1, column=1, pady=(0, 10), padx=10)
# Password label and entry box
pass_label = CTkLabel(master=main_frame, text="Password:")
pass_label.grid(row=2, column=0, sticky="w", pady=(0, 10))
pass_entry = CTkEntry(master=main_frame, show="*")
pass_entry.grid(row=2, column=1, pady=(0, 10), padx=10)
# Remember Me check button
remember_me = CTkCheckBox(master=main_frame, text="Remember Me")
remember_me.grid(row=3, column=1, pady=(0, 10))
# Login button
login_button = CTkButton(master=main_frame, text="Login",
command=self.button_function)
login_button.grid(row=4, column=1, pady=(0, 20), sticky="e")
def button_function(self):
print("button pressed")
app = App()
app.mainloop()
这给了我们以下代码。如您所见,以下 GUI 看起来比普通的 tkinter GUI 要好一些。
这是一个类似的(普通的)tkinter 窗口供参考。
您在图像中无法注意到的一件事是,CustomTkinter GUI 具有悬停效果(例如当您将鼠标悬停在按钮上时),而普通的 tkinter GUI 则没有。
自定义 GUI 外观和主题
正如承诺的那样,我们还提到我们会向您展示如何更改主题。CustomTkinter 带有一些内置主题,“light”和“dark”。通过从 customtkinter 模块调用以下函数,我们可以更改这些主题。
customtkinter.set_appearance_mode("dark")
这为我们提供了以下使用 CustomTkinter 的登录应用程序。
我们可以做的另一件很酷的事情是更改小部件的颜色主题。默认情况下,它是 “蓝色” 的。因此,如您在上面看到的,按钮、滑块、复选框等将变为蓝色。
通过调用以下函数,我们可以更改这些设置。
customtkinter.set_default_color_theme("green")
总共有三个这样的设置,“蓝色”、“深蓝色”和“绿色”。您还可以将明/暗模式与微件颜色的这些设置之一组合在一起。如果我们将以下两个命令添加到我们的登录应用程序中:
customtkinter.set_appearance_mode("dark")
customtkinter.set_default_color_theme("green")
我们将得到这个:
其他自定义
CustomTkinter 中的按钮具有 Tkinter 版本所没有的几项内容。正如您之前可能已经注意到的那样,CustomTkinter 创建的按钮的角是圆角的。这在 Tkinter 中是不可能的。
“圆度”的量由一个名为“corner-radius”的参数控制。通过将其设置为 0,我们可以使角变得尖锐,或者我们可以将其设置为更高的值以使其变圆。下面是一个示例。
login_button = CTkButton(master=main_frame,
text="Login",
corner_radius=0)