2012-10-28 102 views
1

這使我難住了一個多星期。正如標題所問,我怎樣才能獲得TK按鈕命令來接受帶有變量的參數?我怎樣才能得到TK按鈕命令帶一個變量參數(Python)

這裏是我使用的確切代碼:

i=0 

# Make a Staff list button 
staffButton = Button(masterFrame, 
         text='Staff List', 
         width=20, 
         justify=LEFT, 
         #command=lambda:self.openTabHere(isLeft,STAFF_LIST_TAB)) 
         command=lambda:self.openTabHere(isLeft,i)) 
staffButton.grid(column=0, row=1) 

# Make a course list button 
courseButton = Button(masterFrame, 
         text='Course List', 
         width=20, 
         justify=LEFT, 
         #command=lambda:self.openTabHere(isLeft,COURSE_LIST_TAB)) 
         command=lambda:self.openTabHere(isLeft,i)) 
courseButton.grid(column=0, row=0) 

i=1 

需要注意的是,如果我使用評論(硬編碼)命令,它按預期工作。但是,如果我使用代碼而不是註釋了變量i,那麼兩個按鈕最終都會以i = 1的命令結束。

命令是否在運行時獲取變量i?如果是這樣或者出於其他原因,我能做些什麼來完成我想要做的事情?

這是因爲我爲每個工作人員做了類似的事情;一個for循環打算有一個按鈕,打開一個帶有參數中的員工ID的選項卡,作爲無法硬編碼的變量。

提前致謝。

+0

我剛試過,發現這不是解決方案。當我嘗試運行它時,我得到一個無效的語法。 – narutoreplicate

+0

是的,我只注意到它是python而不是tcl,並刪除了我的愚蠢評論。請注意,如果您發佈自包含的程序而不是上述提取,其他人可能會嘗試並找到問題 –

+0

感謝您的提示;主要問題是我不想製作完全代表我的問題的獨立程序。我擔心我會遺漏一些不能傳達潛在問題的細節:S – narutoreplicate

回答

1

您需要的時候給我的值綁定建立小工具:

staffButton = Button(..., command=lambda btn=i:self.openTabHere(isLeft,btn)) 

你可能需要做同樣的事情isLeft,除非這是一個靜態值。

+0

IT WORKS !!!!!!我一週的地獄結束了(有點)。 staffButton = Button(...,command = lambda i = i:self.openTabHere(isLeft,i)) 這是個竅門。跟進問題:正如你所說的,我需要用isLeft來做到這一點,但是合適的語法是什麼? – narutoreplicate

+0

@narutoreplicate:語法看起來像'lambda A = isLeft,B = i:self.openTabHere(A,B)'注意模式?把lambda看作一個沒有名字的函數。 'lambda'後面的部分是參數列表和它們的默認值,就好像你已經完成了'def some_func(A =「abc」,B =「123」)'。 –

+0

非常有趣的東西。非常感謝您的幫助! – narutoreplicate

相關問題