mirror of
https://github.com/yuruotong1/autoMate.git
synced 2025-12-26 13:52:31 +08:00
完成代码重构
This commit is contained in:
parent
2be9b2e30a
commit
0117cd7e33
@ -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()
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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)
|
||||
1
main.py
1
main.py
@ -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"]
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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":
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user