Определите, какой виджет запускает функцию обратного вызова в команде - PullRequest
0 голосов
/ 29 сентября 2019

Я пишу графический интерфейс в Python, используя tkinter.Я назначил ту же функцию обратного вызова для аргумента «команда» в 3 кнопки.Назначение этих кнопок - указать каталог в зависимости от имени виджета.Есть ли способ, которым я могу сказать, какой виджет вызвал функцию обратного вызова, и назначить каталог в обратном вызове соответственно?

(конечно, я могу создавать различные функции обратного вызова и назначать каждому отдельному виджету, но я хочу принятьгладкий подход.)

Спасибо заранее!

1 Ответ

1 голос
/ 29 сентября 2019

Бесстыдно скопировано с http://effbot.org/zone/tkinter-callbacks.htm Вы можете попробовать что-то вроде:

def callback(number):
    print "button", number

Button(text="one",   command=lambda: callback(1))
Button(text="two",   command=lambda: callback(2))
Button(text="three", command=lambda: callback(3))

Если вы хотите, чтобы экземпляр Button был аргументом обратного вызова, вы можете сделать что-то вроде:

import Tkinter
class ButtonBis(Tkinter.Button):
    def __init__(self, master=None, cnf={}, **kw):
        Tkinter.Button.__init__(self, master, cnf, command =self.callback, **kw)
    def callback(self):
        #Or whatever you want to do with self
        print "clicked!", self.cget('text')

b = ButtonBis(text="one")
b.pack()

b = ButtonBis(text="two")
b.pack()

b = ButtonBis(text="three")
b.pack()

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