Tkinter Checkbutton не работает - PullRequest
0 голосов
/ 10 мая 2018

Я знаю, что это покажется глупым вопросом, но я прочитал все похожие / похожие вопросы, которые мог найти, и я почти уверен, что у меня возникла другая проблема. В конце этого вопроса приведен список похожих проблем, которых я избежал.

Я пытаюсь использовать кнопку Tkinter Checkbutton. Я использовал пример кода из документации ( здесь ) почти дословно.

from tkinter import Tk, Checkbutton, IntVar
class MyGUI:
    def __init__(self, window):
        self.var = IntVar()
        self.c = Checkbutton(window, 
                             text="Enable Tab",
                             variable=self.var,
                             command=self.cb)
        self.c.pack()

    def cb(self):
        print("self.var is", self.var.get())

root = Tk()
gui = MyGUI(root)
root.mainloop()
root.destroy()

Единственное, что я изменил, - это убрал аргумент event из метода cb, потому что, насколько я мог судить, он ни для чего не использовался, а кнопка проверки не пропускает никаких event до cb.

Моя проблема в том, что переменная, хранящая значение кнопки-флажка, всегда читает 0, даже если кнопка-флажок проверена: See behaviour here

Я не знаю, что я делаю неправильно. Я знаю, что избежал следующих ловушек:

Кроме того, когда я запускаю код из вопроса с аналогичной проблемой , я получаю такое же поведение - флажок всегда возвращает False / 0 - даже если этот вопрос помечен как решенный.

Я использую Anaconda python со следующими версиями:

Python 3.5.4 |Anaconda custom (64-bit)| (default, Nov  8 2017, 14:34:30) 
[MSC v.1900 64 bit (AMD64)]
IPython 6.2.1 -- An enhanced Interactive Python.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Ваш код работает на меня.

Может быть, попытаться импортировать все из Tkinter * и удалить последнюю строку. Но я думаю, что ваша проблема - ошибка анаконды.

from tkinter import *
class MyGUI:
    def __init__(self, window):
        self.var = IntVar()
        self.c = Checkbutton(window, 
                             text="Enable Tab",
                             variable=self.var,
                             command=self.cb)
        self.c.pack()

    def cb(self):
        print("self.var is", self.var.get())

if __name__ == "__main__":
    root = Tk()
    gui = MyGUI(root)
    root.mainloop()
0 голосов
/ 10 мая 2018

Если у кого-то возникла такая же проблема и ему нужно быстрое решение, вот мое хакерское решение:

from tkinter import Tk, Checkbutton, IntVar
class MyGUI:
    def __init__(self, window):
        self.var = IntVar()
        self.c = Checkbutton(
            window, text="Enable Tab",
            command=lambda:self.toggle(self.var))
        self.c.pack()

    def toggle(self, var):
        var.set(not var.get())

root = Tk()
gui = MyGUI(root)
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...