2011-07-17 38 views
0

規格:
Python2.7.1
的Tkinter(Tk的版本8.5)
Windows7的
IDLE 2.7.1Checkbuttons與多個Tkinter的視窗

我編碼一個程序, '產卵' 兩個窗口,退出兩者都銷燬一個,然後去除其他的(然後進入主循環)。
這種安排干擾了剩餘窗口上的Checkbutton。

如:

temp = Tk() 
temp.withdraw() 

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

root.mainloop() 

(這似乎是不尋常的,但它設置了這種方式,使「臨時」窗口會顯示出現的問題,根窗口的建設過程中)。

然而, 似乎只要一個程序處理兩個Tkinter窗口,一個Checkbutton(在根中)的功能就會退出窗口。

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

Toggle.get()應該返回1,如果Checkbutton被勾選,否則爲0。
然而,由於添加新的窗口,Toggle.get總是返回0

(我已經試過重新格式化代碼{這帶來了它自己的怪誤差修改},
重命名變量等
的Checkbutton沒有工作得很好‘臨時’窗口。

的‘臨時’窗口前銷燬Checkbutton是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() 

出於某種原因,
的Checkbutton總是返回0,檢查時也是如此。
我懷疑這是Tkinter的一個多線程問題。

這裏有什麼我能做的嗎?
(實際編碼很大,我不急於將它切換到另一個GUI模塊) :

非常感謝!

(我纔開始編程今年開始。
請原諒我,如果我做了一些可怕的錯誤noobish!)

回答

1

Tkinter的不是設計有兩個根窗口。我很驚訝你的代碼工作。這與多線程無關--Tkinter是單線程的,你似乎沒有創建任何新線程(儘管如果你是,這可能會導致問題)/

您需要創建一個帶有單個主循環的單根窗口。如果您需要另一個窗口,請創建一個Toplevel窗口 - 這正是該窗口小部件的用途。

+0

我得到的感覺是使用Tkinter的多窗口是'不愉快的'。 但所有其他小工具完美地工作, 它只是一個該死的Checkbutton。 對於它的改變似乎是一個巨大的恥辱。 :( –

+0

呵呵,整合Toplevel其實並沒有太大的變化 謝謝! –