pyqt学习笔记,计算器

参考大佬Sp4rkW的博客,保存一个简易计算器代码~
原文链接:https://blog.csdn.net/wy_97/article/details/78583683
1.效果图
简易计算器
在这里插入图片描述

# -*- coding:utf-8 -*- 
import sys
from PyQt5 import QtWidgets,QtCore,QtGui
from PyQt5.QtGui import QIcon
import os

class Example(QtWidgets.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        self.string = ''#作为容器去计算
        self.number = '0'#初始值
        self.setWindowTitle('简单计算器')#设置标题
        grid = QtWidgets.QGridLayout()#网格型布局 
        self.display = QtWidgets.QLineEdit('0')#QLineEdit是一个单行文本编辑控件。
        '''
        QLineEdit是一个单行文本编辑控件。
        使用者可以通过很多函数,输入和编辑单行文本,比如撤销、恢复、剪切、粘贴以及拖放等。
        通过改变QLineEdit的 echoMode() ,可以设置其属性,比如以密码的形式输入。
        文本的长度可以由 maxLength() 限制,可以通过使用 validator() 或者 inputMask() 可以限制它只能输入数字。在对同一个QLineEdit的validator或者input mask进行转换时,最好先将它的validator或者input mask清除,以避免错误发生。
        与QLineEdit相关的一个类是QTextEdit,它允许多行文字以及富文本编辑。
        我们可以使用 setText() 或者 insert() 改变其中的文本,通过 text() 获得文本,通过 displayText() 获得显示的文本,使用 setSelection() 或者 selectAll() 选中文本,选中的文本可以通过cut()、copy()、paste()进行剪切、复制和粘贴,使用 setAlignment() 设置文本的位置。
        文本改变时会发出 textChanged() 信号;如果不是由setText()造成文本的改变,那么会发出textEdit()信号;鼠标光标改变时会发出cursorPostionChanged()信号;当返回键或者回车键按下时,会发出returnPressed()信号。
        当编辑结束,或者LineEdit失去了焦点,或者当返回/回车键按下时,editFinished()信号将会发出。
        '''
        self.display.setFont(QtGui.QFont("Times", 20))#设置字体
        self.display.setReadOnly(True)#设置可编辑
        self.display.setAlignment(QtCore.Qt.AlignRight)#设置文本位置,这里设置为右边开始
        self.display.setMaxLength(15)#设置最大的长度  
        grid.addWidget(self.display,0,0,1,4)
        '''
        void QGridLayout::addWidget(QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0)
        6个参数表示控件名,行,列,占用行数,占用列数,对齐方式
        '''
        names = ['Clear', 'Back', '', 'Close', 
                '7', '8', '9', '/',
                '4', '5', '6', '*', 
                '1', '2', '3', '-',
                '0', '.', '=', '+']
        pos = [(0, 0), (0, 1), (0, 2), (0, 3),
                (1, 0), (1, 1), (1, 2), (1, 3),
                (2, 0), (2, 1), (2, 2), (2, 3),
                (3, 0), (3, 1), (3, 2), (3, 3 ),
                (4, 0), (4, 1), (4, 2), (4, 3)]
        c = 0
        for name in names:
            button = QtWidgets.QPushButton(name)
            button.setFixedSize(QtCore.QSize(60,30))
            button.clicked.connect(self.buttonClicked) # 给每个按钮设置信号/槽
            if c == 2:
                pass
                #grid.addWidget(QtWidgets.QLabel(''), 0, 2) #替换 第三个按钮 为 文本标签!
            else: 
                grid.addWidget(button, pos[c][0]+1, pos[c][1])
            c = c + 1      
        self.setLayout(grid)
        
        
        
        
    def buttonClicked(self): 
        #sender = self.sender();  # 确定信号发送者
        #self.display.setText(sender.text())#确定text为name
        text = self.sender().text()
        if text == "=":
            self.string = self.string+self.number
            self.number = str(eval(self.string)) # 简单计算,这里使用eval直接计算字符串
            self.string=''
        elif text in '+-*/':
            self.string = self.string+self.number+text
            self.number='0'#清空数字
        elif text == "Back":
            self.string = self.string.Substring(0,self.string.Length - 1)#删去最后一位
        elif text == "Clear":
            self.number = "0"
        elif text == "Close":
            self.close()
        else:
            if(self.number == '0'):
                self.number=''
            self.number = self.number+text

        self.display.setText(self.number)


app = QtWidgets.QApplication(sys.argv)
ex = Example()
dir_path = os.path.abspath(os.path.dirname(__file__))+'\image\\1.ico'
ex.setWindowIcon(QIcon(dir_path))
ex.show()
sys.exit(app.exec_())

打包命令补充

pyinstaller -F --distpath relese -w --icon="自己的路径\1.ico" Ui_hello.py --noconsole
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值