【问题标题】:A calculator using tkinter library使用 tkinter 库的计算器
【发布时间】:2020-04-20 05:21:05
【问题描述】:

我想要一个有 4 个按钮和 2 个条目的计算器。我的问题是什么?我不知道如何解决它不能将序列与str 类型的非整数相乘,也不能将entry * entry 相乘。

我也不知道我的输出在哪里以及如何使用它。

from tkinter import ttk
from tkinter import *
import tkinter as tk

#the environment

calc=tk.Tk()
calc.title("Calculator")

#-------------------------------------
#lables and their data entry
tk.Label(calc,text="enter your first number:").grid(row=0)
tk.Label(calc,text="enter your second number:").grid(row=1)
e1=tk.Entry(calc)
e2=tk.Entry(calc)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
x1=e1.get()
x2=e2.get()
tk.Label(calc,text="your result is:").grid(row=3)

# a free variable for get output,is this really need?
lbl=list()
#---------------------------

#the functions but my entry are entry type
def prod():
    lbl=print(x1*x2)

def div():
    lbl=print(x1/x2)

def sum():
     lbl=print(x1+x2)

def min():
    lbl=print(x1-x2)
#-------------------------------


#buttons and function in them as a command
 btn1=tk.Button(calc,text="*",command=prod()).grid(row=0,column=2)
 btn2=tk.Button(calc,text="/",command=div()).grid(row=1,column=2)
 btn3=tk.Button(calc,text="+",command=sum()).grid(row=2,column=2)
 btn4=tk.Button(calc,text="-",command=min()).grid(row=3,column=2)
#--------------------------------------------------------------------

#The answer which i need it
 print("your answer is:")



 calc.mainloop()

【问题讨论】:

  • 首先你需要修复缩进,这在 Python 中很关键。
  • command=prod() 应该是 command=prod,并且所有其他按钮都类似。
  • 您确定用户输入的数字已转换为整数吗?如果不是,那么根据我对您的程序的检查,它们属于字符串形式;在将检索到的数字相乘之前将它们转换为整数。这应该可以成功。如果您需要帮助,请提供更多详细信息,我可能会提供帮助。
  • @martineau:你的评论有点混乱——你不必使用textvariable 来从Entry 小部件中获取数据。你可以在没有文本变量的情况下做到这一点。
  • @Bryan:我相信你是对的。我只是按照this documentation 所说的去做(参见关于textvariable 选项的部分)。我将删除误导性评论(尽管按照所说的去做)。

标签: python python-3.x tkinter calculator


【解决方案1】:

在 GUI 编程中,您需要在需要时获取小部件的值,而不是在创建它们时。

此外,小部件返回字符串值。如果要对它们进行数学运算,则需要先将它们转换为数字。

如果要在窗口中显示结果,可以使用configure 方法更新标签小部件

例如,您的 prod 定义可能如下所示:

def prod():
    x1 = int(e1.get())
    x2 = int(e2.get())
    result = x1 * x2
    result_label.configure(text=str(result))

然后你需要做另外两件事。首先,您需要为结果创建标签,并将小部件存储在变量中。为此,您必须将小部件的创建与布局分开,因为调用 grid 会导致变量设置为 None

result_label = tk.Label(calc,text="your result is:")
result_label.grid(row=3)

最后,需要为您的按钮提供对该函数的引用。您当前正在做的是调用该函数并将结果分配给command 属性。

您的按钮应如下所示。注意prod 后面没有()

btn1 = tk.Button(calc, text="*", command=prod)
...
btn1.grid(row=0,column=2)

附带说明,我认为对于具有共同父级的所有小部件,将所有小部件创建代码组合在一起,然后将所有对 gridpack 的调用放在一起使代码更易于阅读、更易于维护,并且更容易可视化。

例如:

btn1 = tk.Button(...)
btn2 = tk.Button(...)
btn3 = tk.Button(...)
btn4 = tk.Button(...)

btn1.grid(row=0,column=2)
btn2.grid(row=1,column=2)
btn3.grid(row=2,column=2)
btn4.grid(row=3,column=2)

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2020-03-18
    • 2016-12-09
    • 2013-04-29
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多