This commit is contained in:
ddrwode
2026-01-26 01:13:53 +08:00
parent 2a25d21fa8
commit 78a246e19b

View File

@@ -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