我在 ttkthemes 中尝试过的主题都不会为整个窗口设置主题。我将主题应用于根/自身,它只会主题文本/按钮
截图:
我本以为窗口会填满整个路径,有什么我遗漏的吗?
代码:
class Window(ThemedTk):
def __init__(self):
ThemedTk.__init__(self)
self.tk.call('lappend', 'auto_path', 'correct_path_to_theme')
self.tk.call('package', 'require', 'awdark')
s = ttk.Style()
s.theme_use("awdark")
# frame all content will sit inside of
mainframe = ttk.Frame(self, width=self.width, height=self.height)
mainframe.pack(side="top", fill="both", expand=True)
self.frames = {}
for F in (
HomePage,
):
frame = F(mainframe, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(HomePage)
def show_frame(self, fr):
frame = self.frames[fr]
frame.tkraise()
# Home Page of the app
class HomePage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# header label
header_label = ttk.Label(
self, text="Post Visual Inspection Board Capture Program", justify="center"
)
header_label.pack()
# will start the new capture process
new_capture_buton = ttk.Button(
self,
text="New Capture",
command=lambda: controller.show_frame(InstructionsPage),
)
new_capture_buton.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
顶层(包括主窗口)是不是主题小部件。他们对主题系统一无所知。他们还拥有其他重要的权力,使得简单地重复代码“但带有主题”变得非常重要。
简单的修复(即我一直在做的)是将主题框架打包在顶层作为唯一的直接子级,并使其始终覆盖其整个父级。然后将其他主题小部件放入其中。从技术上讲,它不是一个主题顶层,但它的外观和工作原理就像它一样(前提是您使用正确的手柄来使用它),所以这已经足够好了。