Динамическое изменение текста метки при событиях в другом кадре tkinter - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь динамически изменить текст метки в пределах одного кадра от другого кадра. Оба кадра находятся в экземпляре класса объекта. Это не моя настоящая проблема, но это иллюстрирует принцип. Как я могу обратиться к app.frame0.label1.text из app.frame1.button1.click? (Я ценю, что это не правильный синтаксис) Заранее спасибо.

from tkinter import *

txt = 'Hi'

def change():
    # idea was to put some code here to change frame0-label1-text
    pass

class HST(Tk):
    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)

        frame0 = Frame(self)
        frame0.grid(row=0, column=0)

        label1 = Label(frame0, text=txt, width=20, height=5)
        label1.grid(row=0, column=0)

        frame1 = Frame(self)
        frame1.grid(row=1, column=0)

        button1 = Button(frame1, text='Click', width=20, height=5, command=change)
        button1.grid(row=0, column=1)

app = HST()
app.mainloop()

1 Ответ

0 голосов
/ 03 октября 2019

удалось решить собственную проблему! Часто полезно изложить проблему, чтобы объяснить кому-то еще. Исправлен код с использованием StringVar

from tkinter import *

def change():
    app.txt.set('hello') # added
    pass

class HST(Tk):
    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)

        self.txt = StringVar() # added

        frame0 = Frame(self)
        frame0.grid(row=0, column=0)

        label1 = Label(frame0, textvariable=self.txt, width=20, height=5) # changed to use StringVar
        label1.grid(row=0, column=0)

        frame1 = Frame(self)
        frame1.grid(row=1, column=0)

        button1 = Button(frame1, text='Click', width=20, height=5, command=change)
        button1.grid(row=0, column=1)

app = HST()
app.txt.set('Hi') # added to replace original line txt = 'Hi'
app.mainloop()



...