你得原諒我刪除你的類,但我從來沒有親自帶班在Python工作過。不過,我似乎讓你的代碼在某種程度上工作。
import tkinter
from tkinter import *
def playGame():
frame.quit
gameMenu()
def gameMenu():
b = mainMenu(root)
topFrame = Frame(root)
topFrame.pack()
bottomFrame = Frame(root)
bottomFrame.pack(side = BOTTOM)
photo = PhotoImage(file = "piano.png")
label = Label(root, image = photo)
label.pack()
root=Tk()
frame = Frame(root)
frame.pack()
quitButton = Button(frame, text = "Quit", command = frame.quit)
quitButton.pack(side = LEFT)
proceedButton = Button(frame, text = "Play", command = playGame)
proceedButton.pack(side = LEFT)
root.mainloop()
你有主要的問題是,你是同時使用root
和master
。在tkinter中聲明主窗口時,通常使用root = Tk()
或master = Tk()
任何一個都可以接受,我個人使用master
。該變量包含其他所有內容放入的主窗口。您還沒有將Tk()
放入任何變量中,這意味着當您點擊root.mainloop()
時,沒有任何東西可以進入主循環,這是因爲您試圖在gameMenu中聲明root = Tk()
,該程序未在您的程序中調用。
如果你想打開的窗戶內的Tkinter它可能更容易寫的東西是這樣的:
from tkinter import *
master = Tk() #Declaring of main window
def ProceedButtonCommand(mainframe, master): #Command to attach to proceed button
mainframe.destroy()
DrawSecondScreen(master) #This line is what lets the command tied to the button call up the second screen
def QuitButtonCommand(master):
master.destroy()
def DrawFirstScreen(master):
mainframe = Frame(master) #This is a way to semi-cheat when drawing new screens, destroying a frame below master frame clears everything from the screen without having to redraw the window, giving the illusion of one seamless transition
ProceedButton = Button(mainframe, text="Proceed", command=lambda: ProceedButtonCommand(mainframe, master)) #Lambda just allows you to pass variables with the command
QuitButton = Button(mainframe, text = "Quit", command=lambda: QuitButtonCommand(master))
mainframe.pack()
ProceedButton.pack()
QuitButton.pack()
def DrawSecondScreen(master):
mainframe = Frame(master)
Label1 = Label(mainframe, text="Temp")
mainframe.pack()
Label1.pack()
DrawFirstScreen(master)
master.mainloop() #The mainloop handles all the events that occur in a tkinter window, from button pressing to the commands that a button runs, very important
這個小腳本只是繪製包含兩個按鈕的屏幕,一個繪製一個新的畫面與文字的「臨時」在其上,另一個按鈕關閉master
窗口。 未來,讓一位有編程經驗的朋友來幫助解決這類問題可能會更好。在一些計算論壇上聊聊,我相信你會很快找到一組共享和修復代碼。
編輯:剛剛意識到,在playGame函數下,它會調用不存在的函數gameMenu。它下面稱爲playGame的功能應該稱爲gameMenu。 – 2015-03-03 02:01:28
所以它現在好嗎?如果事情發生了變化,請編輯問題。 – Marcin 2015-03-03 02:04:03
不,它仍然給我一個'root'沒有定義的錯誤。 – 2015-03-03 02:11:06