ttk 在应用样式时打开辅助 Window
ttk Opening Secondary Window when Applying Style
这是我的代码
from Tkinter import *
import ttk, tkMessageBox
import os
font = ("Avenir", 24)
b = ttk.Style()
b.configure('TButton', font=font)
class LoginScreen(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = Frame(self)
container.pack(side=TOP, fill=BOTH, expand=True)
self.frames = {}
for F in (Login, Register):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.show_frame(Login)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class Login(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
label = Label(self, text="screen 1")
button = Button(self, text="move", font=font, command=lambda: controller.show_frame(Register))
button.pack()
label.pack()
class Register(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
label = Label(self, text="screen 2")
label.pack()
if __name__ == '__main__':
app = LoginScreen()
app.title("Login")
app.mainloop()
当我 运行 这个时,我得到这个屏幕:
Working Screen without ttk
但是我一改:
button = Button(self, text="move", font=font, command=lambda: controller.show_frame(Register))
到
button = ttk.Button(self, text="move", style='TButton', command=lambda: controller.show_frame(Register))
A Secondary Window is opened and the font doesn't change.
我希望我忽略了一些简单的事情,但这种设置 ttk 小部件样式的方法是我在网上看到的唯一方法。
我不想要 window,正如我之前所说,当我将 'b' 样式应用于按钮时,它似乎神奇地出现了。
感谢阅读。
次要 window 是由您的第 7 行引起的。当您调用 ttk.Style
时,它需要一个根 window 才能使用,如果尚未创建,则它会创建一。要解决此问题,您需要在创建根 window(调用 Tk()
)后将第 7 行和第 8 行移动到一个点。
if __name__ == '__main__':
app = LoginScreen()
app.title("Login")
b = ttk.Style()
b.configure('TButton', font=font)
app.mainloop()
这是我的代码
from Tkinter import *
import ttk, tkMessageBox
import os
font = ("Avenir", 24)
b = ttk.Style()
b.configure('TButton', font=font)
class LoginScreen(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = Frame(self)
container.pack(side=TOP, fill=BOTH, expand=True)
self.frames = {}
for F in (Login, Register):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.show_frame(Login)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class Login(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
label = Label(self, text="screen 1")
button = Button(self, text="move", font=font, command=lambda: controller.show_frame(Register))
button.pack()
label.pack()
class Register(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
label = Label(self, text="screen 2")
label.pack()
if __name__ == '__main__':
app = LoginScreen()
app.title("Login")
app.mainloop()
当我 运行 这个时,我得到这个屏幕: Working Screen without ttk
但是我一改:
button = Button(self, text="move", font=font, command=lambda: controller.show_frame(Register))
到
button = ttk.Button(self, text="move", style='TButton', command=lambda: controller.show_frame(Register))
A Secondary Window is opened and the font doesn't change.
我希望我忽略了一些简单的事情,但这种设置 ttk 小部件样式的方法是我在网上看到的唯一方法。
我不想要 window,正如我之前所说,当我将 'b' 样式应用于按钮时,它似乎神奇地出现了。
感谢阅读。
次要 window 是由您的第 7 行引起的。当您调用 ttk.Style
时,它需要一个根 window 才能使用,如果尚未创建,则它会创建一。要解决此问题,您需要在创建根 window(调用 Tk()
)后将第 7 行和第 8 行移动到一个点。
if __name__ == '__main__':
app = LoginScreen()
app.title("Login")
b = ttk.Style()
b.configure('TButton', font=font)
app.mainloop()