2011-07-17 3 views
0

仕様:
Python2.7.1
のTkinter(Tkのバージョン8.5)
のWindows7
IDLE 2.7.1複数のTkinterのWindowsとのCheckbuttons

私は撤回し、 'スポーン' は、2つの窓というプログラムをコーディングしています両方を破壊し、一方を破壊し、他方を脱結合して(メインループに入る)。
この配置は、残りのウィンドウのCheckbuttonを妨害しています。

例:

temp = Tk() 
temp.withdraw() 

root = Tk() 
root.withdraw() 
temp.destroy() 

root.mainloop() 

(それは珍しいようだが、「TEMP」ウィンドウがルートウィンドウの建物の間に、発生した問題が表示されるように、それはこのように設定されます)。

しかし、1つのプログラムが2つのTkinterウィンドウを処理するとすぐに、 Checkbuttonの機能(ルート内)がウィンドウの外に出るようです。チェックボタンがチェックされている場合

def ClickAButton(): 
    print Toggle.get() 
Toggle = IntVar() 
Checkbutton(root, text = "Me is broke", variable = Toggle).pack() 
ClickAButton 

Toggle.get()が新しいウィンドウを追加するため、しかし、それ以外の場合は0
1を返す必要があり、Toggle.getは常に0

(Iを返します一時「チェックボタンはせずに正常に動作します
など、
リネーム変数{これはそれ自身の奇妙なerrosが表示されます}コードを再フォーマットしようとしたVEの 『』ウィンドウ。

『TEMP』ウィンドウが前に破壊されますチェックボタンはeです、割り当てられたVEN詰め、
または 'ルート' でもメインループに入る)

全体の例:!何らかの理由で

temp = Tk() 
temp.withdraw() 
root = Tk() 
root.withdraw() 
if 'certain condition': 
    root.destroy() 
    temp.deiconify() 
    temp.mainloop() 
else: 
    temp.destroy() 
    Toggle = IntVar() 
    Checkbutton(root, text = "Why I only return 0?", variable = Toggle).pack() 
    root.deiconify() 
    root.mainloop() 


チェックボタンは常にチェックしても、0を返します。
Tkinterではマルチスレッドの問題と思われます。

ここで何かできることはありますか?
(実際のコーディングは巨大です。私はそれをすべて別のGUIモジュールに切り替えるつもりはありません) :|

大変感謝しています。

(私は今年のスタートをプログラミング始めた。私はいくつか恐ろしくnoobishミスを犯してしまった場合!
はご容赦ください)

答えて

1

Tkinterには二つのルートウィンドウを持つように設計されていません。あなたのコードはまったく驚いています。これはマルチスレッドとは関係がありません.Tkinterはシングルスレッドで、新しいスレッドを作成していないようです(問題があったとしても問題になる可能性があります)/

単一のメインループを持つ単一ルートウィンドウ。別のウィンドウが必要な場合は、Toplevelウィンドウを作成します。これはそのウィジェットのためのものです。

+0

私は、複数のウィンドウにTkinterを使用することが「不愉快」であると感じていました。 しかし、他のすべてのウィジェットは完全に動作します。 これはただ1つの悪いCheckbuttonです。 そんなに変わるのはずいぶん残念です。 :( –

+0

ああ、Toplevelを統合しても実際にはあまり変化はありません。 ありがとう! –

関連する問題