Python 如何使用Tkinter使用用户输入写入输出?

Python 如何使用Tkinter使用用户输入写入输出?,python,tkinter,Python,Tkinter,我试图创建一个代码来创建一个带有按钮的GUI计算器,并尝试查找Tkinter帮助,但无法获得帮助。如何合并底部注释掉的部分以显示所示数字的值?请随时为我的代码添加建议 编辑:我修复了@abarnert建议的代码,但当我运行代码时,它总是写入无效的操作。我不知道如何解决这个问题。有没有人有更好的办法来修复我的代码?我只需要让手术开始。下面是我编辑的代码 from math import sqrt from tkinter import * window = Tk() window.title("W

我试图创建一个代码来创建一个带有按钮的GUI计算器,并尝试查找Tkinter帮助,但无法获得帮助。如何合并底部注释掉的部分以显示所示数字的值?请随时为我的代码添加建议

编辑:我修复了@abarnert建议的代码,但当我运行代码时,它总是写入无效的操作。我不知道如何解决这个问题。有没有人有更好的办法来修复我的代码?我只需要让手术开始。下面是我编辑的代码

from math import sqrt
from tkinter import *
window = Tk()
window.title("Welcome to Calculator ")
window.configure(background = "white")
Label (window, text = "Calculator", bg = "white") .grid(row = 0, column = 
0, sticky = N)



#click function
def click():
    n = n_textentry.get()
    m = m_textentry.get()
    operation = operation_textentry.get()
    if operation == 1:
        print(n + m)

    elif operation == 2:
        print(n - m)

    elif operation == 3:
        print(n * m)

    elif operation == 4:
        print(n / m)

    elif operation == 5:
        print(n ** m)

    elif operation == 6:
        print(sqrt(n))

    else:
        print("Invalid Operation ")




#to create the box for the first number and store it
Label (window, text = "Enter the first number", bg = "white") .grid(row = 
1, column = 0, sticky = N)
n_textentry = Entry(window, width = 10, bg = "white")
n_textentry.grid(row = 2, column = 0, sticky = N)
Button(window, text = "Submit", width = 6, command=click) .grid(row = 3, 
column = 0, sticky = N)

#to create the box for the second number
Label (window, text = "Enter the second number", bg = "white") .grid(row = 
5, column = 0, sticky = N)
m_textentry = Entry(window, width = 10, bg = "white")
m_textentry.grid(row = 6, column = 0, sticky = N)
Button(window, text = "Submit", width = 6, command=click) .grid(row = 7, 
column = 0, sticky = N)

#to show list of options
Label (window, text = '''               Enter 1 for addition
                    Enter 2 for subtraction
                         Enter 3 for multiplication
              Enter 4 for division
                        Enter 5 for exponentiation

Enter 6 for square root *This will only work for 1st choice*''', bg = 
"white") .grid(row = 9, column = 0, sticky = W)

operation_textentry = Entry(window, width = 10, bg = "white")
operation_textentry.grid(row = 10, column = 0, sticky = N)
Button(window, text = "Submit", width = 6, command=click) .grid(row = 11, 
column = 0, sticky = N)

在GUI程序中,一旦GUI启动并运行,您只能在事件处理程序的回调中运行代码。这就是所谓的,一开始可能需要一段时间才能习惯

例如,当用户单击第一个
Submit
按钮时,它将调用您的函数
click
。在该函数中,您可以执行任何适当的操作

您已使所有三个按钮调用相同的
单击功能。这在这里没有太多意义

事实上,你为什么想要三个独立的按钮?想象一个典型的GUI中的典型表单,有一堆输入字段,然后是一个“提交”按钮,用户在填写完所有字段后单击该按钮。所以,让我们把前两个按钮去掉,最后只剩下一个

现在,在
单击
函数中,您可以“做任何适当的事情”。但是这里什么是合适的呢

您需要做的第一件事是从三个
输入框中获取值。但是您试图将这三个变量都存储在同一个变量中,因此无法访问这三个变量,只能访问最后一个。因此,与其这样做三次:

textentry = Entry(window, width = 10, bg = "white")
…给他们所有不同的名字:

n_entry = Entry(window, width = 10, bg = "white")
# ...
m_entry = Entry(window, width = 10, bg = "white")
# ...
operation_entry = Entry(window, width = 10, bg = "white")
现在,您的
单击
函数可以获得所有三个值:

def click():
    n = n_entry.get()
    m = m_entry.get()
    operation = operation_entry.get()
当然,这些字符串与在命令行应用程序中调用
input()
得到的字符串完全相同。因此,您必须在这里执行相同的操作,对它们调用
int
float
,处理错误,等等

但是,一旦您完成了这项工作,其余的
单击
可以是您现有的注释掉的代码。(除了你必须摆脱那些
break
语句之外,这里没有可以突破的循环。)


但是,您可能希望更改这些
print
调用,以在GUI中显示结果。例如,您可能有一个名为
results\u Label
的空
标签,并将其文本配置为
str(n+m)
,等等。

在GUI程序中,一旦GUI启动并运行,您只能在事件处理程序的回调中运行代码。这就是所谓的,一开始可能需要一段时间才能习惯

例如,当用户单击第一个
Submit
按钮时,它将调用您的函数
click
。在该函数中,您可以执行任何适当的操作

您已使所有三个按钮调用相同的
单击功能。这在这里没有太多意义

事实上,你为什么想要三个独立的按钮?想象一个典型的GUI中的典型表单,有一堆输入字段,然后是一个“提交”按钮,用户在填写完所有字段后单击该按钮。所以,让我们把前两个按钮去掉,最后只剩下一个

现在,在
单击
函数中,您可以“做任何适当的事情”。但是这里什么是合适的呢

您需要做的第一件事是从三个
输入框中获取值。但是您试图将这三个变量都存储在同一个变量中,因此无法访问这三个变量,只能访问最后一个。因此,与其这样做三次:

textentry = Entry(window, width = 10, bg = "white")
…给他们所有不同的名字:

n_entry = Entry(window, width = 10, bg = "white")
# ...
m_entry = Entry(window, width = 10, bg = "white")
# ...
operation_entry = Entry(window, width = 10, bg = "white")
现在,您的
单击
函数可以获得所有三个值:

def click():
    n = n_entry.get()
    m = m_entry.get()
    operation = operation_entry.get()
当然,这些字符串与在命令行应用程序中调用
input()
得到的字符串完全相同。因此,您必须在这里执行相同的操作,对它们调用
int
float
,处理错误,等等

但是,一旦您完成了这项工作,其余的
单击
可以是您现有的注释掉的代码。(除了你必须摆脱那些
break
语句之外,这里没有可以突破的循环。)


但是,您可能希望更改这些
print
调用,以在GUI中显示结果。例如,您可能有一个名为
results\u Label
的空
标签,并将其文本配置为
str(n+m)
,等等。

回答得好,我只想补充一点,我们称GUI的运行方式为“”,而不是大多数初学者一开始就使用的顺序编程。@Novel Nice link;我会把这个添加到答案中,记得下次再看维基百科。(在编写第一个事件驱动的GUI或网络服务器,或者不太常见的frameloop驱动的游戏或音频程序时,用户提出了很多问题,他们在抽象方面没有得到改变。)我应该把空的
标签放在哪里?@MonishShah你是说GUI中的哪里?这实际上是一个图形设计问题,而不是编程问题。但是,考虑到您正在设计的表单类型,我会选择表单右侧或底部的“提交”按钮。不,我的意思是,我将把结果放在哪里工作,因为我很难让结果工作。我创建了一个更好的帖子,在那里它更深入地讨论了我的问题。回答得好,我只想补充一点,我们称GUI的运行方式为“”,而不是大多数初学者从顺序编程开始的方式。@Novel Nice link;我会把这个添加到答案中,记得下次再看维基百科。(在编写第一个事件驱动的GUI或网络服务器,或者不太常见的frameloop驱动的游戏或音频程序时,用户提出了很多问题,他们在抽象方面没有得到改变。)您会在哪里