Привязка одной кнопки к двум событиям с помощью Tkinter - PullRequest
3 голосов
/ 27 марта 2012

Я только начинаю программировать и создаю программу Tic-Tac-Toe. В моей программе есть функция отображения, которая изменяет и проверяет правильность введенного значения, и средство проверки выигрыша. Есть ли способ, которым я могу связать обе эти функции с клавишей ввода?

Что-то вроде:

RowEnt.bind("<Return>", display, checkWin)

Ответы [ 3 ]

11 голосов
/ 17 июля 2012

Ключ передает add="+", когда вы связываете обработчик.Это говорит диспетчеру событий добавить этот обработчик в список обработчиков.Без этого параметра новый обработчик заменяет список обработчиков.

try:
    import Tkinter as tkinter # for Python 2
except ImportError:
    import tkinter # for Python 3

def on_click_1(e):
    print("First handler fired")

def on_click_2(e):
    print("Second handler fired")

tk = tkinter.Tk()
myButton = tkinter.Button(tk, text="Click Me!")
myButton.pack()

# this first add is not required in this example, but it's good form.
myButton.bind("<Button>", on_click_1, add="+")

# this add IS required for on_click_1 to remain in the handler list
myButton.bind("<Button>", on_click_2, add="+")

tk.mainloop()
6 голосов
/ 27 марта 2012

вы можете вложить обе функции в другую функцию :), например:

def addone(num1):
    num1=int(num1)+1

def subtractone(num1):
    num1=int(num1)-1

def combine():
    addone(1)
    subtractone(1)

, если вы хотите вызвать их обе, вы просто используете combine() в качестве вызываемой вами функции:)

1 голос
/ 20 июля 2012

Здесь только одна функция вызывается как direct результат вызова кнопки (invoke_mybutton), и все, что она делает, генерирует виртуальное событие <<MyButton-Command>>>. Это виртуальное событие может быть названо как угодно, если имя уже не используется Tk. Как только это будет на месте, вы можете связывать и откреплять с <<MyButton-Command>>>, используя опцию add='+' в течение всего дня, и вы получите преимущества связывания с клавиатурой, о чем говорил Брайан Оукли.

try:
    import Tkinter as tkinter # for Python 2
except ImportError:
    import tkinter # for Python 3

def invoke_mybutton():
    tk.eval("event generate " + str(myButton) + " <<MyButton-Command>>")

def command_1(e):
    print("first fired")

def command_2(e):
    print("second fired")

tk = tkinter.Tk()
myButton = tkinter.Button(tk, text="Click Me!", command=invoke_mybutton)
myButton.pack()
myButton.bind("<<MyButton-Command>>", command_1, add="+")
myButton.bind("<<MyButton-Command>>", command_2, add="+")
tk.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...