用python写一个可视化的中型的点单系统
时间: 2024-03-10 17:48:07 浏览: 62
Python 餐厅点餐系统
好的,下面是一个适用于中型点单系统的Python代码,使用了PyQt5库实现可视化界面:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QLabel, QLineEdit, QComboBox, QPushButton, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt
# 定义商品列表
goods = {'咖啡': 20, '牛奶': 10, '面包': 5, '蛋糕': 30}
# 定义订单列表
orders = []
# 定义总价
total_price = 0
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 设置主窗口属性
self.setWindowTitle('点单系统')
self.setGeometry(100, 100, 800, 600)
# 创建中心窗口
central_widget = QWidget()
self.setCentralWidget(central_widget)
# 创建商品框架
goods_frame = QWidget(central_widget)
goods_frame.setGeometry(10, 10, 300, 580)
# 创建商品标签
goods_label = QLabel('商品列表', goods_frame)
goods_label.setGeometry(10, 10, 100, 20)
# 创建商品下拉框
self.goods_combobox = QComboBox(goods_frame)
self.goods_combobox.setGeometry(10, 40, 120, 30)
for item in goods:
self.goods_combobox.addItem(item)
# 创建添加按钮
add_button = QPushButton('添加', goods_frame)
add_button.setGeometry(150, 40, 60, 30)
add_button.clicked.connect(self.add_item)
# 创建订单框架
orders_frame = QWidget(central_widget)
orders_frame.setGeometry(320, 10, 470, 580)
# 创建订单标签
orders_label = QLabel('订单列表', orders_frame)
orders_label.setGeometry(10, 10, 100, 20)
# 创建订单表格
self.orders_table = QTableWidget(orders_frame)
self.orders_table.setGeometry(10, 40, 450, 440)
self.orders_table.setColumnCount(3)
self.orders_table.setHorizontalHeaderLabels(['商品', '单价', '数量'])
# 创建总价标签
total_price_label = QLabel('总价:0', orders_frame)
total_price_label.setGeometry(300, 490, 150, 30)
# 创建提交按钮
submit_button = QPushButton('提交', orders_frame)
submit_button.setGeometry(380, 530, 80, 30)
submit_button.clicked.connect(self.submit_order)
# 添加商品
def add_item(self):
global total_price
item = self.goods_combobox.currentText()
price = goods[item]
count = 1
for i in range(self.orders_table.rowCount()):
if self.orders_table.item(i, 0).text() == item:
count = int(self.orders_table.item(i, 2).text()) + 1
self.orders_table.removeRow(i)
total_price -= int(self.orders_table.item(i, 1).text()) * int(self.orders_table.item(i, 2).text())
break
row_position = self.orders_table.rowCount()
self.orders_table.insertRow(row_position)
self.orders_table.setItem(row_position, 0, QTableWidgetItem(item))
self.orders_table.setItem(row_position, 1, QTableWidgetItem(str(price)))
self.orders_table.setItem(row_position, 2, QTableWidgetItem(str(count)))
total_price += price * count
self.orders_table.sortItems(0, Qt.AscendingOrder)
self.update_total_price()
# 提交订单
def submit_order(self):
global orders, total_price
order = []
for i in range(self.orders_table.rowCount()):
item = self.orders_table.item(i, 0).text()
price = int(self.orders_table.item(i, 1).text())
count = int(self.orders_table.item(i, 2).text())
order.append((item, price, count))
orders.append(order)
total_price = 0
self.orders_table.clearContents()
self.orders_table.setRowCount(0)
self.update_total_price()
# 更新总价
def update_total_price(self):
global total_price
total_price_label = self.findChild(QLabel, '总价:0')
total_price_label.setText('总价:' + str(total_price))
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
该点单系统使用字典存储商品信息,使用列表存储订单信息,使用全局变量`total_price`记录总价。界面上分为商品框架和订单框架,商品框架中展示了所有商品和添加按钮,订单框架中展示了订单表格、总价标签和提交按钮。用户可以从商品下拉框中选择商品,点击添加按钮添加商品,订单表格会即时更新;用户可以点击提交按钮提交订单,订单列表会清空,总价标签会即时更新。
该系统的界面更加美观,支持多种操作和功能,适用于中型点单场景。您可以根据需要对该代码进行修改和完善,例如添加更多商品、实现更多操作等。
阅读全文