使用基于OOP的tkinter,我希望在另一个类中使用在类方法中创建的变量,即不是创建它的那个。
我想使用的变量是' MainGameWindow',我正在处理的类实例的标识符。它最初是在课程“LoginWindow”中创建的。在方法' LoginUser'中,如下所示:
def LoginUser(self):
self.username=self.entry_username.get()
self.usertg=self.entry_tutorg.get()
self.logdetails=str(self.username)+' '+str(self.usertg)+'.txt'
if os.path.isfile(self.logdetails)==True:
#opening of main window
self.master.destroy()
root=Tk()
MainGameWindow=MainGameClass(root)
我希望在另一个类' OptionsClass'中使用这个变量,以便在' MainGameClass'中执行一个类方法。 (' MainGameWindow'实例)使用命令:
self.radio_targetapp1=Radiobutton(self.master,text="Standard Mole",variable=self.app_var,value="placeholder1.gif",command=lambda:MainGameWindow.changeApp("placeholder1.gif"))
这是我试图执行的方法:
def changeApp(self,changeto):
self.target_photo=PhotoImage(file=changeto)
self.coords=self.canvas.coords(self.mole_target)
self.theimg=self.canvas.create_image(self.coords[0],self.coords[1],image=self.target_photo)
在当前状态下,我收到错误' NameError:全局名称' MainGameWindow'未定义'。我假设这是因为变量是在类函数内创建的,因此是局部变量 - 因此我如何在此函数之外使用此变量?
道歉,如果这个问题啰嗦,但是我已经找到了答案,却找不到答案。
非常感谢提前。
答案 0 :(得分:0)
为什么不return MainGameWindow
来自LoginUser
并将其存储在您想要的位置?
如果您不想这样做,另一种选择(不推荐)是
global MainGameWindow
MainGameWindow = MainGameClass(root)
这会将MainGameWindow
放入全局命名空间。
无关,if os.path.isfile(self.logdetails) == True:
应该只是if os.path.isfile(self.logdetails):
。