Я использую популярный подход tkinter, когда первоначальный автор пробовал шаблон "псевдо MVC". Вот код:
class Main(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for f in (PageOne, PageTwo):
frame = f(container, self)
self.frames[f] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(PageOne)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def get_page(self, page_class):
return self.frames[page_class]
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
def inputs():
r=rq.get('https://swapi.co/api/people/1')
page2 = self.controller.get_page(PageTwo)
page2.resp.set(r.json()['name'])
self.controller.show_frame(PageTwo)
b = tk.Button(station_frame, text="Submit",command=inputs)
b.grid(row=2, column=2, pady=5, padx=5)
class PageTwo(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.resp = tk.StringVar()
lbl = tk.Label(self, text=self.resp.get())
lbl.pack(pady=10, padx=10)
, при этом мой lbl
становится пустым, и когда я устанавливаю text=self.resp
, он печатает PY_VAR0
. Теперь вот часть, которая смущает меня. когда я меняю lbl
(метку) с помощью кнопки и вызываю функцию, которая просто печатает self.resp.get()
, она печатает значение. Вот код:
class PageTwo(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.resp = tk.StringVar()
def show():
print(self.resp.get())
btm = tk.Button(self, text='call', command=show)
btm.pack(pady=10, padx=10)
Я хочу показать соответствующее значение на Label
на моем PageTwo.