Ткинтер вызывает две функции - PullRequest
3 голосов
/ 30 апреля 2011

Можно ли сделать так, чтобы кнопка Tkinter вызывала две функции?

что-то вроде этого может быть?:

from Tkinter import *

admin = Tk()
def o():
    print '1'

def t():
    print '2'
button = Button(admin, text='Press', command=o, command=t)
button.pack()

Ответы [ 3 ]

9 голосов
/ 30 апреля 2011

Создайте новую функцию, которая вызывает оба:

def o_and_t():
    o()
    t()
button = Button(admin, text='Press', command=o_and_t)

В качестве альтернативы, вы можете использовать эту забавную маленькую функцию:

def sequence(*functions):
    def func(*args, **kwargs):
        return_value = None
        for function in functions:
            return_value = function(*args, **kwargs)
        return return_value
    return func

Затем вы можете использовать ее следующим образом:

button = Button(admin, text='Press', command=sequence(o, t))
1 голос
/ 30 апреля 2011

Синтаксис, который вы пытаетесь использовать, к сожалению, не существует. Что вам нужно сделать, это создать функцию-обертку, которая запускает обе ваши функции. Ленивое решение было бы что-то вроде:

def multifunction(*args):
    for function in args:
        function(s)

cb = lambda: multifunction(o, t)
button = Button(admin, text='Press', command=cb)
0 голосов
/ 07 июля 2014

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

button = Button(admin, text='Press', command=o)

И затем добавил еще одну функцию, используя .configure():

button.configure(command=t)

Если добавить к вашему сценарию, это будет выглядеть так:

from Tkinter import *

admin = Tk()
def o():
    print '1'

def t():
    print '2'

button = Button(admin, text='Press', command=o)
button.configure(command=t)
button.pack()

Это может запускать несколько функций, а также функцию и admin.destroy или любую другую команду без использования глобальнойпеременная или необходимость что-либо переопределять

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