對不起,對我來說任何愚蠢或無知,但我是Python新手,並且一般編碼。我一直在試圖獲得一個用於教我自己的遊戲的UI的工作方式。我有一個主窗口和一些按鈕小工具。 Play遊戲按鈕打開第二個窗口(用於遊戲本身)並使用.withdraw方法隱藏根窗口。這工作完美。在遊戲窗口中,我有另一個按鈕,我想銷燬遊戲窗口,並將用戶帶回到已撤消的根菜單窗口。這似乎工作,除了我每次調用它,它會在窗口中創建一個新的,重複的小部件集合,所以我最終得到多個集合。Python:調用一個父類方法來取消一個窗口(Tkinter)會導致窗口中的兩組控件
我會在底部發布我的完整代碼,但這裏是我相信的是相關部分。
tkinter Button在父類(主窗口)內調用它。這工作正常。
def playGame(self): #Start the main game window
self.master.withdraw()
gameWindow()
我使用的子類內的波紋管的方法來破壞遊戲窗口,然後在父類中調用一個方法帶回提前撤回窗口
def exitMenu(self):
self.g.destroy()
UI(root).showMenu()
這個工程除了它重複每次造成這種小部件被顯示:
貝婁是我的所有代碼,非常感謝你的任何 幫幫我。
import tkinter as tk
import PIL
from Config import *
root = tk.Tk()
class UI(): #Main Menu
def __init__(self, master):
#Create Main Menu Window
self.master = master
self.master.title("Monopoly")
self.master.wm_iconbitmap('icons\Monopoly-Icon.ico')
self.master.geometry((resolution))
#Menu Buttons
self.label = tk.Label(master, text= 'Welcome to Monopoly! PLACEHOLDER')
self.playButton = tk.Button(master, text= 'Play Game', command= self.playGame)
self.settingsButton = tk.Button(master, text= 'settings', command= self.settings)
self.exitButton = tk.Button(master, text= 'Exit', command= self.exitGame)
self.label.grid(columnspan=2)
self.playButton.grid(column=0)
self.settingsButton.grid(column=0)
self.exitButton.grid(column=0)
def settings(self): #Opens Settings Window
s = tk.Toplevel()
s.title('Settings')
s.wm_iconbitmap('icons\Monopoly-Icon.ico')
s.geometry((resolution))
self.master.withdraw()
resLabel = tk.Label(s, text= 'Resolution')
resOption = tk.OptionMenu(s, resolution, *resList)
resLabel.grid(column=0,row=0)
resOption.grid(column=0, row=4)
def showMenu(self): #Bring back menu windwow
self.master.deiconify()
def exitGame(self): #Exit Game Method
root.destroy()
def playGame(self): #Start the main game window
self.master.withdraw()
gameWindow()
class gameWindow(UI):
def __init__(self):
self.g = tk.Toplevel()
self.g.title('Monopoly')
self.g.wm_iconbitmap('icons\Monopoly-Icon.ico')
self.g.geometry((resolution))
self.menuButton = tk.Button(self.g, text= 'Main Menu', command= self.exitMenu)
self.menuButton.grid(column=0,row=0)
def exitMenu(self):
self.g.destroy()
UI(root).showMenu()
mainMenu = UI(root)
root.mainloop()
非常感謝你抽出時間來幫助。這阻止了我將筆記本電腦扔出窗外! =)在我原來的代碼中,我認爲我在調用UI類本身,然後是showMenu方法?這是否意味着從另一個類調用一個類方法,它必須始終是我想調用的類的子類? – Shallon
我很高興它幫助:)。 – Khristos
不,你並不總是需要傳遞一個類到另一個類來使用第二個類中的第一個類的方法。這一切都取決於兩個班級之間的相互作用以及他們的工作。在你的情況下,你在gameWindow之外創建了一個'UI'實例。因此'gameWindow'無法訪問'UI'的方法。 – Khristos