diff --git a/gui_app.py b/gui_app.py index 44be425..213ab18 100644 --- a/gui_app.py +++ b/gui_app.py @@ -945,7 +945,7 @@ class MainWindow(QMainWindow): config_title.setFont(QFont("Microsoft YaHei", 11, QFont.Bold)) config_layout.addWidget(config_title) config_group.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) - config_group.setMaximumHeight(280) + config_group.setMaximumHeight(450) # 增加高度以容纳单条配置输入区域 # Excel导入(合并到配置) import_row = QHBoxLayout() @@ -964,6 +964,76 @@ class MainWindow(QMainWindow): import_row.addWidget(self.download_template_btn) config_layout.addLayout(import_row) + # 添加单条配置输入区域 + add_config_separator = QLabel("或 手动添加单条配置") + add_config_separator.setFont(QFont("Microsoft YaHei", 9, QFont.Bold)) + add_config_separator.setStyleSheet("color: #666; margin-top: 8px;") + config_layout.addWidget(add_config_separator) + + # 单条配置输入表单 + add_config_grid = QGridLayout() + add_config_grid.setHorizontalSpacing(12) + add_config_grid.setVerticalSpacing(8) + + # 第一行:多多ID、序号、话题 + add_config_grid.addWidget(QLabel("多多ID:"), 0, 0) + self.add_user_id_input = LineEdit() + self.add_user_id_input.setPlaceholderText("输入多多ID") + add_config_grid.addWidget(self.add_user_id_input, 0, 1) + + add_config_grid.addWidget(QLabel("序号:"), 0, 2) + self.add_index_input = LineEdit() + self.add_index_input.setPlaceholderText("输入序号") + self.add_index_input.setFixedWidth(80) + add_config_grid.addWidget(self.add_index_input, 0, 3) + + add_config_grid.addWidget(QLabel("话题:"), 0, 4) + self.add_topic_input = LineEdit() + self.add_topic_input.setPlaceholderText("输入话题(如 #话题)") + add_config_grid.addWidget(self.add_topic_input, 0, 5) + + # 第二行:定时发布、间隔时间、达人链接 + add_config_grid.addWidget(QLabel("定时发布:"), 1, 0) + self.add_schedule_input = LineEdit() + self.add_schedule_input.setPlaceholderText("yyyy-MM-dd HH:mm(可选)") + add_config_grid.addWidget(self.add_schedule_input, 1, 1) + + add_config_grid.addWidget(QLabel("间隔(分):"), 1, 2) + self.add_interval_input = LineEdit() + self.add_interval_input.setPlaceholderText("延迟分钟") + self.add_interval_input.setFixedWidth(80) + add_config_grid.addWidget(self.add_interval_input, 1, 3) + + add_config_grid.addWidget(QLabel("达人链接:"), 1, 4) + self.add_expert_link_input = LineEdit() + self.add_expert_link_input.setPlaceholderText("输入达人链接(可选)") + add_config_grid.addWidget(self.add_expert_link_input, 1, 5) + + # 第三行:执行人和添加按钮 + add_config_grid.addWidget(QLabel("执行人:"), 2, 0) + self.add_executor_input = LineEdit() + self.add_executor_input.setPlaceholderText("输入执行人(可选)") + add_config_grid.addWidget(self.add_executor_input, 2, 1) + + add_config_btn_layout = QHBoxLayout() + add_config_btn_layout.addStretch() + self.add_config_btn = PrimaryPushButton("添加到配置列表") + self.add_config_btn.setToolTip("将当前输入的配置添加到配置列表中") + self.add_config_btn.clicked.connect(self.add_single_config) + add_config_btn_layout.addWidget(self.add_config_btn) + self.clear_add_inputs_btn = PushButton("清空输入") + self.clear_add_inputs_btn.clicked.connect(self.clear_add_config_inputs) + add_config_btn_layout.addWidget(self.clear_add_inputs_btn) + add_config_grid.addLayout(add_config_btn_layout, 2, 2, 1, 4) + + config_layout.addLayout(add_config_grid) + + # 分隔线 + divider = QFrame() + divider.setFrameShape(QFrame.HLine) + divider.setStyleSheet("color: rgba(0, 0, 0, 0.12); margin: 8px 0;") + config_layout.addWidget(divider) + grid = QGridLayout() grid.setHorizontalSpacing(12) grid.setVerticalSpacing(10) @@ -999,24 +1069,7 @@ class MainWindow(QMainWindow): update_row_widget.setLayout(update_row) grid.addWidget(update_row_widget, 2, 0, 1, 4) - # 发布间隔控制 - interval_row = QHBoxLayout() - interval_row.addWidget(QLabel("发布间隔时间:")) - self.publish_interval_input = LineEdit() - self.publish_interval_input.setPlaceholderText("如: 5 或 30s 或 2m") - self.publish_interval_input.setFixedWidth(100) - self.publish_interval_input.setText("0") - self.publish_interval_input.setToolTip("设置每条发布任务之间的等待时间\n支持格式: 数字(秒)、30s(秒)、2m(分钟)") - interval_row.addWidget(self.publish_interval_input) - interval_row.addWidget(QLabel("秒")) - interval_row.addSpacing(20) - interval_tip = QLabel("提示: 设置每条发布任务执行完成后的等待时间,0表示不等待") - interval_tip.setStyleSheet("color: #666; font-size: 10px;") - interval_row.addWidget(interval_tip) - interval_row.addStretch() - interval_row_widget = QWidget() - interval_row_widget.setLayout(interval_row) - grid.addWidget(interval_row_widget, 3, 0, 1, 4) + config_layout.addLayout(grid) config_layout.addStretch() @@ -1118,7 +1171,11 @@ class MainWindow(QMainWindow): self.table_column_filter.setCurrentIndex(1) header = self.config_table.horizontalHeader() header.setStretchLastSection(False) - header.setSectionResizeMode(QHeaderView.Interactive) + # 设置列的调整模式 + header.setSectionResizeMode(QHeaderView.Interactive) # 默认交互模式 + # 多多ID和序号列自动拉伸填充剩余空间 + header.setSectionResizeMode(1, QHeaderView.Stretch) # 多多ID + header.setSectionResizeMode(2, QHeaderView.Stretch) # 序号 # 设置文本省略模式(超长文本显示省略号) self.config_table.setTextElideMode(Qt.ElideRight) self.config_table.setAlternatingRowColors(True) @@ -2737,11 +2794,11 @@ class MainWindow(QMainWindow): self.log_match_status.setText(f"匹配: {count}") def _apply_table_column_widths(self): - """应用配置表列宽(不随内容变化)""" + """应用配置表列宽(多多ID和序号自适应,操作列无留白)""" widths = { 0: 50, # 勾选框 - 1: 120, # 多多ID - 2: 80, # 序号 + # 1: 多多ID - Stretch模式,自适应 + # 2: 序号 - Stretch模式,自适应 3: 160, # 话题 4: 160, # 定时发布 5: 110, # 间隔时间 @@ -2755,7 +2812,12 @@ class MainWindow(QMainWindow): for col, width in widths.items(): if col < self.config_table.columnCount(): self.config_table.setColumnWidth(col, width) - # 所有列都可以手动调整宽度(Interactive模式) + # 多多ID和序号列使用Stretch模式,会自动填充剩余空间 + # 设置最小列宽确保内容可见 + if self.config_table.columnCount() > 1: + self.config_table.setColumnWidth(1, 120) # 多多ID最小宽度 + if self.config_table.columnCount() > 2: + self.config_table.setColumnWidth(2, 80) # 序号最小宽度 def _apply_table_view_column_widths(self): """应用 Model/View 列宽""" @@ -2946,6 +3008,88 @@ class MainWindow(QMainWindow): self._show_infobar("error", "错误", error_msg) logger.error(f"导入Excel失败: {e}", exc_info=True) + def add_single_config(self): + """添加单条配置到配置列表""" + try: + # 获取输入框的值 + user_id = self.add_user_id_input.text().strip() + index = self.add_index_input.text().strip() + topic = self.add_topic_input.text().strip() + schedule = self.add_schedule_input.text().strip() + interval_text = self.add_interval_input.text().strip() + expert_link = self.add_expert_link_input.text().strip() + executor = self.add_executor_input.text().strip() + + # 验证必填字段 + if not user_id: + self._show_infobar("warning", "警告", "请输入多多ID") + self.add_user_id_input.setFocus() + return + + if not index: + self._show_infobar("warning", "警告", "请输入序号") + self.add_index_input.setFocus() + return + + # 处理间隔时间 + interval_value = '' + if interval_text: + try: + interval_value = int(float(interval_text)) + except ValueError: + self._show_infobar("warning", "警告", "间隔时间必须是数字") + self.add_interval_input.setFocus() + return + + # 创建配置对象 + config = { + '勾选': False, + '多多id': user_id, + '序号': index, + '话题': topic, + '定时发布': schedule, + '间隔时间': interval_value, + '达人链接': expert_link, + '执行人': executor, + '情况': '待执行', + '文件路径': '' + } + + # 添加到配置列表 + self.configs.append(config) + + # 更新表格显示 + self.update_table() + + # 显示表格 + self.table_group.setVisible(True) + + # 更新状态统计 + self._update_status_statistics() + self.set_status_cards(update_text="未更新") + + # 清空输入框 + self.clear_add_config_inputs() + + self._show_infobar("success", "成功", f"已添加配置: {user_id} - {index}") + + except Exception as e: + error_msg = f"添加配置失败: {str(e)}" + self._show_infobar("error", "错误", error_msg) + logger.error(f"添加配置失败: {e}", exc_info=True) + + def clear_add_config_inputs(self): + """清空单条配置输入框""" + self.add_user_id_input.clear() + self.add_index_input.clear() + self.add_topic_input.clear() + self.add_schedule_input.clear() + self.add_interval_input.clear() + self.add_expert_link_input.clear() + self.add_executor_input.clear() + # 设置焦点到第一个输入框 + self.add_user_id_input.setFocus() + def update_table(self): """更新配置表格""" self.is_updating_table = True