Невозможно отобразить переменную на ярлыке - PullRequest
0 голосов
/ 20 января 2020

Я использую популярный подход 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...