我試圖使用類,這一點我是很新,做一個Tkinter的GUI(我看望了TNB的教程就可以了),和我有一些將特性實現到我的代碼並理解它的問題。我試圖去適應的代碼,我在此網站上發現獲得基本的結構,我無法弄清楚如何/爲什麼它的一些工作以及如何添加一些東西的Python 3.4 Tkinter的,理解的代碼/設置窗口大小
這是我到目前爲止的代碼:
import tkinter as tk
class Application(tk.Tk): # Inheriting tkinter classes etc.
def __init__(self):
tk.Tk.__init__(self) # Creates window?
container = tk.Frame(self) # Creates frame object
container.pack(side="top", fill="both", expand=True) # Places container/frame inside window
container.grid_rowconfigure(0, weight=1) # ?
container.grid_columnconfigure(0, weight=1) # ?
self.frames = {} # What does this do?
for F in (MenuPage, StartPage, InfoPage, SettingsPage):
page_name = F.__name__ # What is __name__ for?
frame = F(container, self)
self.frames[page_name] = frame # Creating dictionary entries?
frame.grid(row=0, column=0, sticky="NSEW")
self.show_frame("MenuPage") # Pushes menu page to top when initialised
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise() # Raises frame to top of stack
class MenuPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="This is the menu page")
label.pack(side="top", fill="x", pady=10)
# Begins quiz
start_btn = tk.Button(self,
text="Start",
command=lambda : controller.show_frame("StartPage"))
start_btn.pack()
# Takes user to information page
info_btn = tk.Button(self,
text="Information",
command=lambda: controller.show_frame("InfoPage"))
info_btn.pack()
# Takes user to settings page
settings_btn = tk.Button(self,
text="Settings",
command=lambda: controller.show_frame("SettingsPage"))
settings_btn.pack()
# Quits program/closes all GUIs
quit_btn = tk.Button(self,
text="Quit",
command=self.controller.destroy)
quit_btn.pack()
# First page of quiz, will need to inherit from settings?
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="This is the start")
label.pack(side="top", fill="x", pady=10)
class InfoPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="This is the info page")
label.pack(side="top", fill="x", pady=10)
# Takes user back to main menu
menu_btn = tk.Button(self,
text="Go to the menu page",
command=lambda: controller.show_frame("MenuPage"))
menu_btn.pack()
class SettingsPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="This is the settings page")
label.pack(side="top", fill="x", pady=10)
# Takes user back to main menu
menu_btn = tk.Button(self,
text="Go to the menu page",
command=lambda: controller.show_frame("MenuPage"))
menu_btn.pack()
if __name__ == "__main__": # What does this do?
app = Application()
app.mainloop()
(我想在功能上添加了退出按鈕,它實際上是關閉整個GUI程序。到目前爲止,我已經嘗試使用.destroy()作爲按鈕命令,只是quit命令的各種方法,但我沒有運氣,我也嘗試過在Application()類中使用destroy函數,並從命令中調用它,但那也不起作用。我不確定我是否正確使用它) - 修正了,感謝Bryan Oakley和furas。
另一件事我不知道如何做的是改變窗口的大小參數,讓每一個窗口是說(500x200)。當不使用類時這很容易,但我甚至不知道從何時開始使用它們,並且有多個框架。
我也標記/標記了一些代碼行,如果有人能向我解釋它會很好。在解釋原始代碼的某些部分之前,已經有了一篇文章,但他們只討論了該用戶請求的特定部分。
感謝提前:) (希望能全部縮進已複製現在)
行類似於'變量=小工具()。pack()的'將分配'None'到'variable'(未'Widget'),因爲'pack()的/網格()/位()''返回None' 。使用'variable = Widget()'和'variable.pack()' – furas
'command = controller.destroy' – furas
這可能解釋了我在其他代碼片段上遇到的一些錯誤,儘管它們在這裏運行得很好。我會改變,謝謝。 –