Hbin-Zhuang
♻️ refactor2: UI控制器分离与表示层重构
eed23a7
"""
UI控制器基类
提供UI组件的统一管理和事件处理接口
"""
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional
import gradio as gr
class UIController(ABC):
"""UI控制器抽象基类
定义UI组件的标准接口,包括组件创建、事件绑定和状态管理
"""
def __init__(self, name: str):
"""初始化UI控制器
Args:
name: 控制器名称,用于标识和调试
"""
self.name = name
self.components: Dict[str, Any] = {}
self.event_handlers: List[Dict[str, Any]] = []
@abstractmethod
def create_components(self) -> Dict[str, Any]:
"""创建UI组件
Returns:
包含所有UI组件的字典,键为组件名称,值为Gradio组件对象
"""
pass
@abstractmethod
def setup_events(self) -> List[Dict[str, Any]]:
"""设置事件绑定
Returns:
事件绑定配置列表,每个配置包含组件、事件类型、处理函数等信息
"""
pass
def get_component(self, name: str) -> Optional[Any]:
"""获取指定名称的组件
Args:
name: 组件名称
Returns:
组件对象,如果不存在则返回None
"""
return self.components.get(name)
def initialize(self) -> None:
"""初始化控制器
依次执行组件创建和事件设置
"""
self.components = self.create_components()
self.event_handlers = self.setup_events()
def render(self) -> Any:
"""渲染UI组件
子类可以重写此方法来自定义渲染逻辑
Returns:
渲染后的UI组件或容器
"""
return self.components
class TabController(UIController):
"""Tab页面控制器基类
专门用于管理Gradio Tab页面的控制器
"""
def __init__(self, name: str, title: str):
"""初始化Tab控制器
Args:
name: 控制器名称
title: Tab页面标题
"""
super().__init__(name)
self.title = title
self.tab_container = None
def render(self) -> gr.Tab:
"""渲染Tab页面
Returns:
包含所有组件的Gradio Tab对象
"""
with gr.Tab(self.title) as self.tab_container:
self._render_content()
return self.tab_container
@abstractmethod
def _render_content(self) -> None:
"""渲染Tab页面内容
子类需要实现此方法来定义具体的页面布局
"""
pass