首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tkinter库的计算器

使用tkinter库的计算器
EN

Stack Overflow用户
提问于 2020-01-01 04:18:38
回答 1查看 644关注 0票数 1

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

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

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-01 04:59:25

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

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

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

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

代码语言:javascript
复制
def prod():
    x1 = int(e1.get())
    x2 = int(e2.get())
    result = x1 * x2
    result_label.configure(text=str(result))

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

代码语言:javascript
复制
result_label = tk.Label(calc,text="your result is:")
result_label.grid(row=3)

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

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

代码语言:javascript
复制
btn1 = tk.Button(calc, text="*", command=prod)
...
btn1.grid(row=0,column=2)

另外,我认为对于具有公共父级的所有小部件,将所有小部件创建代码分组在一起,然后将所有对gridpack的调用分组在一起,可以使代码更易于阅读、维护和可视化。

例如:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59548168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档