python自写软件(二)

Posted 世界を変える御宅族

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python自写软件(二)相关的知识,希望对你有一定的参考价值。

承上博客背景,用了Pyqt5先实现了个简单的计算器,我觉得重要的就是py自带的eval函数吧

什么时候写了播放器或者实现了最近想写的java目录树或者xml解析器我再写吧

思路就是点击按钮就加到string形成算法表达式,再依靠python强大的计算功能。

以后有新的版本再说

github地址

from PyQt5.QtWidgets import QLabel, QApplication, QDialog, QGridLayout, QHBoxLayout, QPushButton, QFormLayout,     QWidget,     QLineEdit
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
import test

class calculator_frame(QDialog):
    def __init__(self):
        super().__init__()
        self.shower = QLineEdit()
        self.label = QLabel()
        self.init()
        self.tmp_string_num = ""
        self.tmp_num = 0
        self.sum_num = ""
        self.num = 0

    def init(self):

        self.setWindowTitle("个人计算器")
        self.setWindowIcon(QIcon(:/calculator.ico))
        self.label.setStyleSheet(font-size:20px;color:rgb(180,180,180,255);)
        self.shower.setStyleSheet(font-size:20px;color:rgb(180,180,180,255);)
        self.shower.setEnabled(False)
        hbox = QHBoxLayout()
        form_widget = QWidget()
        grid_widget = QWidget()
        form_layout = QFormLayout()
        form_layout.addRow("memory:", self.shower)
        form_layout.addRow("result=", self.label)
        form_widget.setLayout(form_layout)
        # self.setFixedSize(300,200)

        grid_layout = QGridLayout()
        one = QPushButton("1")
        two = QPushButton("2")
        three = QPushButton("3")
        four = QPushButton("4")
        five = QPushButton("5")
        six = QPushButton("6")
        seven = QPushButton("7")
        eight = QPushButton("8")
        nine = QPushButton("9")
        zero = QPushButton("0")
        point = QPushButton(".")
        equal = QPushButton("=")
        add = QPushButton("+")
        sub = QPushButton("-")
        mult = QPushButton("*")
        div = QPushButton("/")

        one.clicked.connect(self.clicker)
        two.clicked.connect(self.clicker)
        three.clicked.connect(self.clicker)
        four.clicked.connect(self.clicker)
        five.clicked.connect(self.clicker)
        six.clicked.connect(self.clicker)
        seven.clicked.connect(self.clicker)
        eight.clicked.connect(self.clicker)
        nine.clicked.connect(self.clicker)
        zero.clicked.connect(self.clicker)
        add.clicked.connect(self.clicker)
        sub.clicked.connect(self.clicker)
        mult.clicked.connect(self.clicker)
        div.clicked.connect(self.clicker)
        equal.clicked.connect(self.clicker)
        point.clicked.connect(self.clicker)
        one.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        two.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        three.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        four.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        five.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        six.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        seven.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        eight.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        nine.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        zero.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        point.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        equal.setStyleSheet(font-size:32px;color:rgb(0,0,0,255);)
        add.setStyleSheet(font-size:28px;color:rgb(0,0,0,255);)
        sub.setStyleSheet(font-size:28px;color:rgb(0,0,0,255);)
        mult.setStyleSheet(font-size:28px;color:rgb(0,0,0,255);)
        div.setStyleSheet(font-size:28px;color:rgb(0,0,0,255);)

        grid_layout.addWidget(add, 2, 4)
        grid_layout.addWidget(div, 1, 4)
        grid_layout.addWidget(mult, 0, 4)
        grid_layout.addWidget(sub, 3, 4)
        grid_layout.addWidget(zero, 3, 2)
        grid_layout.addWidget(point, 3, 1)
        grid_layout.addWidget(equal, 3, 3)
        grid_layout.addWidget(one, 2, 1)
        grid_layout.addWidget(two, 2, 2)
        grid_layout.addWidget(three, 2, 3)
        grid_layout.addWidget(four, 1, 1)
        grid_layout.addWidget(five, 1, 2)
        grid_layout.addWidget(six, 1, 3)
        grid_layout.addWidget(seven, 0, 1)
        grid_layout.addWidget(eight, 0, 2)
        grid_layout.addWidget(nine, 0, 3)
        grid_widget.setLayout(grid_layout)
        hbox.addWidget(form_widget, 0, Qt.AlignLeft)
        hbox.addWidget(grid_widget, 0, Qt.AlignRight)
        self.setLayout(hbox)

    def clicker(self):
        num_or_opt = self.sender().text()
        if num_or_opt.isdigit():
            self.tmp_string_num += str(num_or_opt)
            self.tmp_num = int(self.tmp_string_num)
            self.shower.setText(self.tmp_string_num)
            self.sum_num += self.tmp_string_num
            print(self.sum_num)
            self.label.setText(self.sum_num)
            self.tmp_string_num=""
            self.tmp_num = 0
        else:
            if not num_or_opt == "=":
                self.tmp_string_num += num_or_opt
                self.sum_num += num_or_opt
                self.shower.setText(self.tmp_string_num)
                self.tmp_string_num = ""
                self.tmp_num = 0
            else:
                self.label.setText(str(eval(self.sum_num)))


if __name__ == __main__:

    app = QApplication(sys.argv)
    mainFrame = calculator_frame()
    mainFrame.show()
    sys.exit(app.exec_())

 

一开始没考虑推导式[(x,y) for x,y in xx ]我很后悔,但是写都写了,能用就行,eval很关键,不然破不了这死局

以上是关于python自写软件(二)的主要内容,如果未能解决你的问题,请参考以下文章

python入门:求1-2+3-4+5...99的所有数的和(自写)

python nose 自写插件支持用例带进度

《javaScript100例|03》自写javaScript+CSS轮显效果

layer弹窗插件自带自写经验

安卓自写Adapter

jenkins的Pipeline代码流水线管理