首页 文章

Tkinter GUI计算器条目值

提问于
浏览
0

我用Python构建了一个基本的计算器 . 但后来,我尝试用Tkinter制作一个真正的GUI计算器 . 问题是我不知道如何获取值以及如何返回特定操作 .

基本上我的应用程序是这样的:

  • 3个条目(第一个值,第二个值,结果)

  • 4个按钮(加,减,乘,除) .

我希望我的程序要做的是:当有人在第一个条目中输入一个值而在第二个条目中输入另一个值,并在第三个条目中点击“Subtract”时,将显示减去这些数字的结果 . 我是python的新手,我发现它看起来太复杂了 .

from tkinter import *


def my_increase(a, b):
    return a + b


def my_decrease(a, b):
    return a - b


def my_multiply(a, b):
    return a * b


def my_divide(a, b):
    return a / b


main = Tk()

label_1 = Label(main, text="Calculator", height=5, width=30)
label_1.config(font=("OpenSans", 15))
label_1.pack()
frame_0 = Frame(main)
frame_0.pack()
frame_1 = Frame(main)
frame_1.pack()
frame_2 = Frame(main)
frame_2.pack()

button_1 = Button(frame_1, text="Add", fg="blue", command=my_increase)
button_1.config(font=("Lato", 12))
button_1.pack(side=LEFT)
button_2 = Button(frame_1, text="Subtract", fg="blue", command=my_decrease)
button_2.config(font=("Lato", 12))
button_2.pack(side=RIGHT)
button_3 = Button(frame_2, text="Multiply", fg="blue", command=my_multiply)
button_3.config(font=("Lato", 12))
button_3.pack(side=LEFT)
button_4 = Button(frame_2, text="Divide", fg="blue", command=my_divide)
button_4.config(font=("Lato", 12))
button_4.pack(side=RIGHT)
entry_1 = Entry(frame_0, bd=5)
entry_1.pack(side=TOP)
entry_2 = Entry(frame_0, bd=5)
entry_2.pack(side=TOP)
entry_3 = Entry(frame_0, bd=5)
entry_3.pack(side=TOP)
main.mainloop()

2 回答

  • 1

    这写得很糟糕,所以请使用一些建议并查看 tkinter 上的教程:

    • 仅导入您需要的内容

    • 把所有东西都放在一堂课上 . ( __init__ 应该接受一个Tk对象,创建所有小部件并启动循环,脚本只是初始化你的类对象) .

    你想要什么:

    • 首先使 entry_3 更新能够使用:

    result = DoubleVar()

    entry_3 = Entry(frame_0, bd=5,textvar=result)

    这将是一个类中的 self.result ,因此您可以很好地从任何方法访问它 .

    • 在动作方法中,您现在只需设置此变量,例如添加:

    result.set(a+b)

    self.result 在课堂上 . 这样可以避免全局变量 . 这应该替换 return 语句,你不会在任何地方返回 .

    • 如您所见,您的函数有两个参数 . 按钮按下不发送 . 您可以使用 entry_1.get() 自己读取方法中的输入字段,并且不接受任何参数 . 另一个选择是按下发送它们:

    button_2 = Button(frame_1, text="Subtract", fg="blue", command=lambda: my_decrease(float(entry_1.get()),float(entry_2.get())))

    我会选择前者,并访问该对象的 entry_[1,2] 个字段( self.entry... ) . 祝好运 .

  • 0

    附加到每个按钮的功能不应该需要任何参数 . 在您的示例中,您已使用两个参数a a和b定义了my_increase函数 . 但是通过单击按钮,没有参数传递给函数 . 相反,您可以从文本框中访问值并添加它们 .

    要从文本框中访问值,您可以使用

    entry_1.get()
    

    要在文本框中设置值,您可以使用

    entry_3.insert(0, "test")
    

    这是您的代码,它执行所有必需的操作,如加法,减法, . 等等

    from Tkinter import *
    
    
    def my_increase():
        entry_3.delete(0, END)
        entry_3.insert(0, int(entry_1.get()) + int(entry_2.get()))
    
    
    def my_decrease():
        entry_3.delete(0, END)
        entry_3.insert(0, int(entry_1.get()) - int(entry_2.get()))
    
    
    def my_multiply():
        entry_3.delete(0, END)
        entry_3.insert(0, int(entry_1.get()) * int(entry_2.get()))
    
    
    def my_divide():
        entry_3.delete(0, END)
        entry_3.insert(0, int(entry_1.get()) / int(entry_2.get()))
    
    
    main = Tk()
    
    label_1 = Label(main, text="Calculator", height=5, width=30)
    label_1.config(font=("OpenSans", 15))
    label_1.pack()
    frame_0 = Frame(main)
    frame_0.pack()
    frame_1 = Frame(main)
    frame_1.pack()
    frame_2 = Frame(main)
    frame_2.pack()
    
    button_1 = Button(frame_1, text="Add", fg="blue", command=my_increase)
    button_1.config(font=("Lato", 12))
    button_1.pack(side=LEFT)
    button_2 = Button(frame_1, text="Subtract", fg="blue", command=my_decrease)
    button_2.config(font=("Lato", 12))
    button_2.pack(side=RIGHT)
    button_3 = Button(frame_2, text="Multiply", fg="blue", command=my_multiply)
    button_3.config(font=("Lato", 12))
    button_3.pack(side=LEFT)
    button_4 = Button(frame_2, text="Divide", fg="blue", command=my_divide)
    button_4.config(font=("Lato", 12))
    button_4.pack(side=RIGHT)
    entry_1 = Entry(frame_0, bd=5)
    entry_1.pack(side=TOP)
    entry_2 = Entry(frame_0, bd=5)
    entry_2.pack(side=TOP)
    entry_3 = Entry(frame_0, bd=5)
    entry_3.pack(side=TOP)
    main.mainloop()
    

相关问题