Tkinter Calculator Python 3.4.2

时间:2015-07-07 22:22:49

标签: python user-interface python-3.x tkinter calculator

我正在尝试使用tkinter在python 3.4.2中创建一个程序。我希望创建一个GUI计算器。到目前为止,我已经能够编写程序的按钮和布局(界面)。我唯一需要帮助的是按钮执行的操作。例如,我需要一种方法来输入按下计算器顶部输入栏中按钮的值。 (例如,我按下按钮7和7弹出我的输入栏)。我需要帮助编码,因为我不知道如何。到目前为止,屏幕上唯一的工作按钮是清除(ce)按钮,因为它清除了GUI中的整个条目栏。有人可以看看我下面的代码,以帮助我建立一个让这个计算器工作的方法。 (P.S我在tkinter并不是天才,所以基本上试着向我解释一下,就像你对10岁的LOOL一样。)

要点:

  1. 将我的按钮连接到我的输入栏。
  2. 我的代码:

    #Project Name : Calculator ++
    #Version : 1.7.2
    #Written by : Pamal Mangat.
    #Start Date : Monday, July 7th, 2015.
    
    import sys
    from tkinter import *
    from PIL import Image, ImageTk
    
    def clear():
        txtDisplay.delete(0,END);
        return;
    
    #Parent Window.
    root = Tk();
    root.title('Calculator ++ [1.7.2]');
    root.geometry('350x450');
    
    #Main entry.
    num1 = StringVar();
    txtDisplay = Entry(root, textvariable = num1, relief=RIDGE, bd = 10, width=33,    insertwidth = 1, font = 40);
    txtDisplay.place(x=15, y=10);
    txtDisplay.focus();
    
    #Buttons:
    zeroButton = Button(root, text='0', width=20, height=3, bg='LightBlue', fg='red').place(x=17,y=382);
    oneButton = Button(root, text='1', width=8, height=3, bg='LightBlue', fg='red').place(x=17, y=302);
    twoButton = Button(root, text='2', width=8, height=3, bg='LightBlue', fg='red').place(x=100, y=302);
    threeButton = Button(root, text='3', width=8, height=3, bg='LightBlue', fg='red').place(x=182, y=302);
    fourButton = Button(root, text='4', width=8, height=3, bg='LightBlue', fg='red').place(x=17, y=222);
    fiveButton = Button(root, text='5', width=8, height=3, bg='LightBlue', fg='red').place(x=100, y=222);
    sixButton = Button(root, text='6', width=8, height=3, bg='LightBlue', fg='red').place(x=182, y=222);
    sevenButton = Button(root, text='7', width=8, height=3, bg='LightBlue', fg='red').place(x=17, y=142);
    eightButton = Button(root, text='8', width=8, height=3, bg='LightBlue', fg='red').place(x=100, y=142);
    ninthButton = Button(root, text='9', width=8, height=3, bg='LightBlue', fg='red').place(x=182, y=142);
    
    decimalButton = Button(root, text='.', width=8, height=3, bg='powder blue').place(x=182, y=382);
    equalButton = Button(root, text='=', width=8, height=8, bg='Lightgreen').place(x=264, y=307);
    plusButton = Button(root, text='+', width=8, height=3, bg='gray').place(x=264, y=222);
    minusButton = Button(root, text='-', width=8, height=3, bg='gray').place(x=264, y=142);
    multiplyButton = Button(root, text='x', width=8, height=3, bg='gray').place(x=264, y=66);
    divideButton = Button(root, text='÷', width=8, height=3, bg='gray').place(x=182, y=66);
    clearButton = Button(root, text='Clear (CE)', width=20, height=3, command =      clear, bg='Orange').place(x=17, y=66);
    
    #Locks the parent windows size.
    root.maxsize(350,450);
    root.minsize(350,450);
    
    #Parent window's background color:
    root.configure(background = 'black');
    root.mainloop();
    

    下面是我的代码在运行后执行和看起来的样子。唯一的问题是,它只是一堆没有用的可按钮;除了我碰巧跑的清楚(ce)。其他按钮需要含义和功能,因为我真的想让这个程序运行起来。

    Calculator Image

1 个答案:

答案 0 :(得分:1)

正如ppl在评论中写道,你需要一个能够响应按下按钮的功能,并且会更新Entry小部件。我修改了代码,以显示它是如何完成的:

import sys
from tkinter import *
from PIL import Image, ImageTk

def clear():
    txtDisplay.delete(0,END);
    return;

#Parent Window.
root = Tk();
root.title('Calculator ++ [1.7.2]');
root.geometry('350x450');

#Main entry.
num1 = StringVar();
txtDisplay = Entry(root, textvariable = num1, relief=RIDGE, bd = 10, width=33,    insertwidth = 1, font = 40);
txtDisplay.place(x=15, y=10);
txtDisplay.focus();


def update_entry(v):
    current_value = num1.get()
    num1.set(current_value + v)

#Buttons:
zeroButton = Button(root, text='0', width=20, height=3, bg='LightBlue', fg='red', command = lambda: update_entry('0')).place(x=17,y=382);
oneButton = Button(root, text='1', width=8, height=3, bg='LightBlue', fg='red', command = lambda: update_entry('1')).place(x=17, y=302);
twoButton = Button(root, text='2', width=8, height=3, bg='LightBlue', fg='red').place(x=100, y=302);
threeButton = Button(root, text='3', width=8, height=3, bg='LightBlue', fg='red').place(x=182, y=302);
fourButton = Button(root, text='4', width=8, height=3, bg='LightBlue', fg='red').place(x=17, y=222);
fiveButton = Button(root, text='5', width=8, height=3, bg='LightBlue', fg='red').place(x=100, y=222);
sixButton = Button(root, text='6', width=8, height=3, bg='LightBlue', fg='red').place(x=182, y=222);
sevenButton = Button(root, text='7', width=8, height=3, bg='LightBlue', fg='red').place(x=17, y=142);
eightButton = Button(root, text='8', width=8, height=3, bg='LightBlue', fg='red').place(x=100, y=142);
ninthButton = Button(root, text='9', width=8, height=3, bg='LightBlue', fg='red').place(x=182, y=142);

decimalButton = Button(root, text='.', width=8, height=3, bg='powder blue').place(x=182, y=382);
equalButton = Button(root, text='=', width=8, height=8, bg='Lightgreen').place(x=264, y=307);
plusButton = Button(root, text='+', width=8, height=3, bg='gray', command = lambda: update_entry('+')).place(x=264, y=222);
minusButton = Button(root, text='-', width=8, height=3, bg='gray').place(x=264, y=142);
multiplyButton = Button(root, text='x', width=8, height=3, bg='gray').place(x=264, y=66);
divideButton = Button(root, text='÷', width=8, height=3, bg='gray').place(x=182, y=66);
clearButton = Button(root, text='Clear (CE)', width=20, height=3, command =      clear, bg='Orange').place(x=17, y=66);

#Locks the parent windows size.
root.maxsize(350,450);
root.minsize(350,450);

#Parent window's background color:
root.configure(background = 'black');
root.mainloop();

我添加了更新Entry文本变量的update_entry函数。还将lambdas添加到按钮0和1以及+以进行使用。其他按钮没有完成。也不要像现在一样在一行中使用位置(或网格),因为所有的Button变量都是None。