1

root.frame1 にチェックボタンのセットがあり、選択したものをルートのサブフレームで使用してオプションメニューを作成したいと考えています。私が取ったアプローチは次のとおりです。

import Tkinter as Tk
root = Tk.Tk()
frame1 = Tk.Frame(root)
variables = dict()
s = {'WZ':'1','ZB':'2','RS':'3','CC':'4','CL':'5'}
for k,v in s.iteritems():
     variables[k]= Tk.IntVar()
     cb = Tk.Checkbutton(frame1, text=v,onvalue=v, offvalue=0, variable=variables[k], anchor=W)
     cb.pack(side='top',fill='x')

frame1.pack()

そして、いくつかのチェックボタンを選択すると、変数ディクショナリの値はまだ 0 です。

for k,v in variables.iteritems():
      print k,' ',v.get()

これは出力します:

'WZ' 0
'ZB' 0
....

辞書の代わりにタプルのリスト、つまり変数 =[('WZ',),...] を使用しようとしましたが、それでも値は変わりません。私のコードの何が問題なのか知っていますか? 私にお知らせください。ありがとうアリ

4

1 に答える 1

2

あなたのコードは私のために働きます。ただし、実行可能なコードを使用すると役立ちます。これはうまくいきますか?

import Tkinter as tk

class App(object):
    def __init__(self, master, **kwargs):
        frame = tk.Frame(master)
        self.variables = {}
        s = {'WZ':1,'ZB':2,'RS':3,'CC':4,'CL':5}
        for k, v in s.iteritems():
             self.variables[k] = tk.IntVar()
             cb = tk.Checkbutton(
                 frame, text=k, onvalue=v, offvalue=0,
                 variable=self.variables[k],
                 command=self.oncheck(k),
                 anchor='w')
             cb.pack(side='top',fill='x')
        frame.pack()
    def oncheck(self, key):
        def _oncheck():
            print('{l} => {v}'.format(l=key, v=self.variables[key].get()))
        return _oncheck

root = tk.Tk()
app = App(root)
root.mainloop()
于 2013-05-30T22:14:00.050 に答える