Работаем над способом возврата текста кнопки после нажатия кнопки в tkinter - PullRequest
2 голосов
/ 01 июня 2011

Я пытаюсь создать список кнопок, которые нажимаются с помощью этой лямбда-функции:

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

Кажется, что-то вроде работы, но сразу печатает текст кнопки, то есть пользователь не ждет нажатия кнопки.

Есть идеи, как заставить его реагировать на нажатие кнопки?

class GraphicsInterface:

    def __init__(self):
        self.window = Tk()
        self.window.geometry("720x500")

        clicked=[]
        button1 = Button(self.window, text="Dice 1", width=13)
        button1.place(x=60, y=160)

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

        print(clicked)

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Попытка сделать все это в лямбде - неправильный подход. Это просто слишком запутанно, если не невозможно сделать то, что вы хотите. Вместо этого создайте метод, который выполняет эту работу, и используйте лямбду только для вызова этой функции:

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()
1 голос
/ 01 июня 2011

Один из способов - привязать событие нажатия кнопки к функции, которая добавляет текст в список clicked.Например,

    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"))

Затем можно добавить другие кнопки, которые также вызывают callback, и получить их текст с помощью параметра event.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...