当用户按下 <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 addNumbers(*args) 与 def addNumbers(self, *args) 有什么区别。我将不得不做更多的研究。再次感谢。 def addNumber(*args) 表示addNumber() 函数接受任意数量的参数。

以上是关于当用户按下 <enter> 或单击计算按钮而不使用两个单独的 def 函数时,如何让 Python3 计算两个数字?的主要内容,如果未能解决你的问题,请参考以下文章

ActionListener添加到JButton但不起作用

使用 jquery 检测 Enter 键被按下

在 Bootstrap 模式窗口中单击 Enter 并点击提交按钮时提交表单数据

当根据文本框的焦点按下 Enter 键时,如何触发 Button Click 事件?

javascript ReactJS:当用户停止输入时输入fire onChange(或按下Enter键)

javascript ReactJS:当用户停止输入时输入fire onChange(或按下Enter键)