0
這裏是一些簡單的,運行的代碼(這是從StackOverflow通過sentdex):如何將GUI類分成單獨的文件/模塊?
import tkinter as tk
LARGE_FONT = ("Verdana", 12)
class App(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.title(self, "This is App")
container = tk.Frame(self)
container.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageOne):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky=tk.NSEW)
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="StartPage", font=LARGE_FONT)
label.pack(padx=10, pady=10)
button = tk.Button(self, text="Visit Page 1",
command=lambda: controller.show_frame(PageOne))
button.pack()
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Page One!", font=LARGE_FONT)
label.pack(padx=10, pady=10)
button = tk.Button(self, text="Back to Home",
command=lambda: controller.show_frame(StartPage))
button.pack()
app = App()
app.mainloop()
現在我試圖把PageOne
(和每增加一頁/ pagelogik)到一個單獨的文件,並將其導入爲模塊,例如import <modulename> as <prefix>
。
這可以在點擊「Page One!」上的按鈕時起作用。 - 但然後它失敗,因爲StartPage
在這個文件中是未知的。
所以我只是不能自己弄清楚如何將StartPage
的參考文件傳遞給PageOne
。我猜想在PageOne
的檔案內的一個循環導入StartPage
將是一個愚蠢的混亂。
現在我剛剛在'cont'周圍添加了一個'eval()',它現在被提供爲String。它確實有用,所以非常感謝!也許'eval()'被認爲是不安全的方式呢? – Chrugel
@Chrugel:是的,'eval()'是一個糟糕的選擇。我更新了[原始答案](http://stackoverflow.com/a/7557028/7432)。 –