Найти - Пользователи
Полная версия: функция в виджете button библиотеки tkinter
Начало » Python для новичков » функция в виджете button библиотеки tkinter
1
gleda
Такой вопрос. Когда прописываю в кнопку вызов функции (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()
Но это лишние шаги.
4kpt_IV
Можно. Оберните вызов в 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 * нельзя никогда.
gleda
Спасибо за ответ!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB