You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
9.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
import sqlite3
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(994, 710)
self.gridLayout_2 = QtWidgets.QGridLayout(Form)
self.gridLayout_2.setObjectName("gridLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtWidgets.QLabel(Form)
self.label.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.dateEdit = QtWidgets.QDateEdit(Form)
self.dateEdit.setObjectName("dateEdit")
self.horizontalLayout.addWidget(self.dateEdit)
spacerItem = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setObjectName("label_2")
self.horizontalLayout.addWidget(self.label_2)
self.dateEdit_2 = QtWidgets.QDateEdit(Form)
self.dateEdit_2.setObjectName("dateEdit_2")
self.horizontalLayout.addWidget(self.dateEdit_2)
spacerItem1 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem1)
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setObjectName("label_3")
self.horizontalLayout.addWidget(self.label_3)
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem2)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.horizontalLayout.setStretch(1, 2)
self.horizontalLayout.setStretch(4, 2)
self.gridLayout_2.addLayout(self.horizontalLayout, 0, 0, 1, 1)
self.tableView = QtWidgets.QTableView(Form)
self.tableView.setObjectName("tableView")
self.gridLayout_2.addWidget(self.tableView, 1, 0, 1, 1)
self.signalconnect()
self.set_dates()
self.tableView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.tableView.doubleClicked.connect(self.on_table_item_double_clicked) # 连接双击事件
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label.setText(_translate("Form", "起始日期:"))
self.label_2.setText(_translate("Form", "终止日期:"))
self.label_3.setText(_translate("Form", "编号:"))
self.pushButton.setText(_translate("Form", "查询"))
def signalconnect(self):
# 连接按钮点击信号到 searchButton 方法
self.pushButton.clicked.connect(self.searchButton)
# 连接日期编辑的变化信号
self.dateEdit.dateChanged.connect(self.update_dateEdit_2_min_date)
def searchButton(self):
# 获取用户输入的日期范围和编号
start_date = self.dateEdit.date().toString("yyyy-MM-dd")
end_date = self.dateEdit_2.date().toString("yyyy-MM-dd")
search_text = self.lineEdit.text()
# 根据输入的条件查询数据库
filtered_data = self.get_filtered_data_from_db(start_date, end_date, search_text)
# 显示查询结果到 tableView
self.display_data_in_table(filtered_data)
def set_dates(self):
# 获取数据库中最早的日期
earliest_date = self.get_earliest_date_from_db()
# 设置 dateEdit 为数据库中最早的日期
if earliest_date:
self.dateEdit.setDate(QtCore.QDate.fromString(earliest_date, "yyyy-MM-dd"))
self.dateEdit.setMinimumDate(QtCore.QDate.fromString(earliest_date, "yyyy-MM-dd")) # 限制不能低于最早日期
# 设置 dateEdit_2 为今天的日期
today = QtCore.QDate.currentDate()
self.dateEdit_2.setDate(today)
# 设置 dateEdit_2 的最小日期为 dateEdit 的当前日期
self.dateEdit_2.setMinimumDate(self.dateEdit.date())
# 初始化数据:加载初始范围内的数据到 tableView
start_date = self.dateEdit.date().toString("yyyy-MM-dd")
end_date = self.dateEdit_2.date().toString("yyyy-MM-dd")
filtered_data = self.get_filtered_data_from_db(start_date, end_date, "")
self.display_data_in_table(filtered_data)
def get_earliest_date_from_db(self):
# 假设你使用 SQLite 数据库,获取最早日期的查询语句
try:
connection = sqlite3.connect("PCB_database.db") # 替换为你的数据库文件路径
cursor = connection.cursor()
cursor.execute("SELECT MIN(date_added) FROM results") # 替换为你的表和日期列
earliest_date = cursor.fetchone()[0]
connection.close()
return earliest_date # 返回最早的日期字符串,格式为 "yyyy-MM-dd"
except Exception as e:
print(f"Error fetching earliest date: {e}")
return None
def get_filtered_data_from_db(self, start_date, end_date, search_text):
# 假设你使用 SQLite 数据库,查询在 start_date 和 end_date 之间的数据,并根据 search_text 筛选
try:
connection = sqlite3.connect("PCB_database.db") # 替换为你的数据库文件路径
cursor = connection.cursor()
query = f"""
SELECT * FROM results
WHERE date_added BETWEEN ? AND ? AND id LIKE ?
"""
cursor.execute(query, (start_date, end_date, f"%{search_text}%"))
data = cursor.fetchall()
connection.close()
return data # 返回查询结果
except Exception as e:
print(f"Error fetching filtered data: {e}")
return []
def display_data_in_table(self, data):
# 将数据填充到 tableView 中
model = QtGui.QStandardItemModel()
model.setHorizontalHeaderLabels(["编号", "类别", "位置","置信度", "图片位置", "检测时间"]) # 替换为你的列名
# 添加数据行到 model
for row in data:
row_items = [QtGui.QStandardItem(str(cell)) for cell in row]
model.appendRow(row_items)
# 设置模型到 tableView
self.tableView.setModel(model)
# 调整列宽以适应内容
self.tableView.resizeColumnsToContents() # 自动调整列宽
# 确保最后一列填满剩余空间
header = self.tableView.horizontalHeader()
header.setStretchLastSection(True) # 使最后一列占据剩余空间
# 调整窗口大小
self.adjust_window_size()
def update_dateEdit_2_min_date(self):
# 更新 dateEdit_2 的最小日期为 dateEdit 的当前日期
self.dateEdit_2.setMinimumDate(self.dateEdit.date()) # 仅设置最小日期,显示的日期保持不变
def adjust_window_size(self):
# 获取父窗口的宽度
parent = self.tableView.parent()
if parent:
# 获取 tableView 的列宽总和
table_width = self.tableView.horizontalHeader().length()
new_width = table_width + 50 # 给窗口额外留出 50 的边距
# 更新父窗口的宽度,保持高度不变
parent.resize(new_width, parent.height()) # 仅修改宽度
def on_table_item_double_clicked(self, index):
# 获取双击的行号和列号
row = index.row()
column = index.column()
if column != 4: # 如果不是图片位置列,仍然处理
image_path = self.tableView.model().data(self.tableView.model().index(row, 4))
# 如果路径有效,打开图片
if image_path:
self.show_image(image_path)
def show_image(self, image_path):
# 打开图片
try:
# 使用QPixmap来加载图片
pixmap = QtGui.QPixmap(image_path)
if not pixmap.isNull():
# 创建图形视图窗口显示图片
image_window = QtWidgets.QDialog()
image_window.setWindowTitle("图片查看")
image_window.setFixedSize(pixmap.width(), pixmap.height())
# 创建一个图形视图Graphics View来显示图片
view = QtWidgets.QGraphicsView(image_window)
scene = QtWidgets.QGraphicsScene(view)
view.setScene(scene)
# 创建一个PixMap项并将图片添加到场景中
pixmap_item = QtWidgets.QGraphicsPixmapItem(pixmap)
scene.addItem(pixmap_item)
image_window.exec_() # 显示窗口
else:
QtWidgets.QMessageBox.warning(None, "错误", "无法加载图片!")
except Exception as e:
QtWidgets.QMessageBox.warning(None, "错误", f"打开图片时出错: {str(e)}")