Working on a way to return the text of a button after the button is clicked in tkinter

后端 未结 2 1518
小蘑菇
小蘑菇 2020-11-30 15:20

I\'m trying to create a list of buttons that are clicked with this lambda function:

button1.config(command=(lambda x: (clicked.append(x)))(button1.cget(\"tex         


        
相关标签:
2条回答
  • 2020-11-30 15:48

    Trying to do all this in a lambda is the wrong approach. It's simply too confusing, if not impossible to do what you want. Instead, create a method that does the work, and use lambda only as a way to call that function:

    from Tkinter import *
    class GraphicsInterface:
    
        def __init__(self):
            self.window = Tk()
            self.window.geometry("720x500")
    
            self.clicked=[]
            button1 = Button(self.window, text="Dice 1", width=13)
            button2 = Button(self.window, text="Dice 2", width=13)
            button1.pack()
            button2.pack()
    
            button1.configure(command=lambda btn=button1: self.OnClick(btn))
            button2.configure(command=lambda btn=button2: self.OnClick(btn))
    
            self.window.mainloop()
    
        def OnClick(self, btn):
            text = btn.cget("text")
            self.clicked.append(text)
            print "clicked:", self.clicked
    
    app = GraphicsInterface()
    
    0 讨论(0)
  • 2020-11-30 16:08

    One way would be to bind the button click event to a function which appends the text to your clicked list. For example,

        self.clicked=[]
    
        self.button1 = Button(self.window, text="Dice 1", width=13)
        self.button1.place(x=60, y=160)
        self.button1.bind("<Button-1>",self.callback)
    
    
    def callback(self,event):
        self.clicked.append(event.widget.cget("text"))
    

    You could then add other buttons that also call callback, and get their text through the event parameter.

    0 讨论(0)
提交回复
热议问题