如何用 Python 写一个带 GUI 的科学计算程序

如何用 Python 写一个带 GUI 的科学计算程序,第1张

这个代码实现的挺简单,并不是很复杂的科学计算器界面,你可以以此为基础,添加自己想要的东西:给你个截图:

代码是如下, 我就不给你添注释了啊:

#!/usr/bin/env python3.4

from Tkinter import *

import parser

 

root = Tk()

root.title('Calculator')

 

i = 0

 

def factorial():

    """Calculates the factorial of the number entered."""

    whole_string = display.get()

    number = int(whole_string)

    fact = 1

    counter = number 

    try:

        while counter > 0:

            fact = fact*counter

            counter -= 1

        clear_all()

        display.insert(0, fact)

    except Exception:

        clear_all()

        display.insert(0, "Error")

 

 

def clear_all():

    """clears all the content in the Entry widget"""

    display.delete(0, END)

 

def get_variables(num):

    """Gets the user input for operands and puts it inside the entry widget"""

    global i

    display.insert(i, num)

    i += 1

 

def get_operation(operator):

    """Gets the operand the user wants to apply on the functions"""

    global i

    length = len(operator)

    display.insert(i, operator)

    i += length

 

def undo():

    """removes the last entered operator/variable from entry widget"""

    whole_string = display.get()

    if len(whole_string):        ## repeats until

        ## now just decrement the string by one index

        new_string = whole_string[:-1]

        print(new_string)

        clear_all()

        display.insert(0, new_string)

    else:

        clear_all() 

        display.insert(0, "Error, press AC")

 

def calculate():

    """

    Evaluates the expression

    ref : http://stackoverflow.com/questions/594266/equation-parsing-in-python

    """

    whole_string = display.get()

    try:

        formulae = parser.expr(whole_string).compile()

        result = eval(formulae)

        clear_all()

        display.insert(0, result)

    except Exception:

        clear_all()

        display.insert(0, "Error!")

 

root.columnconfigure(0,pad=3)

root.columnconfigure(1,pad=3)

root.columnconfigure(2,pad=3)

root.columnconfigure(3,pad=3)

root.columnconfigure(4,pad=3)

 

root.rowconfigure(0,pad=3)

root.rowconfigure(1,pad=3)

root.rowconfigure(2,pad=3)

root.rowconfigure(3,pad=3)

 

display = Entry(root, font = ("Calibri", 13))

display.grid(row = 1, columnspan = 6    , sticky = W+E)

 

one = Button(root, text = "1", command = lambda : get_variables(1), font=("Calibri", 12))

one.grid(row = 2, column = 0)

two = Button(root, text = "2", command = lambda : get_variables(2), font=("Calibri", 12))

two.grid(row = 2, column = 1)

three = Button(root, text = "3", command = lambda : get_variables(3), font=("Calibri", 12))

three.grid(row = 2, column = 2)

 

four = Button(root, text = "4", command = lambda : get_variables(4), font=("Calibri", 12))

four.grid(row = 3 , column = 0)

five = Button(root, text = "5", command = lambda : get_variables(5), font=("Calibri", 12))

five.grid(row = 3, column = 1)

six = Button(root, text = "6", command = lambda : get_variables(6), font=("Calibri", 12))

six.grid(row = 3, column = 2)

 

seven = Button(root, text = "7", command = lambda : get_variables(7), font=("Calibri", 12))

seven.grid(row = 4, column = 0)

eight = Button(root, text = "8", command = lambda : get_variables(8), font=("Calibri", 12))

eight.grid(row = 4, column = 1)

nine = Button(root , text = "9", command = lambda : get_variables(9), font=("Calibri", 12))

nine.grid(row = 4, column = 2)

 

cls = Button(root, text = "AC", command = clear_all, font=("Calibri", 12), foreground = "red")

cls.grid(row = 5, column = 0)

zero = Button(root, text = "0", command = lambda : get_variables(0), font=("Calibri", 12))

zero.grid(row = 5, column = 1)

result = Button(root, text = "=", command = calculate, font=("Calibri", 12), foreground = "red")

result.grid(row = 5, column = 2)

 

plus = Button(root, text = "+", command =  lambda : get_operation("+"), font=("Calibri", 12))

plus.grid(row = 2, column = 3)

minus = Button(root, text = "-", command =  lambda : get_operation("-"), font=("Calibri", 12))

minus.grid(row = 3, column = 3)

multiply = Button(root,text = "*", command =  lambda : get_operation("*"), font=("Calibri", 12))

multiply.grid(row = 4, column = 3)

divide = Button(root, text = "/", command = lambda :  get_operation("/"), font=("Calibri", 12))

divide.grid(row = 5, column = 3)

 

# adding new operations

pi = Button(root, text = "pi", command = lambda: get_operation("*3.14"), font =("Calibri", 12))

pi.grid(row = 2, column = 4)

modulo = Button(root, text = "%", command = lambda :  get_operation("%"), font=("Calibri", 12))

modulo.grid(row = 3, column = 4)

left_bracket = Button(root, text = "(", command = lambda: get_operation("("), font =("Calibri", 12))

left_bracket.grid(row = 4, column = 4)

exp = Button(root, text = "exp", command = lambda: get_operation("**"), font = ("Calibri", 10))

exp.grid(row = 5, column = 4)

 

## To be added :

# sin, cos, log, ln

undo_button = Button(root, text = "<-", command = undo, font =("Calibri", 12), foreground = "red")

undo_button.grid(row = 2, column = 5)

fact = Button(root, text = "x!", command = factorial, font=("Calibri", 12))

fact.grid(row = 3, column = 5)

right_bracket = Button(root, text = ")", command = lambda: get_operation(")"), font =("Calibri", 12))

right_bracket.grid(row = 4, column = 5)

square = Button(root, text = "^2", command = lambda: get_operation("**2"), font = ("Calibri", 10))

square.grid(row = 5, column = 5)

 

root.mainloop()

如果希望在树莓派开机进入界面后,自动开始一个python的gui程序,按照如下方法,以my_program.py文件为例:

1.给文件设置运行权限

chmod +x my_program.py

2.在这个.py文件最开始,加上python编译器的地址

比如 #!/usr/bin/env python

如果不清楚python编译器的地址是什么,可以用 which python命令查看。如果是用python3,是用 which python3.

3.打开自启动的文件(用户为pi的时候)

nano /home/pi/.config/lxsession/LXDE-pi/autostart

增加一行

@/home/pi/folder/my_program.py

注意:如果.py文件中存在地址,要写绝对地址。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11837065.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存