2012-11-10 99 views
1

如何建立一個對話框,從父窗口中取消焦點並強制用戶輸入?除非用戶提供輸入或按下取消按鈕,否則父窗口將無法訪問。所以這是一個消息框,但有一個輸入字段。我發現頂級方法來創建一個頂級窗口,但我找不到方法來阻止用戶訪問父窗口。謝謝阻止用戶改變焦點(Tkinter)

回答

1

我不是很積極,但是看起來好像你從TopLevel繼承了一個新類,但是把它附加到父母身上,然後打電話self.transient(parent)你應該有一些東西接近你想要的東西。我假設它也會阻止輸入到父窗口。

主要的技巧是在構造函數中完成的;首先,使用瞬態 將此窗口與父窗口(通常是啓動對話框的應用程序 窗口)相關聯。該對話框不會在窗口管理器中顯示爲 作爲圖標(例如,它不會出現在Windows下的任務欄 中),並且如果您將父窗口圖標化,則 對話框也將被隱藏

退房this page for more details

+0

這似乎是一個解決方案。謝謝! – Andrew

+0

@Andrew:如果你認爲值得接受,那麼也習慣於對你接受的答案投票。 – martineau

+0

@馬蒂諾他馬上就做了,其他人也冷落了。或者我猜他收回了他的upvote。丟失2代表,如果這是任何跡象。無論哪種方式,其他答案都更好。不知道自從礦山已經接受之後是否應該鞏固這兩者。 – TankorSmash

5

使該窗口短暫不整的解決方案。一個強調焦點的窗口被稱爲「模態」窗口。關鍵是「grab_set()」方法。您可以使用強制應用程序焦點的模式窗口,或者強制整個窗口系統的焦點。

你可以找到更多,當你谷歌的「Tkinter」結合「模態」。一擊:http://tkinter.unpythonic.net/wiki/ModalWindow

+0

似乎更完整的解決方案。 +1 – TankorSmash

+0

在pythonware文檔的[Chapter 10. Dialog Windows](http://www.pythonware.com/library/tkinter/introduction/dialog-windows.htm)開頭附近,有一些關於'grab_set( )'方法。還有更多有用的信息,包括創建自己的對話框時可以繼承的對話支持類「Dialog」。 – martineau