python自写软件(二)
承上博客背景,用了Pyqt5先实现了个简单的计算器,我觉得重要的就是py自带的eval函数吧
什么时候写了播放器或者实现了最近想写的java目录树或者xml解析器我再写吧
思路就是点击按钮就加到string形成算法表达式,再依靠python强大的计算功能。
以后有新的版本再说
5.1更新,补全()清空余数
1 from PyQt5.QtWidgets import QLabel, QApplication, QDialog, QGridLayout, QHBoxLayout, QPushButton, QFormLayout, \ 2 QWidget, \ 3 QLineEdit 4 import sys 5 from PyQt5.QtCore import Qt 6 from PyQt5.QtGui import QIcon 7 import test 8 9 10 class calculator_frame(QDialog): 11 def __init__(self): 12 super().__init__() 13 self.shower = QLineEdit() 14 self.label = QLabel() 15 self.init() 16 self.tmp_string_num = "" 17 self.tmp_num = 0 18 self.sum_num = "" 19 self.num = 0 20 21 def clear(self): 22 self.tmp_string_num = "" 23 self.tmp_num = 0 24 self.sum_num = "" 25 self.num = 0 26 self.shower.setText("") 27 self.label.setText("") 28 29 def init(self): 30 31 self.setWindowTitle("myCalculator") 32 self.setWindowIcon(QIcon(':/calculator.ico')) 33 self.label.setStyleSheet('font-size:20px;color:rgb(180,180,180,255);') 34 self.shower.setStyleSheet('font-size:20px;color:rgb(180,180,180,255);') 35 self.shower.setEnabled(False) 36 hbox = QHBoxLayout() 37 form_widget = QWidget() 38 grid_widget = QWidget() 39 form_layout = QFormLayout() 40 form_layout.addRow("memory:", self.shower) 41 form_layout.addRow("result=", self.label) 42 form_widget.setLayout(form_layout) 43 # self.setFixedSize(300,200) 44 45 grid_layout = QGridLayout() 46 one = QPushButton("1") 47 two = QPushButton("2") 48 three = QPushButton("3") 49 four = QPushButton("4") 50 five = QPushButton("5") 51 six = QPushButton("6") 52 seven = QPushButton("7") 53 eight = QPushButton("8") 54 nine = QPushButton("9") 55 zero = QPushButton("0") 56 point = QPushButton(".") 57 equal = QPushButton("=") 58 add = QPushButton("+") 59 sub = QPushButton("-") 60 mult = QPushButton("*") 61 div = QPushButton("/") 62 remove = QPushButton("AC") 63 open_paren = QPushButton("(") 64 close_paren = QPushButton(")") 65 remainer = QPushButton("%") 66 one.clicked.connect(self.clicker) 67 two.clicked.connect(self.clicker) 68 three.clicked.connect(self.clicker) 69 four.clicked.connect(self.clicker) 70 five.clicked.connect(self.clicker) 71 six.clicked.connect(self.clicker) 72 seven.clicked.connect(self.clicker) 73 eight.clicked.connect(self.clicker) 74 nine.clicked.connect(self.clicker) 75 zero.clicked.connect(self.clicker) 76 add.clicked.connect(self.clicker) 77 sub.clicked.connect(self.clicker) 78 mult.clicked.connect(self.clicker) 79 div.clicked.connect(self.clicker) 80 equal.clicked.connect(self.clicker) 81 point.clicked.connect(self.clicker) 82 remove.clicked.connect(self.clicker) 83 open_paren.clicked.connect(self.clicker) 84 close_paren.clicked.connect(self.clicker) 85 remainer.clicked.connect(self.clicker) 86 87 one.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 88 two.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 89 three.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 90 four.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 91 five.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 92 six.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 93 seven.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 94 eight.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 95 nine.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 96 zero.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 97 point.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 98 equal.setStyleSheet('font-size:32px;color:rgb(0,0,0,255);') 99 add.setStyleSheet('font-size:28px;color:rgb(0,0,0,255);') 100 sub.setStyleSheet('font-size:28px;color:rgb(0,0,0,255);') 101 mult.setStyleSheet('font-size:28px;color:rgb(0,0,0,255);') 102 div.setStyleSheet('font-size:28px;color:rgb(0,0,0,255);') 103 remove.setStyleSheet('font-size:28px;color:rgb(0,0,0,255);') 104 open_paren.setStyleSheet('font-size:28px;color:rgb(0,0,0,255);') 105 close_paren.setStyleSheet('font-size:28px;color:rgb(0,0,0,255);') 106 remainer.setStyleSheet('font-size:28px;color:rgb(0,0,0,255);') 107 108 grid_layout.addWidget(add, 2, 4) 109 grid_layout.addWidget(div, 1, 4) 110 grid_layout.addWidget(mult, 0, 4) 111 grid_layout.addWidget(sub, 3, 4) 112 grid_layout.addWidget(zero, 3, 2) 113 grid_layout.addWidget(point, 3, 1) 114 grid_layout.addWidget(equal, 3, 3) 115 grid_layout.addWidget(one, 2, 1) 116 grid_layout.addWidget(two, 2, 2) 117 grid_layout.addWidget(three, 2, 3) 118 grid_layout.addWidget(four, 1, 1) 119 grid_layout.addWidget(five, 1, 2) 120 grid_layout.addWidget(six, 1, 3) 121 grid_layout.addWidget(seven, 0, 1) 122 grid_layout.addWidget(eight, 0, 2) 123 grid_layout.addWidget(nine, 0, 3) 124 grid_layout.addWidget(remove, 0, 5) 125 grid_layout.addWidget(remainer, 3, 5) 126 grid_layout.addWidget(open_paren, 1, 5) 127 grid_layout.addWidget(close_paren, 2, 5) 128 grid_widget.setLayout(grid_layout) 129 hbox.addWidget(form_widget, 0, Qt.AlignLeft) 130 hbox.addWidget(grid_widget, 0, Qt.AlignRight) 131 self.setLayout(hbox) 132 133 def clicker(self): 134 num_or_opt = self.sender().text() 135 if num_or_opt.isdigit(): 136 self.tmp_string_num += str(num_or_opt) 137 self.tmp_num = int(self.tmp_string_num) 138 self.shower.setText(self.tmp_string_num) 139 self.sum_num += self.tmp_string_num 140 print(self.sum_num) 141 self.label.setText(self.sum_num) 142 self.tmp_string_num = "" 143 self.tmp_num = 0 144 else: 145 if not num_or_opt == "=" and (not num_or_opt == "AC"): 146 self.tmp_string_num += num_or_opt 147 self.sum_num += num_or_opt 148 self.shower.setText(self.tmp_string_num) 149 self.label.setText(self.sum_num) 150 self.tmp_string_num = "" 151 self.tmp_num = 0 152 elif num_or_opt == "AC": 153 self.clear() 154 else: 155 self.label.setText(str(eval(self.sum_num))) 156 157 158 if __name__ == '__main__': 159 app = QApplication(sys.argv) 160 mainFrame = calculator_frame() 161 mainFrame.show() 162 sys.exit(app.exec_())
eval很关键,不然破不了这死局
所望隔山海