用python编写一个程序,生成GUI界面,界面尺寸800*800,实现扫码数据存储在excel中,同时在GUI界面可以实时显示扫码的数据,也能查询历史扫码存储的数据,GUI界面上部五分之一处对话框显示当前时间,中部二分之一处对话框实现扫描输入功能,并显示实时扫码数据,下部三分之一处对话框可以通过日期查询当天的数据。为这个程序生产EXE可执行文件
时间: 2024-02-13 20:06:50 浏览: 101
好的,我会为您解答这个问题。首先,您需要安装Python和一些必要的库,如openpyxl、PyQt5和pyinstaller。然后,按照以下步骤编写程序:
1.导入所需的库和模块
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget, QLabel, QLineEdit, QPushButton, QTextEdit, QTableWidget, QTableWidgetItem, QHeaderView
from PyQt5.QtCore import Qt, QDate, QTime, QDateTime, QTimer
from openpyxl import Workbook, load_workbook
import sys
```
2.创建一个主窗口类,并设置其属性和布局
```python
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('扫码数据存储')
self.setGeometry(100, 100, 800, 800)
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
self.grid_layout = QGridLayout(self.central_widget)
self.create_widgets()
self.create_table()
```
3.创建GUI界面组件
```python
def create_widgets(self):
# 时间显示
self.label_time = QLabel(self)
self.label_time.setAlignment(Qt.AlignCenter)
self.label_time.setFont(QLabel().font())
self.grid_layout.addWidget(self.label_time, 0, 0, 1, 4)
# 扫码输入框和按钮
self.line_edit = QLineEdit(self)
self.line_edit.setFont(QLabel().font())
self.grid_layout.addWidget(self.line_edit, 1, 0, 1, 3)
self.button_save = QPushButton('保存', self)
self.button_save.setFont(QLabel().font())
self.button_save.clicked.connect(self.save_data)
self.grid_layout.addWidget(self.button_save, 1, 3)
# 实时扫码数据显示
self.text_edit = QTextEdit(self)
self.text_edit.setFont(QLabel().font())
self.text_edit.setReadOnly(True)
self.grid_layout.addWidget(self.text_edit, 2, 0, 3, 4)
# 查询历史扫码数据
self.line_edit_date = QLineEdit(self)
self.line_edit_date.setFont(QLabel().font())
self.grid_layout.addWidget(self.line_edit_date, 5, 0, 1, 2)
self.button_search = QPushButton('查询', self)
self.button_search.setFont(QLabel().font())
self.button_search.clicked.connect(self.search_data)
self.grid_layout.addWidget(self.button_search, 5, 2, 1, 2)
```
4.创建保存扫码数据的函数
```python
def save_data(self):
scan_data = self.line_edit.text()
if scan_data:
date_time = QDateTime.currentDateTime()
self.text_edit.append(date_time.toString('yyyy-MM-dd hh:mm:ss') + ' ' + scan_data)
wb = load_workbook('scan_data.xlsx')
ws = wb.active
ws.append([date_time.toString('yyyy-MM-dd hh:mm:ss'), scan_data])
wb.save('scan_data.xlsx')
self.line_edit.clear()
```
5.创建查询历史扫码数据的函数
```python
def search_data(self):
date = self.line_edit_date.text()
if date:
wb = load_workbook('scan_data.xlsx')
ws = wb.active
self.table.setRowCount(0)
for row in ws.iter_rows(min_row=2, values_only=True):
if row[0].startswith(date):
self.table.insertRow(0)
self.table.setItem(0, 0, QTableWidgetItem(row[0]))
self.table.setItem(0, 1, QTableWidgetItem(row[1]))
self.line_edit_date.clear()
```
6.创建显示历史扫码数据的表格
```python
def create_table(self):
self.table = QTableWidget(self)
self.table.setEditTriggers(QTableWidget.NoEditTriggers)
self.table.setSelectionBehavior(QTableWidget.SelectRows)
self.table.setColumnCount(2)
self.table.setHorizontalHeaderLabels(['时间', '扫码数据'])
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.grid_layout.addWidget(self.table, 6, 0, 3, 4)
```
7.创建显示当前时间的函数
```python
def show_time(self):
self.label_time.setText(QDateTime.currentDateTime().toString('yyyy-MM-dd hh:mm:ss'))
```
8.创建定时器,实时更新当前时间
```python
timer = QTimer(self)
timer.timeout.connect(self.show_time)
timer.start(1000)
```
9.创建主函数,运行程序
```python
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
10.创建可执行文件
在命令行中输入以下命令:
```
pyinstaller --onefile --windowed --icon=icon.ico main.py
```
其中,--icon=icon.ico是设置程序图标,可以替换为您自己的图标。生成的可执行文件在dist文件夹中。
希望这个程序能够满足您的需求!
阅读全文