Кнопка не будет установлена ​​на значение переменной - PullRequest
0 голосов
/ 28 мая 2019

Я создал простой графический интерфейс Python Tkinter, и мне не удается заставить Checkbutton инициализировать правильными значениями, оба всегда не проверяются, независимо от того, что я делаю, тогда как две распечатки на дисплее кода:

('dryRunVar', 0)
('useGenreSubFolderVar', 1)

Пробовал все, что мог и с BooleanVar, и не мог заставить его работать

Как ни странно, если я изменил экземпляр CheckButton () на ttk.CheckButton (), тогда обе кнопки будут серымисостояние

Даже изменение вызова значений конфигурации на константы 0 и 1 ничего не меняет, кнопки остаются непроверенными

Также попробуйте немного подправить инстанцию ​​Tk и mainloop, безуспешно

#!/usr/lib/python2.7/
# -*- coding: utf-8 -*-

from Tkinter import *
import conf,ttk

class GUI():

    def __init__(self,window, configuration) :
        self.configuration = configuration
        self.window = window
        self.draw()

    def draw(self) :
        self.root = Frame(self.window,padx=15,pady=15,width=800,height=200)
        self.root.grid(column=0,row=0)        
        self.drawParametersFrame()

    def drawParametersFrame(self) :
        #Parameters frame
        self.parametersFrame = LabelFrame(self.root,text="Sorting Parameters",padx=15,pady=15)
        self.parametersFrame.grid(column=0,row=2,sticky="EW")
        dryRunVar = IntVar()
        dryRunVar.set(self.configuration['dryRun'])
        print("dryRunVar",dryRunVar.get())
        dryRunCheckButton = Checkbutton(self.parametersFrame,text="Dry Run", variable=dryRunVar, onvalue=1, offvalue = 0)
        dryRunCheckButton.grid(column=0,row=0,sticky="W")
        useGenreSubFolderVar = IntVar()
        useGenreSubFolderVar.set(self.configuration['genreSubFolders'])
        print("useGenreSubFolderVar",useGenreSubFolderVar.get())
        useGenreSubFolderCheckButton = Checkbutton(self.parametersFrame,text="Use genre subfolders", variable=useGenreSubFolderVar, onvalue=1, offvalue = 0)
        useGenreSubFolderCheckButton.grid(column=2,row=0,sticky="W")

if __name__ == "__main__":
    configuration = conf.loadConf(r"/home/thomas/code/perso/python/conf.conf")
    window = Tk()
    gui = GUI(window,configuration)
    window.mainloop()

1 Ответ

2 голосов
/ 28 мая 2019

Вместо этого сделайте ваш IntVar атрибутом класса.

def drawParametersFrame(self) :
    ...
    self.dryRunVar = IntVar()
    self.dryRunVar.set(1)
    dryRunCheckButton = Checkbutton(self.parametersFrame,text="Dry Run", variable=self.dryRunVar, onvalue=1, offvalue = 0)
    ...
    self.useGenreSubFolderVar = IntVar()
    self.useGenreSubFolderVar.set(1)
    useGenreSubFolderCheckButton = Checkbutton(self.parametersFrame,text="Use genre subfolders", variable=self.useGenreSubFolderVar, onvalue=1, offvalue = 0)
    ...
...