2016-02-06 3 views
3

Используя tkinter на основе OOP, я хочу использовать переменную, созданную внутри метода класса в другом классе, то есть не тот, в котором он был создан.Использование переменной, созданной в методе класса в другом классе

Переменная, которую я хочу использовать, - это «MainGameWindow», идентификатор экземпляра класса, с которым я имею дело. Он изначально создавался внутри класса «пользователя появляется» в методе «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) 

в своем нынешнем состоянии я получаю е rror 'NameError: глобальное имя «MainGameWindow» не определено ». Я предполагаю, что это потому, что переменная была создана внутри функции класса и, следовательно, является локальной переменной - как я могу использовать эту переменную вне этой функции?

Извините, если этот вопрос длинный, однако я искал ответ и не смог его найти.

Большое спасибо заранее.

+0

Есть ли причина, по которой вы не использовали бы 'self.main_game_window = MainGameClass (root)'? У экземпляра 'LoginUser' будет атрибут' main_game_window'. – Kris

ответ

1

Почему не return MainGameWindow от LoginUser и хранить его там, где хотите?

Если вы не хотите, чтобы сделать это, альтернатива (не рекомендуется)

global MainGameWindow 
MainGameWindow = MainGameClass(root) 

Это ставит MainGameWindow в глобальном пространстве имен.

Несвязанный, if os.path.isfile(self.logdetails) == True: должен быть просто if os.path.isfile(self.logdetails):.

Смежные вопросы