2014-03-29 30 views
0

我想創建一列按鈕,當它們被按下時,下一行顯示的網格彈出另外兩個按鈕。tkinter:按下按鈕以獲得自己的網格

for i in tlist: 
    opl.append(Tk.Button(self.frame, width = 12 , text=i[3],command = lambda:self.pressedop(i[2], a))) 
    opl[a].grid(row=a, column=0, columnspan=2) 
    a = a + 1 

,成功地創建按鈕的一列,用text(i[3])正確顯示,但是當按下按鈕,i[2]將是最後一個按鈕的信息,並且將是最後一個按鈕的排+1。

有沒有一種方法可以將i[2]和它自己的grid_info向下?

回答

1

我不明白你的問題,但你可以使用widget.grid_forget()從幾何管理器中刪除一個小部件。如果您希望它在不同的行中,只需使用新的行和列的widget.grid()。一個簡單的例子

try: 
    import Tkinter as tk  ## Python 2.x 
except ImportError: 
    import tkinter as tk  ## Python 3.x 

from functools import partial 

opl = [] 
top = tk.Tk() 

def move_it(num): 
    for ctr in range(num, 5): 
     opl[ctr].grid_forget() 
     opl[ctr].grid(row=6, column=ctr) 

for but_num in range(5): 
    opl.append(tk.Button(top, width = 12 , text=str(but_num), 
       command = partial(move_it, but_num))) 
    opl[-1].grid(row=but_num, column=0, columnspan=2) 

top.mainloop() 
+0

我關心的是如何'拉姆達:self.pressedop(A,B)'可以存儲自己的信息,而不是僅僅顯示了''和'B'的最後分配,部分不知何故凍結變量,因此做了工作。無論如何,[link](http://i.imgur.com/6RjgRMG.png)是結果。 – user1690975

+0

Guido想要在Python3.X中刪除lambda,reduce(),filter()和map()構造,但由於轉換,向後兼容性以及許多許多意見,因此提出了更好的替換方案。我發現很多人都與lambda語法混淆,所以使用partial,因爲它是直接使用。 – user2133443