from PySide6.QtWidgets import ( QDialog, QLabel, QLineEdit, QComboBox, QPushButton, QVBoxLayout, QHBoxLayout, QFrame, QTableWidget, QTableWidgetItem, QHeaderView, QDateEdit, QApplication ) from PySide6.QtCore import Qt, QDate from PySide6.QtGui import QFont class LunoQueryDialogUI(QDialog): def __init__(self): super().__init__() self.setWindowTitle("炉号查询") self.resize(1200, 600) # 调整宽度和高度 # 设置字体 self.normal_font = QFont("微软雅黑", 10) self.title_font = QFont("微软雅黑", 10, QFont.Bold) # 初始化UI self.init_ui() def init_ui(self): """初始化UI""" # 主布局 self.main_layout = QVBoxLayout(self) self.main_layout.setContentsMargins(20, 20, 20, 20) self.main_layout.setSpacing(10) # 创建查询条件区域 self.create_query_frame() # 创建结果表格 self.create_result_table() # 创建按钮 self.create_buttons() def create_query_frame(self): """创建查询条件区域""" # 创建一个带边框的容器 query_frame = QFrame() query_frame.setStyleSheet(""" QFrame { border: 1px solid #e0e0e0; background-color: white; border-radius: 4px; } """) # 容器的垂直布局 query_layout = QVBoxLayout(query_frame) query_layout.setContentsMargins(15, 15, 15, 15) query_layout.setSpacing(10) # 第一行:日期范围和炉号 row1 = QHBoxLayout() # 日期标签 date_label = QLabel("日期:") date_label.setFont(self.normal_font) date_label.setFixedWidth(40) # 开始日期 self.start_date = QDateEdit() self.start_date.setFont(self.normal_font) self.start_date.setCalendarPopup(True) self.start_date.setDate(QDate.currentDate().addDays(-7)) self.start_date.setFixedWidth(120) self.start_date.setStyleSheet(""" QDateEdit { border: 1px solid #e0e0e0; padding: 4px; border-radius: 4px; } """) # 至标签 to_label = QLabel("至:") to_label.setFont(self.normal_font) to_label.setFixedWidth(20) # 结束日期 self.end_date = QDateEdit() self.end_date.setFont(self.normal_font) self.end_date.setCalendarPopup(True) self.end_date.setDate(QDate.currentDate()) self.end_date.setFixedWidth(120) self.end_date.setStyleSheet(""" QDateEdit { border: 1px solid #e0e0e0; padding: 4px; border-radius: 4px; } """) # 炉号标签 luno_label = QLabel("炉号:") luno_label.setFont(self.normal_font) luno_label.setFixedWidth(50) # 炉号输入框 self.luno_input = QLineEdit() self.luno_input.setFont(self.normal_font) self.luno_input.setStyleSheet(""" QLineEdit { border: 1px solid #e0e0e0; padding: 4px; border-radius: 4px; } QLineEdit:focus { border: 1px solid #66afe9; } """) # 材质标签 material_label = QLabel("材质") material_label.setFont(self.normal_font) material_label.setFixedWidth(40) # 材质下拉框 self.material_combo = QComboBox() self.material_combo.setFont(self.normal_font) self.material_combo.addItem("全部") self.material_combo.setStyleSheet(""" QComboBox { border: 1px solid #e0e0e0; padding: 4px; border-radius: 4px; } QComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; width: 20px; border-left: 1px solid #e0e0e0; } """) # 规格标签 spec_label = QLabel("规格") spec_label.setFont(self.normal_font) spec_label.setFixedWidth(40) # 规格输入框 self.spec_input = QLineEdit() self.spec_input.setFont(self.normal_font) self.spec_input.setStyleSheet(""" QLineEdit { border: 1px solid #e0e0e0; padding: 4px; border-radius: 4px; } QLineEdit:focus { border: 1px solid #66afe9; } """) # 钢厂标签 steel_label = QLabel("钢厂") steel_label.setFont(self.normal_font) steel_label.setFixedWidth(40) # 钢厂输入框 self.steel_input = QLineEdit() self.steel_input.setFont(self.normal_font) self.steel_input.setStyleSheet(""" QLineEdit { border: 1px solid #e0e0e0; padding: 4px; border-radius: 4px; } QLineEdit:focus { border: 1px solid #66afe9; } """) # 查询按钮 self.query_button = QPushButton("查询") self.query_button.setFont(self.normal_font) self.query_button.setStyleSheet(""" QPushButton { background-color: #0078d4; color: white; border: none; border-radius: 4px; padding: 6px 16px; } QPushButton:hover { background-color: #106ebe; } QPushButton:pressed { background-color: #005a9e; } """) self.query_button.setFixedWidth(80) # 添加组件到第一行布局 row1.addWidget(date_label) row1.addWidget(self.start_date) row1.addWidget(to_label) row1.addWidget(self.end_date) row1.addSpacing(20) row1.addWidget(luno_label) row1.addWidget(self.luno_input, 1) row1.addSpacing(20) row1.addWidget(material_label) row1.addWidget(self.material_combo, 1) row1.addSpacing(20) row1.addWidget(spec_label) row1.addWidget(self.spec_input, 1) row1.addSpacing(20) row1.addWidget(steel_label) row1.addWidget(self.steel_input, 1) row1.addSpacing(20) row1.addWidget(self.query_button) # 添加第一行到查询布局 query_layout.addLayout(row1) # 将查询框架添加到主布局 self.main_layout.addWidget(query_frame) def create_result_table(self): """创建结果表格""" # 创建表格 self.result_table = QTableWidget() self.result_table.setFont(self.normal_font) # 设置表头样式 header = self.result_table.horizontalHeader() header.setStyleSheet(""" QHeaderView::section { background-color: #f5f5f5; color: #333333; padding: 5px; border: 1px solid #e0e0e0; font-weight: bold; } """) # 设置表格样式 self.result_table.setStyleSheet(""" QTableWidget { border: 1px solid #e0e0e0; gridline-color: #e0e0e0; selection-background-color: #0078d4; selection-color: white; } QTableWidget::item { padding: 5px; border-bottom: 1px solid #e0e0e0; } """) # 启用水平滚动条 self.result_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) # 设置表头固定宽度模式,确保所有列都能显示 header.setSectionResizeMode(QHeaderView.Fixed) # 设置表格最小宽度,确保有足够空间显示滚动条 self.result_table.setMinimumWidth(800) # 设置默认列宽 self.result_table.setColumnWidth(0, 60) # 序号 self.result_table.setColumnWidth(1, 100) # 日期 self.result_table.setColumnWidth(2, 120) # 炉号 self.result_table.setColumnWidth(3, 100) # 材质 self.result_table.setColumnWidth(4, 100) # 规格 self.result_table.setColumnWidth(5, 100) # 钢厂 self.result_table.setColumnWidth(6, 80) # 标准 self.result_table.setColumnWidth(7, 100) # 公司账套 self.result_table.setColumnWidth(8, 60) # C self.result_table.setColumnWidth(9, 60) # Si self.result_table.setColumnWidth(10, 60) # Mn self.result_table.setColumnWidth(11, 60) # P self.result_table.setColumnWidth(12, 60) # S self.result_table.setColumnWidth(13, 60) # Ni self.result_table.setColumnWidth(14, 60) # Cr self.result_table.setColumnWidth(15, 60) # Ti self.result_table.setColumnWidth(16, 60) # Mo self.result_table.setColumnWidth(17, 60) # Cu self.result_table.setColumnWidth(18, 80) # 其他 self.result_table.setColumnWidth(19, 100) # 抗拉强度 self.result_table.setColumnWidth(20, 80) # 延伸率 # 设置表格可以选择整行 self.result_table.setSelectionBehavior(QTableWidget.SelectRows) # 设置表格只能单选 self.result_table.setSelectionMode(QTableWidget.SingleSelection) # 添加表格到主布局 self.main_layout.addWidget(self.result_table, 1) # 1表示拉伸因子,让表格占据更多空间 def create_buttons(self): """创建底部按钮""" button_layout = QHBoxLayout() # 确认和取消按钮 self.confirm_button = QPushButton("确认") self.confirm_button.setFont(self.normal_font) self.confirm_button.setStyleSheet(""" QPushButton { background-color: #0078d4; color: white; border: none; border-radius: 4px; padding: 8px 16px; font-weight: bold; } QPushButton:hover { background-color: #106ebe; } QPushButton:pressed { background-color: #005a9e; } """) self.confirm_button.setFixedSize(100, 35) self.cancel_button = QPushButton("取消") self.cancel_button.setFont(self.normal_font) self.cancel_button.setStyleSheet(""" QPushButton { background-color: white; color: #333333; border: 1px solid #e0e0e0; border-radius: 4px; padding: 8px 16px; font-weight: bold; } QPushButton:hover { background-color: #f5f5f5; } QPushButton:pressed { background-color: #e0e0e0; } """) self.cancel_button.setFixedSize(100, 35) # 添加按钮到布局 button_layout.addStretch() button_layout.addWidget(self.confirm_button) button_layout.addSpacing(30) # 添加30px的间距 button_layout.addWidget(self.cancel_button) # 添加按钮布局到主布局 self.main_layout.addLayout(button_layout)