python自写软件(二)

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

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

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

以后有新的版本再说

github地址

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很关键,不然破不了这死局

posted @ 2020-04-23 18:24  世界を変える御宅族  阅读(356)  评论(0编辑  收藏  举报