Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 6, 2016 14:35:48

gleda
Зарегистрирован: 2014-12-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

функция в виджете button библиотеки tkinter

Такой вопрос. Когда прописываю в кнопку вызов функции (command= ) без переменных, все работает. Если прописываю переменные - сначала срабатывает прописанная функция, затем вызываемая, а кнопка перестает работать. Как использовать переменные тогда? Или с button нельзя?
Например:

 def Hello():
    root = Tk()
    button = Button(root, command=callback)
    button.pack()
    root.mainloop()
def callback():
    print("Ok")
Hello()

 def Hello():
    root = Tk()
    button = Button(root, command=callback("Ok"))
    button.pack()
    root.mainloop()
def callback(word):
    print(word)
Hello()

Есть вариант сделать так:
 from tkinter import *
    
def Hello():
    root = Tk()
    button1 = Button(root, command=ok)
    button1.pack()
    button2 = Button(root, command=notok)
    button2.pack()
    root.mainloop()
def ok():
    callback("ok")
def notok():
    callback("not ok")
def callback(word):
    print(word)
Hello()
Но это лишние шаги.

Отредактировано gleda (Окт. 6, 2016 14:39:59)

Офлайн

#2 Окт. 6, 2016 15:31:57

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

функция в виджете button библиотеки tkinter

Можно. Оберните вызов в lambda

 #
def callback(first, second):
    print(first, second)
#
but = Button(root, text="Text", command=lambda: callback(first=1, second=2))

Но!!! Зачастую в правильном коде это не нужно Если использовать bind, то в волшебном event он передает уйму полезного. В том числе и ссылку на виджет, который его вызвал.

Например

 #
def callback(event):
    print(event.widget["text"])
#
but1 = Button(root, text="first")
but1.bind("<Button-1>", callback)
but2 = Button(root, text="second")
but2.bind("<Button-1>", callback)

P.S. Использовать from tkinter import * нельзя никогда.

Офлайн

#3 Окт. 6, 2016 15:46:45

gleda
Зарегистрирован: 2014-12-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

функция в виджете button библиотеки tkinter

Спасибо за ответ!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version