У меня есть класс мэйнфреймов, а затем класс inforow, который заполняет информацию о кадре построчно, но StringVar и Intvar, похоже, не работают. Они устанавливаются, как показано на распечатке, но кнопка не отражает значение, на которое они устанавливаются. Я сделал более простую версию, которая подчеркивает проблему в этих двух файлах.
Я использую 'Python 2.7.12 (v2.7.12: d33e0cf91556, 27 июня 2016 г., 15:19:22) [MSC v.1500 32 бит (Intel)] на win32'
Когда я запускаю mainframe.py, все кнопки-флажки пусты, но я ожидаю, что они будут сочетанием set и unset.
mainframe.py
from Tkinter import *
import ttk
import inforow
testinfo = {'ITEM 1': {'one':1, 'two':0, 'three':1}
, 'ITEM 2': {'one':0, 'two':1, 'three':0}}
class MainFrame(Frame):
def __init__(self, parent=None, **options):
Frame.__init__(self, parent, **options)
self.pack(expand=YES, fill=BOTH)
self.addHeader()
self.addInfo(testinfo)
def addHeader(self):
Label(self, text="Item").grid(row=0,column=0)
Label(self, text="one").grid(row=0,column=1)
Label(self, text="two").grid(row=0,column=2)
Label(self, text="three").grid(row=0,column=3)
def addInfo(self, info):
row = 1
for item in info:
inforow.InfoRow(self, row, item, info[item])
row += 1
if __name__ == "__main__":
root = Tk()
MainFrame(root)
root.mainloop()
и inforow.py
from Tkinter import *
import ttk
class InfoRow():
def __init__(self, root, row, item, values):
self.chkUsedVar1 = IntVar()
self.chkUsedVar1.set(values["one"])
self.chkUsedVar2 = IntVar()
self.chkUsedVar2.set(values["two"])
self.chkUsedVar3 = IntVar()
self.chkUsedVar3.set(values["three"])
self.skillLabel = Label(root, width=10, text=item, anchor="w")
self.skillLabel.grid(row=row,column=0,sticky=W)
self.usedChkButton1 = Checkbutton(root, text='Used1', variable=self.chkUsedVar1)
self.usedChkButton1.grid(row=row,column=1)
self.usedChkButton2 = Checkbutton(root, text='Used2', variable=self.chkUsedVar2)
self.usedChkButton2.grid(row=row,column=2)
self.usedChkButton3 = Checkbutton(root, text='Used3', variable=self.chkUsedVar3)
self.usedChkButton3.grid(row=row,column=3)
print 'Row ' + item
print self.chkUsedVar1.get()
print self.chkUsedVar2.get()
print self.chkUsedVar3.get()
print