haha
This commit is contained in:
192
gui_app.py
192
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
|
||||
|
||||
Reference in New Issue
Block a user