Tkinter

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_CustomTkinter

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 下载

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_现代 GUI_02

开始

要使用此库,您将需要 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()

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_现代 GUI_03

以下是您在上述代码中可以观察到的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 要好一些。

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_CustomTkinter_04

这是一个类似的(普通的)tkinter 窗口供参考。

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_自定义 GUI 外观_05

您在图像中无法注意到的一件事是,CustomTkinter GUI 具有悬停效果(例如当您将鼠标悬停在按钮上时),而普通的 tkinter GUI 则没有。

自定义 GUI 外观和主题

正如承诺的那样,我们还提到我们会向您展示如何更改主题。CustomTkinter 带有一些内置主题,“light”和“dark”。通过从 customtkinter 模块调用以下函数,我们可以更改这些主题。

customtkinter.set_appearance_mode("dark")

这为我们提供了以下使用 CustomTkinter 的登录应用程序。

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_自定义 GUI 外观_06

我们可以做的另一件很酷的事情是更改小部件的颜色主题。默认情况下,它是 “蓝色” 的。因此,如您在上面看到的,按钮、滑块、复选框等将变为蓝色。

通过调用以下函数,我们可以更改这些设置。

customtkinter.set_default_color_theme("green")

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_登录应用程序_07

总共有三个这样的设置,“蓝色”、“深蓝色”和“绿色”。您还可以将明/暗模式与微件颜色的这些设置之一组合在一起。如果我们将以下两个命令添加到我们的登录应用程序中:

customtkinter.set_appearance_mode("dark") 
customtkinter.set_default_color_theme("green")

我们将得到这个:

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_登录应用程序_08

其他自定义

CustomTkinter 中的按钮具有 Tkinter 版本所没有的几项内容。正如您之前可能已经注意到的那样,CustomTkinter 创建的按钮的角是圆角的。这在 Tkinter 中是不可能的。

“圆度”的量由一个名为“corner-radius”的参数控制。通过将其设置为 0,我们可以使角变得尖锐,或者我们可以将其设置为更高的值以使其变圆。下面是一个示例。

login_button = CTkButton(master=main_frame, 
                         text="Login", 
                         corner_radius=0)

CustomTkinter 教程:在 Tkinter 中创建图形 GUI_自定义 GUI 外观_09