mirror of
https://github.com/yuruotong1/autoMate.git
synced 2026-03-22 13:07:17 +08:00
优化拖拽时,结果变量内容错乱的问题。发现新问题:拖拽不对
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
from typing import Type, Any, ClassVar
|
||||
|
||||
from PyQt6.QtCore import Qt
|
||||
from PyQt6.QtWidgets import QHBoxLayout, QLabel, QLineEdit, QWidget, QPushButton, QVBoxLayout
|
||||
from langchain_core.tools import StructuredTool
|
||||
from PyQt6.QtWidgets import QHBoxLayout, QLabel, QLineEdit, QPushButton
|
||||
from pydantic import BaseModel
|
||||
from utils.global_util import GlobalUtil
|
||||
|
||||
from utils.qt_util import QtUtil
|
||||
|
||||
|
||||
@@ -13,18 +11,22 @@ class ActionBase(BaseModel):
|
||||
name: ClassVar[str]
|
||||
description: ClassVar[str]
|
||||
args: Type[BaseModel]
|
||||
output_save_name: ClassVar[str]
|
||||
output_save_name: str = ""
|
||||
action_pos: int = -1
|
||||
action_level: int = -1
|
||||
|
||||
def __init__(self, **data: Any):
|
||||
def __init__(self, output_save_name_from_drag: str = None, **data: Any):
|
||||
super().__init__(**data)
|
||||
self._ui_name_and_line_edit = {}
|
||||
self._output_edit = None
|
||||
self._config_ui = QtUtil.load_ui("action_config_page.ui")
|
||||
self._parent = None
|
||||
self._is_config_page_init = False
|
||||
|
||||
# 如果拖动过 action,则使用传进来的 output_save_name
|
||||
self._output_save_name_from_drag = output_save_name_from_drag
|
||||
|
||||
def set_output_save_name_from_drag(self, output_save_name_from_drag: str):
|
||||
self._output_save_name_from_drag = output_save_name_from_drag
|
||||
|
||||
def set_parent(self, parent):
|
||||
self._parent = parent
|
||||
@@ -39,7 +41,7 @@ class ActionBase(BaseModel):
|
||||
res = self.run(**self.args.model_dump())
|
||||
# 保存输出结果
|
||||
if self.output_save_name:
|
||||
GlobalUtil.current_page.output_save_dict[self._output_edit.text()] = res
|
||||
self._get_edit_page().output_save_dict[self._output_edit.text()] = res
|
||||
return res
|
||||
|
||||
# 设置配置界面的布局
|
||||
@@ -66,18 +68,26 @@ class ActionBase(BaseModel):
|
||||
output_line_edit = QLineEdit("output_save_name")
|
||||
self._output_edit = output_line_edit
|
||||
# 获取 editPage 页面的 output_save_dict
|
||||
output_save_dict = self.get_parent().get_parent().get_parent().output_save_dict
|
||||
output_save_name = self.output_save_name
|
||||
# 为输出结果自动取名
|
||||
i = 1
|
||||
while True:
|
||||
if output_save_name in output_save_dict:
|
||||
output_save_name = self.output_save_name + "_" + str(i)
|
||||
i += 1
|
||||
continue
|
||||
else:
|
||||
output_line_edit.setText(output_save_name)
|
||||
break
|
||||
output_save_dict = self._get_edit_page().output_save_dict
|
||||
# 使用外部传进来的 output_save_name
|
||||
if self._output_save_name_from_drag:
|
||||
self.output_save_name = self._output_save_name_from_drag
|
||||
# 设置编辑框的默认名称
|
||||
output_line_edit.setText(self.output_save_name)
|
||||
else:
|
||||
output_save_name = self.output_save_name
|
||||
# 为输出结果自动取名
|
||||
i = 1
|
||||
while True:
|
||||
if output_save_name in output_save_dict:
|
||||
output_save_name = self.output_save_name + "_" + str(i)
|
||||
i += 1
|
||||
continue
|
||||
else:
|
||||
self.output_save_name = output_save_name
|
||||
# 设置编辑框的默认名称
|
||||
output_line_edit.setText(output_save_name)
|
||||
break
|
||||
self._config_ui.output_config.addWidget(output_label)
|
||||
self._config_ui.output_config.addWidget(output_line_edit)
|
||||
else:
|
||||
@@ -86,8 +96,16 @@ class ActionBase(BaseModel):
|
||||
def __cancel_button_clicked(self):
|
||||
self._config_ui.hide()
|
||||
|
||||
def _get_edit_page(self):
|
||||
return self.get_parent().get_parent().get_parent()
|
||||
|
||||
def _get_action_list(self):
|
||||
return self.get_parent().get_parent()
|
||||
|
||||
def _get_action_list_item(self):
|
||||
return self.get_parent()
|
||||
|
||||
def __save_button_clicked(self):
|
||||
from pages.edit_page import GlobalUtil
|
||||
arg = {}
|
||||
for arg_name in self._ui_name_and_line_edit:
|
||||
arg[arg_name] = self._ui_name_and_line_edit[arg_name].text()
|
||||
@@ -95,9 +113,13 @@ class ActionBase(BaseModel):
|
||||
self.action_level = 0
|
||||
# 如果设置了output_save_name,向全局中插入该变量
|
||||
if hasattr(self, "output_save_name"):
|
||||
output_save_name = self._output_edit.text()
|
||||
GlobalUtil.current_page.output_save_dict[output_save_name] = ""
|
||||
self.output_save_name = self._output_edit.text()
|
||||
self._get_edit_page().output_save_dict[self.output_save_name] = ""
|
||||
self._config_ui.hide()
|
||||
if self._get_action_list_item() not in self._get_action_list().action_list_items:
|
||||
from pages.edit_action_list_view import ActionList
|
||||
ActionList.insert_item(self._get_action_list(), self.action_pos, self._get_action_list_item())
|
||||
|
||||
|
||||
def config_page_show(self):
|
||||
save_button: QPushButton = self._config_ui.saveButton
|
||||
|
||||
@@ -10,7 +10,7 @@ class LLMInput(BaseModel):
|
||||
|
||||
class LLMAction(ActionBase):
|
||||
name = "大模型问答"
|
||||
output_save_name = "llm_response"
|
||||
output_save_name:str = "llm_response"
|
||||
description = "利用大模型进行回答"
|
||||
args: LLMInput
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class PythonExecutorActoin(ActionBase):
|
||||
name = "执行python代码"
|
||||
description = "执行python代码"
|
||||
args: PythonExecutorInput
|
||||
output_save_name = "python_output"
|
||||
output_save_name:str = "python_output"
|
||||
|
||||
def config_page_ui(self):
|
||||
code_editor = QCodeEditor(display_line_numbers=True,
|
||||
@@ -23,14 +23,14 @@ class PythonExecutorActoin(ActionBase):
|
||||
syntax_high_lighter=PythonHighlighter)
|
||||
self._config_ui.config_list.addWidget(code_editor)
|
||||
self._ui_name_and_line_edit["code"] = code_editor
|
||||
code_editor.setPlainText('# 保存输出结果\n' + self._output_edit.text() + " = ''")
|
||||
code_editor.setPlainText('# 保存输出结果\n' + self.output_save_name + " = ''")
|
||||
|
||||
|
||||
# 执行python代码
|
||||
def run(self, code):
|
||||
environent = {}
|
||||
exec(code, environent)
|
||||
return environent[self._output_edit.text()]
|
||||
return environent[self.output_save_name]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -67,7 +67,8 @@ class ActionList(QListWidget):
|
||||
self._parent = parent
|
||||
if not action_list_items:
|
||||
action_list_items = []
|
||||
for action_list_item in action_list_items:
|
||||
self.action_list_items = action_list_items
|
||||
for action_list_item in self.action_list_items:
|
||||
self.insertItem(action_list_item.action.action_pos, action_list_item)
|
||||
|
||||
@classmethod
|
||||
@@ -116,8 +117,7 @@ class ActionList(QListWidget):
|
||||
item = self.itemAt(event.pos())
|
||||
item.action.config_page_show()
|
||||
|
||||
|
||||
|
||||
|
||||
# 记录拖拽初始位置
|
||||
def mousePressEvent(self, e):
|
||||
# 如果在历史事件中左键点击过
|
||||
@@ -231,11 +231,12 @@ class ActionList(QListWidget):
|
||||
self.drop_down_action = action(args={})
|
||||
# 向新位置增加元素
|
||||
action_item = ActionListItem(self.drop_down_action, parent=self)
|
||||
ActionList.insert_item(GlobalUtil.current_page.action_list, self.the_insert_row, action_item)
|
||||
self.drop_down_action.set_parent(action_item)
|
||||
self.drop_down_action.config_page_show()
|
||||
else:
|
||||
drag_action_item = ActionListItem.load(source_data)
|
||||
drag_action_item.set_parent(self)
|
||||
drag_action_item.action.set_output_save_name_from_drag(drag_action_item.action.output_save_name)
|
||||
drag_action_item.action.action_pos = self.the_insert_row
|
||||
# 如果拖动前位置和拖动后位置相同
|
||||
if self.the_insert_row == self.the_drag_row and self.level == drag_action_item.action.action_level:
|
||||
|
||||
@@ -18,20 +18,23 @@ class FunctionListView(QListWidget):
|
||||
# 禁止双击编辑
|
||||
self.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
|
||||
for func in ActionUtil.get_funcs():
|
||||
item = QListWidgetItem()
|
||||
item.setText(func.name)
|
||||
self.addItem(item)
|
||||
action = func(args={})
|
||||
# 向新位置增加元素
|
||||
action_item = ActionListItem(action)
|
||||
action.set_parent(action_item)
|
||||
action_item.setText(func.name)
|
||||
self.addItem(action_item)
|
||||
|
||||
def mouseDoubleClickEvent(self, e):
|
||||
item = self.itemAt(e.pos())
|
||||
if not isinstance(item, ActionListItem):
|
||||
return
|
||||
item.set_parent(GlobalUtil.current_page.action_list)
|
||||
item.action.action_pos = GlobalUtil.current_page.action_list.count()
|
||||
# 打开配置页面
|
||||
item.action.config_page_show()
|
||||
# 向新位置增加元素
|
||||
from pages.edit_action_list_view import ActionList,ActionListItem
|
||||
action_item = ActionListItem(item.action)
|
||||
ActionList.insert_item(GlobalUtil.current_page.action_list, GlobalUtil.current_page.action_list.count(), action_item)
|
||||
|
||||
|
||||
|
||||
# 记录拖拽初始位置
|
||||
def mousePressEvent(self, e):
|
||||
|
||||
Reference in New Issue
Block a user