优化拖拽时,结果变量内容错乱的问题。发现新问题:拖拽不对

This commit is contained in:
ruotongyu
2024-05-06 00:13:52 +08:00
parent 346f11cf2b
commit d20e6b7f9e
5 changed files with 63 additions and 37 deletions

View File

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

View File

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

View File

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

View File

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

View File

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