Автоматическое обновление метки tkinter, которая не доступна напрямую

Поскольку вы используете case, вы определяете частичную функцию, а частичные функции требуют фигурных скобок.

1
задан Pikachu the Watermelon Wizard 7 March 2019 в 02:14
поделиться

1 ответ

Поскольку вы не можете создать StringVar без инициализации Tk() (для вашего случая это Gui()), поэтому вам нужно создать переменную reading внутри Gui(), и PageOne.label1 использует ее в качестве [ 117]. Ниже приведен пример на основе вашего кода:

from tkinter import *
from random import randint

class Gui(Tk):
    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)
        container = Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.reading = StringVar() # create the StringVar for PageOne

        self.frames = {}
        for F in (StartPage, PageOne):
            frame = F(container, self)
            frame.grid(row=0, column=0, sticky="nsew")
            self.frames[F] = frame
        self.show_frame(StartPage)

    def show_frame(self, cont):
        self.frames[cont].tkraise()

class StartPage(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        button1 = Button (self, text="Show Page 1", command=lambda: controller.show_frame(PageOne))
        button1.pack(fill="both", expand=True)

class PageOne(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.label1 = Label(self, textvariable=controller.reading) # refer to Gui.reading StringVar
        self.label1.pack(fill='x')
        button1 = Button (self, text="Show Start Page", command=lambda: controller.show_frame(StartPage))
        button1.pack(fill='x')


# use .after() to simulate the update of reading variable periodically
def update_reading():
    app.reading.set(randint(0, 10000))
    print('reading:', app.reading.get())
    app.after(1000, update_reading)

app = Gui()
update_reading() # start the simulation task of updating reading variable
app.mainloop()

Обратите внимание, что я создал функцию update_reading() для периодического моделирования обновления переменной reading с использованием функции after().

0
ответ дан acw1668 7 March 2019 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: