2013-10-14 39 views
0

我有一個名爲.dsm的tcl tk主窗口。這個主窗口有兩個筆記本標籤f1和f2。當用戶點擊第二個選項卡上的「運行」按鈕時,我想激活第一個選項卡並要求用戶在繼續之前驗證輸入。我的問題是,當消息框要求用戶檢查輸入時彈出,.dsm窗口被最小化。我如何防止這種情況,以便用戶可以看到消息框和主窗口?我試圖「提高」,但隨後在MessageBox是自敗的視線......如何使tk_messageBox不會最小化主窗口

# activate the first notebook tab "f1" 
.dsm.nb select .dsm.nb.f1 
# Ask the user 
set answer [tk_messageBox \ 
     -message "Are these the setting you want to use for the batch run?" \ 
     -type okcancel] 
+0

這聽起來很奇怪,它不會發生在我身上。你在哪個平臺上?你使用的是什麼版本的Tk? (你確定它不是一個綁定在其他地方,最小化''或什麼?) –

+0

我贏得XP。問題可能在於腳本是由FE解算器的嵌入式編譯器運行的。所以我的.dsm實際上是有限元求解器主窗口的一個孩子。這可能是一個問題嗎?有沒有解決方法?沒有其他綁定。 Tcl8.5.9 Tk 8.5.9 – Lumpi

回答

0

您所描述的行爲是不以任何默認配置傳統知識的特點;當您在任何平臺上使用任何標準對話框時,它不會最小化其他窗口。它可能有可能通過跟蹤和濫用事件,如<Focus>,<Leave><Deactivate>等寫一個腳本,但它會是醜陋的和不可移植的。和糟糕的用戶界面設計。 (如果有人試圖這樣做思考,不這樣做!

您可能能夠通過指定-parent選項是你不想消失窗口解決的事情(它將消息框標記爲主要窗口的輔助窗口),但也可以具有視覺效果。否則,你可能需要弄清楚消息框中正在拾取什麼事件處理程序並以意外的方式進行響應。它不應該是任何widget類處理程序 - 它們不會做這種事情 - 但是你可能會在你之前進行相當大的搜索。需要特別注意的事情是幾個事件處理程序之間的交互,其中一些事件處理程序在不同的綁定標記級別定義。 (您可能以前不想定義除Widget和包含頂級之外的任何級別的行爲;編寫真正通用的控制器腳本非常困難,而使它們適用於特定的窗口小部件或窗口更簡單得多。)

+0

這不是一個很好的解決IMO的問題,但我不想只說「這不是Tk的錯!」(進入如何打獵的深度可能會變得非常特定於堆棧溢出。) –

+0

-parent選項有訣竅!謝謝 – Lumpi