当用户按下 <enter> 或单击计算按钮而不使用两个单独的 def 函数时,如何让 Python3 计算两个数字?
Posted
技术标签:
【中文标题】当用户按下 <enter> 或单击计算按钮而不使用两个单独的 def 函数时,如何让 Python3 计算两个数字?【英文标题】:How can I get Python3 to calculate two numbers when the user presses <enter> or clicks the calculate button without using two separate def functions? 【发布时间】:2021-02-16 03:07:39 【问题描述】:我已经搜索了几个小时,但找不到简单的解释。如果我尝试只使用一个功能,我可以让按钮工作,但是键会给我一条错误消息:如果我让键工作,那么按钮会给我一条错误消息:.这似乎很愚蠢,必须有一种简单的方法来让键和按钮都访问相同的功能而不会导致参数错误。这是我现在的工作代码,不幸的是它使用两个计算函数来避免参数错误消息。感谢您的帮助。
"""
Description: This is a program creates a simple GUI for a user to add 2 numbers
Author: Paul Heffernan
Date: Feb 10, 2021
"""
# Import the tkinter GUI and call tkinter tk
import tkinter as tk
from tkinter import *
# This function adds two numbers together when <enter> is pressed in entry2
def addNumbersEntry(self, *args):
result=int(e1.get())+int(e2.get())
myText.set(result)
# This function adds two numbers together when the calculate button is clicked
def addNumbersBtn():
result=int(e1.get())+int(e2.get())
myText.set(result)
# This funciton moves the cursor from entry1 to entry2 when <enter> is pressed
def go_to_entry2(event):
e2.focus_set() # focus_set() switches the focus to the new widge
# create a window and call it window, then give it a title and preset size
window = tk.Tk()
window.title('The Two Number Calculator')
window.minsize(width=400, height=300)
window.resizable(width=True, height=True)
# Create a special GUI StringVar to hold info for a widget - a simple String will not work
myText=StringVar()
myText.set('Nothing Yet')
# Create labels and two entry widgets for user input
lbl1 = Label(master=window, text="Number 1:")
e1 = Entry(master=window)
e1.bind('<Return>', go_to_entry2)
lbl2 = Label(master=window, text="Number 2:")
e2 = Entry(master=window)
e2.bind('<Return>', addNumbersEntry)
lbl3 = Label(master=window, text="Result:")
result = Label(master=window, text="", textvariable=myText)
b = Button(master=window, text="Calculate", command=addNumbersBtn)
# add the label and entry to the window
lbl1.pack()
e1.pack()
lbl2.pack()
e2.pack()
lbl3.pack()
result.pack()
b.pack()
# Run the application
window.mainloop()
【问题讨论】:
请检查您是否向addNumbersEntry()
提供了正确的参数,因为我不确定为什么会在那里传递self
。
【参考方案1】:
您可以对按钮的command
选项和.bind()
回调使用相同的功能:
def addNumbers(*args):
result=int(e1.get())+int(e2.get())
myText.set(result)
...
e2.bind('<Return>', addNumbers)
...
b = Button(master=window, text="Calculate", command=addNumbers)
...
【讨论】:
效果很好,感谢您的帮助。现在请注意,我必须弄清楚它为什么起作用。适用于按钮的 def addNumbers() 与适用于按钮和def addNumber(*args)
表示addNumber()
函数接受任意数量的参数。以上是关于当用户按下 <enter> 或单击计算按钮而不使用两个单独的 def 函数时,如何让 Python3 计算两个数字?的主要内容,如果未能解决你的问题,请参考以下文章
在 Bootstrap 模式窗口中单击 Enter 并点击提交按钮时提交表单数据
当根据文本框的焦点按下 Enter 键时,如何触发 Button Click 事件?