使用PyQt5制作计算器(二)

目录

一. UI处理button的核心代码分析

二. 完整代码示例

三. 运行结果

四. 小结

五. 鸣谢


今天,我们将展示不使用QT Designer,直接在代码中摆放需要的控件。

显然,适用QT Designer设计UI会更加直观,使用代码摆放需要计算和多次调试才能确认布局,但是代码设计UI的好处就是可以根据工程师的需求灵活高效的布局。

一. UI处理button的核心代码分析

我们还是以计算器为例,我们会发现控件中的button作用类似,那么是否可以将他们归为一类来处理呢?答案是肯定的。我们可以使用列表保存button的名称,使用循环来初始化各个button,示例代码如下,

def setupUi(self):
        btnNameList = ['1', '2', '3', '+', '4', '5', '6', '-', '7', '8', '9', '*', 'C', '0', '=', '/']
        count = 0
        for btnName in btnNameList:
            self.btn = QPushButton(btnName, self)
            self.btn.clicked.connect(self.btnClicked)
            x = count%4
            y = int(count/4)
            self.btn.move(x*40+10, y*40+100)
            self.btn.resize(30, 30)
            count += 1

从代码中可以看到,这种方式的确减少提高了代码的使用量,同时取得更好的代码维护效果。至于button的点击事件处理方法,也是集中到一个处理方法“btnClicked”中。

二. 完整代码示例

下面是完整的代码示例,供参考,可以看到代码数量少了很多,仅相当于原来代码的六分之一。当然,在UI设计的直观性方面,不如QT Designer来的直观。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit

class MyWindow(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        self.setupUi()
    
    def setupUi(self):
        btnNameList = ['1', '2', '3', '+', '4', '5', '6', '-', '7', '8', '9', '*', 'C', '0', '=', '/']
        count = 0
        for btnName in btnNameList:
            self.btn = QPushButton(btnName, self)
            self.btn.clicked.connect(self.btnClicked)
            x = count%4
            y = int(count/4)
            self.btn.move(x*40+10, y*40+100)
            self.btn.resize(30, 30)
            count += 1
        self.lineEdit = QLineEdit('', self)
        self.lineEdit.move(10, 10)
        self.lineEdit.resize(150, 70)
        self.setGeometry(200, 200, 170, 300)
        self.setWindowTitle('计算器')
        
    def btnClicked(self):
        btnText = self.sender().text()
        if btnText=='C':
            self.lineEdit.clear()
        elif btnText=='=':
            text = self.lineEdit.text()
            self.lineEdit.setText(str(eval(text)))
        else:
            self.lineEdit.insert(btnText)
            
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())

三. 运行结果

四. 小结

不管是使用QT Designer还是直接代码动态实现,只要能达到目的就行,可根据项目的实际需求来判断。另外,易读性和可维护性,也是好代码的一个十分重要依据。

五. 鸣谢

(131条消息) 使用PyQt5编写一个简易的计算器_伯纳乌的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值