Кнопка Tkinter не обновляется при изменении переменной - PullRequest
0 голосов
/ 18 января 2020

У меня есть tkinter GUI, над которым я работаю в Python 3.8 на моем Macbook. Я столкнулся с проблемой, когда изменение переменной, связанной с кнопкой, не меняет внешний вид самой кнопки. Я бы хотел, чтобы эта кнопка отображалась как проверенная, если я установлю для IntVar (), связанного с ним, значение 1, и из всего, что я прочитал, это должно происходить.

Вот несколько чрезвычайно упрощенных кодов, показывающих проблема:

import tkinter as tk

class Window():
    def __init__(self, master):
        var = tk.IntVar()
        checkbutton = tk.Checkbutton(master, variable=var)
        checkbutton.pack()
        var.set(1)

root = tk.Tk()
Window(root)
root.mainloop()

Когда я запускаю скрипт, кнопка проверки не проверяется. Я все еще могу проверить кнопку, нажав на нее, хотя. Это известная ошибка или я что-то упустил?

1 Ответ

0 голосов
/ 18 января 2020

Решено: проблема, как указал jasonharper, была сборкой мусора. Переменная tkinter ни для чего не использовалась, а просто сохранялась как локальная переменная, поэтому она была выброшена и не могла ссылаться на нее кнопкой галочки. Сохранение IntVar где-то, что застряло вокруг, решило проблему. Одним из решений было сохранение переменной в атрибуте var самой кнопки:

import tkinter as tk

class Window():
    def __init__(self, master):
        var = tk.IntVar()
        checkbutton = tk.Checkbutton(master, variable=var)
        checkbutton.pack()
        var.set(1)
        checkbutton.var = var

root = tk.Tk()
Window(root)
root.mainloop()
...