Код фона: при попытке всплывающего окна вызвать функцию из другого класса.
У меня проблемы с определением контроллера и правильной настройкой моих функций. Я получаю сообщение об ошибке, что контроллер не был определен до его передачи в класс popupWindow , что имеет смысл, поскольку Я не определил контроллер где-то еще, но я не знаю, где это сделать :
NameError: name 'controller' is not defined
Я изучил эти прошлые ответы для получения помощи, но все еще застрял:
Вызов контроллера кадров Tkinter из функции, а не по команде кнопки
Вызов функций из фрейма Tkinter в другой
Вот мой упрощенный код (Примечание: я определяю различные переменные в функции values в других функциях класса BoundingBox , но я не включил эти функции для ясности и сокращения кода):
Я также не понимаю, как заставить работать функцию get_page что является частью моей проблемы с выяснением, как и где определить контроллер.
import tkinter as tk
from tkinter import *
class BoundingBox(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
def get_page(self, page_class):
return self.frames[page_class]
def popup(self):
self.w=popupWindow(self.master,controller)
def values(self):
print(self.start_x, self.start_y, self.end_x, self.end_y, self.totwidth, self.totheight, self.value1, self.value2)
self.allcord.append([self.start_x, self.start_y, self.end_x, self.end_y, self.totwidth, self.totheight, self.value1, self.value2])
self.allrect.append(self.rect)
print (len(self.allcord))
class popupWindow(tk.Toplevel):
def __init__(self, master, controller):
super().__init__(master)
self.controller = controller
self.l1=Label(self,text="Breed")
self.l1.grid(row=0, column=0)
self.e1=Entry(self)
self.e1.grid(row=0, column=1)
self.l2=Label(self,text="Color")
self.l2.grid(row=1, column=0)
self.e2=Entry(self)
self.e2.grid(row=1, column=1)
self.b=Button(self,text='Save',command=self.cleanup)
self.b.grid(row=2, column=1)
def cleanup(self):
self.value1=self.e1.get()
self.value2=self.e2.get()
self.controller.values()
self.top.destroy()
if __name__ == "__main__":
draw = BoundingBox()
draw.mainloop()