第一个程序简单收费系统

看完这个程序,一般的小程序需求应该已经可以去开发了,但是作为一个程序狗,希望还是把文档给看完比较好,知其然知其所以然,所以我还会坚持下去。

import sys 42from PySide6.QtCore import Qt, Slot 43from PySide6.QtGui import QAction, QPainter 44from PySide6.QtWidgets import (QApplication, QHeaderView, QHBoxLayout, QLabel, QLineEdit, 45 QMainWindow, QPushButton, QTableWidget, QTableWidgetItem, 46 QVBoxLayout, QWidget) 47from PySide6.QtCharts import QChartView, QPieSeries, QChart 48 49 50class Widget(QWidget): 51 def __init__(self): 52 QWidget.__init__(self) 53 self.items = 0 54 55 # Example data 56 self._data = {"Water": 24.5, "Electricity": 55.1, "Rent": 850.0, 57 "Supermarket": 230.4, "Internet": 29.99, "Bars": 21.85, 58 "Public transportation": 60.0, "Coffee": 22.45, "Restaurants": 120} 59 60 # Left 61 self.table = QTableWidget() 62 self.table.setColumnCount(2) 63 self.table.setHorizontalHeaderLabels(["Description", "Price"]) 64 self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) 65 66 # Chart 67 self.chart_view = QChartView() 68 self.chart_view.setRenderHint(QPainter.Antialiasing) 69 70 # Right 71 self.description = QLineEdit() 72 self.price = QLineEdit() 73 self.add = QPushButton("Add") 74 self.clear = QPushButton("Clear") 75 self.quit = QPushButton("Quit") 76 self.plot = QPushButton("Plot") 77 78 # Disabling 'Add' button 79 self.add.setEnabled(False) 80 81 self.right = QVBoxLayout() 82 self.right.addWidget(QLabel("Description")) 83 self.right.addWidget(self.description) 84 self.right.addWidget(QLabel("Price")) 85 self.right.addWidget(self.price) 86 self.right.addWidget(self.add) 87 self.right.addWidget(self.plot) 88 self.right.addWidget(self.chart_view) 89 self.right.addWidget(self.clear) 90 self.right.addWidget(self.quit) 91 92 # QWidget Layout 93 self.layout = QHBoxLayout() 94 95 #self.table_view.setSizePolicy(size) 96 self.layout.addWidget(self.table) 97 self.layout.addLayout(self.right) 98 99 # Set the layout to the QWidget 100 self.setLayout(self.layout) 101 102 # Signals and Slots 103 self.add.clicked.connect(self.add_element) 104 self.quit.clicked.connect(self.quit_application) 105 self.plot.clicked.connect(self.plot_data) 106 self.clear.clicked.connect(self.clear_table) 107 self.description.textChanged[str].connect(self.check_disable) 108 self.price.textChanged[str].connect(self.check_disable) 109 110 # Fill example data 111 self.fill_table() 112 113 @Slot() 114 def add_element(self): 115 des = self.description.text() 116 price = self.price.text() 117 118 try: 119 price_item = QTableWidgetItem(f"{float(price):.2f}") 120 price_item.setTextAlignment(Qt.AlignRight) 121 122 self.table.insertRow(self.items) 123 description_item = QTableWidgetItem(des) 124 125 self.table.setItem(self.items, 0, description_item) 126 self.table.setItem(self.items, 1, price_item) 127 128 self.description.setText("") 129 self.price.setText("") 130 131 self.items += 1 132 except ValueError: 133 print("Wrong price", price) 134 135 136 @Slot() 137 def check_disable(self, s): 138 if not self.description.text() or not self.price.text(): 139 self.add.setEnabled(False) 140 else: 141 self.add.setEnabled(True) 142 143 @Slot() 144 def plot_data(self): 145 # Get table information 146 series = QPieSeries() 147 for i in range(self.table.rowCount()): 148 text = self.table.item(i, 0).text() 149 number = float(self.table.item(i, 1).text()) 150 series.append(text, number) 151 152 chart = QChart() 153 chart.addSeries(series) 154 chart.legend().setAlignment(Qt.AlignLeft) 155 self.chart_view.setChart(chart) 156 157 @Slot() 158 def quit_application(self): 159 QApplication.quit() 160 161 def fill_table(self, data=None): 162 data = self._data if not data else data 163 for desc, price in data.items(): 164 description_item = QTableWidgetItem(desc) 165 price_item = QTableWidgetItem(f"{price:.2f}") 166 price_item.setTextAlignment(Qt.AlignRight) 167 self.table.insertRow(self.items) 168 self.table.setItem(self.items, 0, description_item) 169 self.table.setItem(self.items, 1, price_item) 170 self.items += 1 171 172 @Slot() 173 def clear_table(self): 174 self.table.setRowCount(0) 175 self.items = 0 176 177 178class MainWindow(QMainWindow): 179 def __init__(self, widget): 180 QMainWindow.__init__(self) 181 self.setWindowTitle("Tutorial") 182 183 # Menu 184 self.menu = self.menuBar() 185 self.file_menu = self.menu.addMenu("File") 186 187 # Exit QAction 188 exit_action = QAction("Exit", self) 189 exit_action.setShortcut("Ctrl+Q") 190 exit_action.triggered.connect(self.exit_app) 191 192 self.file_menu.addAction(exit_action) 193 self.setCentralWidget(widget) 194 195 @Slot() 196 def exit_app(self, checked): 197 QApplication.quit() 198 199 200if __name__ == "__main__": 201 # Qt Application 202 app = QApplication(sys.argv) 203 # QWidget 204 widget = Widget() 205 # QMainWindow using QWidget as central widget 206 window = MainWindow(widget) 207 window.resize(800, 600) 208 window.show() 209 210 # Execute application 211 sys.exit(app.exec())


结果

 

posted @ 2022-10-12 20:49  菩提浪子  阅读(146)  评论(0)    收藏  举报