QML设计计算器,并通过python调用

QML设计计算器,通过python调用

计算器


如果有需要项目源码的可以关注微信公众号: Belated to bide

1、使用qt design studio画出计算器界面

在design studio界面创建新项目,按下图操作
在这里插入图片描述
在设计界面中拖动控件来设计计算器界面如下图所示:
控制按钮都使用Button,显示按钮使用text,通过anchor来控制每个控件距离边界的大小,使得控件大小可随界面大小而改变。右击每个Button控件,使用Connections连接,在onClicked内调用python写的槽函数。
在这里插入图片描述

2、使用python编写相应的槽函数

获得按钮上的内容,将其放到字符串当中,槽函数如下。其中get_ui(txt,‘text’)是获取控件上的内容,set_ui([‘text1’, ‘text’, self.t2 ])是设置显示框的显示内容。

@pyqtSlot(str)
    def clickNum(self,txt):
        if self.get_ui(txt,'text') in \
                ['0','1','2','3','4','5','6','7','8','9',
                    '.','( ',' )',' + ',' - ',' × ',' ÷ ']:
            self.t1 = self.get_ui(txt,'text')
            self.t2 = self.t2 + self.t1
            self.t1 = ""
            self.set_ui(['text1', 'text', self.t2 ])

这里因为需要考虑优先级的问题,所以将得到的中缀表达式转换为逆波兰表达式,再计算逆波兰表达式的值,即可得到计算结果。开根号,平方,求倒数,求阶乘需要单独编写槽函数。求阶乘的槽函数如下:

@pyqtSlot()
    def fac(self):
        if self.t2 == "":
            self.set_ui(['text1', 'text', self.t2])
        else:
            a = 1
            for i in range(int(self.t2)):
                a = (i+1)*a
            self.set_ui(['text1', 'text', a])
            self.t2 = str(a)

其中逆波兰表达式的计算可以自行百度,这里不做过多的赘述,代码如下:

def eval_rpn(tokens):
    results = []
    operators = set(["+","-","×","÷"])
    for token in tokens:
        if token not in operators:
            results.append(float(token))
        else:
            num2 = results.pop()
            num1 = results.pop()
            if token == "+":
                results.append(round(num1 + num2,3))
            elif token == "-":
                results.append(round(num1 - num2,3))
            elif token == "×":
                results.append(round(num1 * num2,3))
            elif token == "÷":
                if num2 == 0:
                    results = []
                    results.append("input error! please input again.")
                    break
                    # raise ValueError("除数为零!")
                results.append(round(num1 / num2,3))
    return results[0]

还需要在main.py当中加载QML窗口并创建与QML界面交互的对象。
完整代码可关注微信公众号:Belated to bide

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值