完成代码重构

This commit is contained in:
ruotongyu 2024-03-30 23:46:59 +08:00
parent 2be9b2e30a
commit 0117cd7e33
7 changed files with 41 additions and 44 deletions

View File

@ -14,11 +14,11 @@ class ActionBase(BaseModel):
args: Type[BaseModel]
action_pos: int = -1
action_level: int = -1
config_ui: ClassVar = QtUtil.load_ui("config_page.ui")
def __init__(self, **data: Any):
super().__init__(**data)
self.__ui_name_and_line_edit = {}
self.__config_ui = QtUtil.load_ui("config_page.ui")
def run(self, *args, **kwargs):
raise TypeError("Not realize run function")
@ -41,25 +41,23 @@ class ActionBase(BaseModel):
for field in model_fields:
# 水平布局
h_box_layout = QHBoxLayout()
label = QLabel(self.config_ui)
label = QLabel(self.__config_ui)
label.setText(model_fields[field].title)
line_edit = QLineEdit(self.config_ui)
line_edit = QLineEdit(self.__config_ui)
h_box_layout.addWidget(label)
h_box_layout.addWidget(line_edit)
# 将输入内容填入参数列表
self.__ui_name_and_line_edit[field] = line_edit
v_box_layout.addLayout(h_box_layout)
save_button: QPushButton = self.config_ui.saveButton
save_button.clicked.__getattribute__("connect")(self.__save_button_clicked, the_insert_row)
cancel_button: QPushButton = self.config_ui.cancelButton
cancel_button.clicked.__getattribute__("connect")(self.__cancel_button_clicked
)
container_widget = QWidget(self.config_ui)
self.__ui_name_and_line_edit[field] = line_edit
save_button: QPushButton = self.__config_ui.saveButton
save_button.clicked.__getattribute__("connect")(lambda: self.__save_button_clicked(the_insert_row))
cancel_button: QPushButton = self.__config_ui.cancelButton
cancel_button.clicked.__getattribute__("connect")(self.__cancel_button_clicked)
container_widget = QWidget(self.__config_ui)
container_widget.setLayout(v_box_layout)
self.config_ui.config_list.addWidget(container_widget)
self.__config_ui.config_list.addWidget(container_widget)
def __cancel_button_clicked(self):
self.config_ui.hide()
self.__config_ui.hide()
def __save_button_clicked(self, the_insert_row):
args = {}
@ -70,13 +68,15 @@ class ActionBase(BaseModel):
self.action_level = 0
# 向新位置增加元素
from pages.edit_action_list_view import ActionList
ActionList.insert_item(GlobalUtil.current_page.action_list, self.action_pos, self)
self.config_ui.hide()
from pages.edit_action_list_view import ActionListItem
action_item = ActionListItem(self)
ActionList.insert_item(GlobalUtil.current_page.action_list, self.action_pos, action_item)
self.__config_ui.hide()
def config_page_show(self, the_insert_row):
self.config_page_ui(the_insert_row)
if self.config_ui is None:
if self.__config_ui is None:
raise TypeError("config_ui not config")
# 居上对齐
self.config_ui.config_list.layout().setAlignment(Qt.AlignmentFlag.AlignTop)
self.config_ui.show()
self.__config_ui.config_list.layout().setAlignment(Qt.AlignmentFlag.AlignTop)
self.__config_ui.show()

View File

@ -5,7 +5,7 @@ from utils.llm_util import LLMUtil
class LLMInput(BaseModel):
question: str = Field(description="需要问的问题", title="问题内容")
question: str = Field(description="需要问的问题", title="问题内容", default="")
class LLMAction(ActionBase):

View File

@ -1,15 +1,16 @@
import time
from pydantic import BaseModel, Field
from actions.action_base import ActionBase
class LoopInput(BaseModel):
loop_number: int = Field(description="循环次数", title="循环次数")
stop_condition: int = Field(description="循环退出条件python表达式", title="循环退出条件")
loop_interval_time: int = Field(description="循环间隔时间,单位是秒", title="循环间隔时间(秒)")
loop_number: int = Field(description="循环次数", title="循环次数", default=0)
stop_condition: int = Field(description="循环退出条件python表达式", title="循环退出条件", default="False")
loop_interval_time: int = Field(description="循环间隔时间,单位是秒", title="循环间隔时间(秒)", default=0)
# action_list__ 代表内置参数会被映射成ActionList对象
action_list: list[ActionBase] = Field(description="循环执行的内容", title="循环执行的内容")
action_list: list[ActionBase] = Field(description="循环执行的内容", title="循环执行的内容", default=[])
class LoopAction(ActionBase):

View File

@ -15,10 +15,4 @@ class OpenApplicationAction(ActionBase):
args: OpenApplicationInput
def run(self, path):
subprocess.Popen(path)
if __name__ == '__main__':
action = OpenApplicationAction(args={})
action.args.path = "ccc"
print(action)
subprocess.Popen(path)

View File

@ -52,6 +52,7 @@ def load():
func_status=edit_page_json["func_status"],
func_list_pos_row=edit_page_json["func_list_pos_row"],
func_list_pos_column=edit_page_json["func_list_pos_column"],
# TODO待优化加载问题
action_list=ActionList.load(edit_page_json["action_list"]))
edit_page.func_name = edit_page_json["func_name"]
edit_page.func_description = edit_page_json["func_description"]

View File

@ -20,19 +20,19 @@ class ActionListItem(QListWidgetItem):
def load(data: dict):
if data.get("name"):
action_model = ActionUtil.get_action_by_name(data.get("name"))
assert isinstance(action_model, ActionBase)
return ActionListItem(action_model.model_validate(data.get("name")))
assert isinstance(action_model, ActionBase.__class__)
return ActionListItem(action_model.model_validate(data.get("data")))
else:
raise ValueError("data must have a key named 'name'")
def dump(self):
return self.action.dict()
return {"name": self.action.name, "data": self.action.dict()}
class ActionList(QListWidget):
MY_MIME_TYPE = "ActionListView/data_drag"
def __init__(self, actions: list[ActionBase] = None, parent=None, level=0):
def __init__(self, action_list_items: list[ActionListItem] = None, parent=None, level=0):
super().__init__()
# 设置列表项之间的间距为 3 像素
self.ITEM_MARGIN_LEFT = 3
@ -55,14 +55,14 @@ class ActionList(QListWidget):
self.init()
if parent:
self.setParent(parent)
if not actions:
actions = []
for action in actions:
self.insertItem(action.action_pos, ActionListItem(action))
if not action_list_items:
action_list_items = []
for action_list_item in action_list_items:
self.insertItem(action_list_item.action.action_pos, action_list_item)
@classmethod
def load(cls, actions_raw_data: List[ActionBase]):
actions = [i.model_validate(i) for i in actions_raw_data]
def load(cls, actions_raw_data: List[dict]):
actions = [ActionListItem.load(i) for i in actions_raw_data]
action_list_view = ActionList(actions, level=0)
return action_list_view
@ -71,9 +71,9 @@ class ActionList(QListWidget):
# 获取所有 items
for i in range(self.count()):
item = self.item(i)
if not isinstance(item, ActionBase):
if not isinstance(item, ActionListItem):
raise TypeError("item must be an instance of ActionListItem")
res.append(item.dict())
res.append(item.dump())
return res
def init(self):
@ -267,7 +267,7 @@ class ActionList(QListWidget):
item = widget.property("action_item")
item.setSizeHint(widget.size())
# 插入带包含的组件
if action_item.action.action_name == "循环执行":
if action_item.action.name == "循环执行":
from pages.include_action_ui import IncludeActionUi
widget = IncludeActionUi().widget(action_list.level + 1)
widget.setProperty("parent_action_list", action_list)

View File

@ -1,6 +1,8 @@
import os
import pickle
from utils.config import Config
class GlobalUtil:
edit_page_global = []
@ -39,7 +41,6 @@ class GlobalUtil:
@classmethod
def load_data(cls):
# 根据配置文件的配置,从本地文件中或者网上读取
from utils.config import Config
config = Config()
cls.edit_page_global = []
if config.DATA_POSITION == "local":