簡體   English   中英

返回特定字符串的按鈕[Tkinter]

[英]Button returning specific string [Tkinter]

我目前有一個Tkinter,它顯示多個名稱作為標簽。

每個標簽的右側都有一個名為“ Foo”的按鈕,點擊后,

它將調用一個函數,該函數需要在單擊的按鈕的左側添加標簽的名稱。

這是我創建按鈕和標簽的方式:

from Tkinter import *
class display():
    def __init__(self):
        self.namelist = ["Mike","Rachael","Mark","Miguel","Peter","Lyn"]
    def showlist(self):
        self.controlframe = Frame()
        self.controlframe.pack()
        self.frame = Frame(self.controlframe,height=1)
        self.frame.pack()
        row = 0
        for x in self.namelist:
            label = Label(self.frame,text="%s "%x,width=17,anchor="w") #limit the name to 17 characters
            fooButton = Button(self.frame,text="Foo")
            label.grid(row=row, column=0, sticky="W")
            fooButton.grid(row=row, column=1)
            row = row + 1
        mainloop()
D = display()
D.showlist()

我該怎么做,例如,如果我單擊Mark旁邊的Foo按鈕,則該按鈕將返回標簽的名稱Mark 其他標簽旁邊的其他Foo按鈕也是如此。

謝謝!

您可以按照以下方法進行操作:

這是代碼:

from Tkinter import *


class display():
    def __init__(self, controlframe):
        self.controlframe = controlframe
        self.namelist = ["Mike", "Rachael", "Mark", "Miguel", "Peter", "Lyn"]

    def callback(self, index):
        print self.namelist[index]

    def showlist(self):
        self.frame = Frame(self.controlframe, height=1)
        self.frame.pack()
        row = 0
        for index, x in enumerate(self.namelist):
            label = Label(self.frame, text="%s " % x, width=17, anchor="w") #limit the name to 17 characters
            fooButton = Button(self.frame, text="Foo", 
                               command=lambda index=index: self.callback(index))
            label.grid(row=row, column=0, sticky="W")
            fooButton.grid(row=row, column=1)
            row = row + 1


tk = Tk()

D = display(tk)
D.showlist()
tk.mainloop()

請注意如何將索引傳遞給lambda,這就是所謂的“ lambda閉包作用域”問題,請參閱Python lambda閉包作用域

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM