#python #tkinter
#python #tkinter
Вопрос:
Это моя первая попытка в tkinter. Я использовал этот учебник, приведенный ниже код, где пользователь вводит число и с помощью кнопки генерирует результат в другом окне.
import tkinter as tk
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 400, height = 300)
canvas1.pack()
entry1 = tk.Entry (root)
canvas1.create_window(200, 140, window=entry1)
def getSquareRoot ():
x1 = entry1.get()
label1 = tk.Label(root, text= float(x1)**0.5)
canvas1.create_window(200, 230, window=label1)
button1 = tk.Button(text='Get the Square Root', command=getSquareRoot)
canvas1.create_window(200, 180, window=button1)
root.mainloop()
Как я могу сделать это напрямую, без кнопки? Т. е. Введите число > результат генерируется немедленно?
Ответ №1:
Как насчет использования bind
для этого эффекта, когда вы нажимаете привязанную клавишу, функция вызывается и выполняется.
Вот пример:
import tkinter as tk
root = tk.Tk()
entry1 = tk.Entry(root)
entry1.pack(pady=(20, 0), padx=10)
label1 = tk.Label(root)
def getSquareRoot(event=None):
root.after(1000,getSquareRoot)
x1 = entry1.get()
try:
sqrt = float(x1)**0.5
except:
sqrt = ''
label1.config(text=sqrt)
label1.pack()
button1 = tk.Button(text='Get the Square Root', command=getSquareRoot)
button1.pack(pady=(0, 20))
entry1.bind('<Return>', getSquareRoot)
root.after(5000,getSquareRoot)
root.mainloop()
Если вы нажмете клавишу Ввода в виджете ввода, он сгенерирует для вас вывод, не нажимая никаких кнопок.
Комментарии:
1. очень жаль, я только что понял, что мой пост был v вводящим в заблуждение… моя интерпретация «окна» на самом деле означает
canvas1.create_window()
функцию, просто отредактировал вопрос2. @Jake Я не думаю, что это точный способ использования canvas здесь, так как это приведет к перезаписи меток. Вы все же хотите продолжать его использовать?
3. я думаю, что все в порядке, моя цель — свести к минимуму количество щелчков и нажатий клавиш для получения результата (что-то вроде в Excel с использованием формул, где мне просто нужно изменить ячейку, и связанные ячейки будут обновлены соответствующим образом)
4. Спасибо за правку! Знаете ли вы, возможно ли сгенерировать результаты даже без нажатия клавиши Enter?
5. по сути, снаружи функция запускает ее только один раз, внутри функция будет продолжать запускать ее всякий раз, когда вызывается функция, поэтому она похожа на цикл, она продолжает вызывать себя. Я новичок, поэтому я просто сделал то, что пришло мне в голову первым.
Ответ №2:
Если вы хотите отобразить Entry
содержимое виджета без использования клавиатуры, тогда используйте нажатие клавиши мыши.
entry1.bind('<Double-Button-1>', getSquareRoot)
или
entry1.bind('<Button-3>', getSquareRoot)