2016-04-09 11 views
1

私はTkinterを学び、2つの質問があります。Tkinter - チェックボックスをソートしてクリックすると印刷する

1 [第一1は、コメント欄に答え] - なぜ、辞書内の項目を正しい順序で印刷されていないのですか? ボタンから「グリッド」部品を削除すると、注文されていないことがわかります。

2 - なぜボタンが表示されないのですか?私はチェックボックスのすぐ下にボタンを作って、クリックされたチェックボックスごとに "1"を表示したい。

This linkを参照してください。

from Tkinter import * 

master = Tk() 

def read(): 
    print dict[mini].get() 

dict = {"first": 0, "second": 0, "third": 0} 


for mini in dict: 
    dict[mini] = Variable() 
    l = Checkbutton(master, text=mini, variable=dict[mini]) 
    l.grid(sticky=W, pady=4) 
    l.pack() 

Button(master, text='Show', command=read).grid(row=len(dict) + 1, sticky=W, pady=4) 

master.mainloop() 

編集:スペル

+1

辞書は順序を保持しません。 ['collections.OrderedDict'](https://docs.python.org/2/library/collections.html#collections.OrderedDict)を見てください。 – zondo

+0

それを知らなかった、助けてくれてありがとう。しかし、私はそれを動作させるように見えませんでした。私はここで何が間違っていたのですか? http://pastebin.com/t7yMrCwu – firko

+1

辞書を渡すと、辞書は順序付けされず、 'OrderedDict'は元の注文が何であったかを知りません。 'OrderedDict([( 'first'、0)、( 'second'、0)])'を使うべきです。 – zondo

答えて

0

ボタンは表示されませんpackの文でプログラムがエラー出ているため

以下は私のコードです。 pack()を削除すると、ボタンが表示されます。 gridpackを同じコンテナに混ぜることはできません。 (コメントでCurly Joeが言ったことから)。

my_dictで宣言されたTkinter変数は初期化も割り当てもされていないため使用できません。 Variable()の辞書は決して変更されません。文字であると数あるわかりにくいことができるよう

from Tkinter import * 
from collections import OrderedDict 

master = Tk() 

def read(): 
    try: 
     print my_dict[mini] 
    except KeyError: 
     pass 

my_dict = OrderedDict() 
my_dict["first"] = 0 
my_dict["second"] = 0 
my_dict["third"] = 0 


for mini in my_dict.keys(): 
    my_dict[mini] = Variable() 
    chkbtn = Checkbutton(master, text=mini, variable=my_dict[mini]) 
    chkbtn.grid(sticky=W, pady=4) 

Button(master, text='Show', command=read).grid(row=len(my_dict) + 1, sticky=W, pady=4) 

master.mainloop() 

最後に、単一の文字変数名としてil、またはoを使用しないでください。 variablesまたはmethodの名前にはbuiltinsという名前を使用しないでください。

関連する問題