2013-07-23 108 views
0

我現在已經創建了相同的用戶界面,最初使用GUI構建器爲tcl。然而,就我如何構造我的界面和小部件之間的間距而言,它受到了限制。現在,我已經創建了我的界面,我正在爲特定的窗口小部件創建一個過程塊。例如,我想退出按鈕退出程序。鏈接過程到按鈕

要做到這一點,我創建了以下過程:

proc btnQuit args { 
exit 
} 

這不會導致語法或運行時錯誤然而,當按下按鈕時,程序不會退出。這是最簡單的情況,因爲還有其他更復雜的命令,因此-command標誌不適用於所有情況。

想法?

下面是我的整個代碼。這只是提出了用戶界面。

#Includes the necessary packages 
package require BWidget 
package require Tk 

namespace eval Main_Menu {} 

#DO NOT MODIFY!! Graphical User Interface Code DO NOT MODIFY!! 

#Limit the size of window 
wm maxsize . 475 180 ;#x-500, y-210 
wm minsize . 475 180 ;#x-500, y-210 

#[Device name] Test Frame w/ associated check boxes 
labelframe .lblfrmSelection  -text "Testable Devices" -padx 1 -relief groove -height 175 -width 200 
button .btnDualUTA    -text "Dual UTA" -padx 5 -anchor "center" -justify "center" -padx 3 
button .btnTProbe    -text "T-Probe" -padx 5 -anchor "center" -justify "center" -padx 7 
button .btnOctal    -text "Octal" -padx 5 -anchor "center" -justify "center" -padx 14 
button .btnUniversal   -text "Universal" -padx 5 -anchor "center" -justify "center" 
button .btnQuit     -text "Exit" -padx 5 -anchor "center" -justify "center" -padx 18 

#Setup second frame with image label 
labelframe .lblfrmHWSetup -text "Hardware Setup" -padx 1 -relief groove -height 200 -width 175 
image create photo   glcomm.gif 
label .lblSetup    -text "Image goes here" 

#*************** Render User Environment ****************** 
#Create Device Test Interface with check boxes in frame. 
place .lblfrmSelection -anchor nw -x 5 -y 1 -width 165 -height 175 
place .btnDualUTA  -in .lblfrmSelection -x 40 -y 15 -anchor "w" 
place .btnTProbe  -in .lblfrmSelection -x 40 -y 46 -anchor "w" 
place .btnOctal   -in .lblfrmSelection -x 40 -y 76 -anchor "w" 
place .btnUniversal  -in .lblfrmSelection -x 40 -y 106 -anchor "w" 
place .btnQuit   -in .lblfrmSelection -x 40 -y 136 -anchor "w" 

#Create label frame "Hardware Setup" 
place .lblfrmHWSetup -anchor nw -x 170 -y 1 -height 175 -width 300 
place .lblSetup   -in .lblfrmHWSetup -x 171 -y 2 

# MODIFY BELOW THIS LINE!! MODIFY BELOW THIS LINE!! 

proc btnQuit args { 
exit 
} 

回答

0

您還沒有表現出怎樣的創建按鈕,但-command選項你需要什麼

$ tclsh <<'END' 
package req Tk 
proc btnQuit args {exit} 
button .b -text Quit -command btnQuit 
pack .b 
END 

如果已創建您的按鈕,你可以用-command配置它選項

button .b -text Quit 
.b configure -command btnQuit 

需要注意的是日在全局名稱空間中查找「btnQuit」進程。如果您使用命名空間,則必須完全限定命令名稱。當您單擊按鈕(無效命令名「btnQuit」)

namespace eval MySpace { 
    proc btnQuit args {exit} 
} 
button .b -text Quit -command btnQuit 

在這種情況下,這將拋出一個錯誤,你需要

button .b -text Quit -command MySpace::btnQuit 

如果需要將參數傳遞給btnQuit PROC,你會做這樣的事情

button .b -text Quit -command [list btnQuit $local_var1 $local_var2] 

button .b -text Quit -command {btnQuit $global_var1 $global_var2} 

的不同引用機制導致在不同的時間被取代的變量:

  • 創建按鈕,當第一;
  • 第二次點擊按鈕時。
+0

我已經提供了代碼,這是我的用戶界面。你在全球命名空間中意味着什麼?我實際上並沒有理解命名空間是什麼,即使我已經在我的代碼中使用< - 我從GUI構建器創建的代碼中複製它。 – ButtahNBred

+0

看起來像所有你需要的是'.btnQuit configure -command btnQuit'後你的btnQuit proc –

+0

它似乎沒有做任何事情。 proc btnQuit {.btnQuit configure -command btnQuit} 該程序不會退出。我也嘗試從最後刪除「btnQuit」。 – ButtahNBred