Flet框架实现的异步管理独立多窗口自定义模板特色和实现原理深度解析
一、效果展示截图
二、应用场景
- 多任务处理:适用于需要同时运行多个子任务或子窗口的应用程序,每个子窗口可以独立执行不同的功能。
- 客户端-服务器架构:适用于需要与服务器进行通信的应用程序,例如实时数据更新、消息传递等。
- 桌面应用开发:适用于开发复杂的桌面应用程序,特别是那些需要多个窗口协同工作的场景。
三、特色说明
-
异步处理:
- 使用
asyncio
进行异步处理,确保主界面和子窗口之间的通信不会阻塞主线程。 - 通过
asyncio.start_server
启动一个异步的 socket 服务器,处理客户端连接和数据传输。
- 使用
-
多窗口管理:
- 主界面通过按钮启动不同的子窗口,每个子窗口独立运行。
- 子窗口的启动通过
os.system
调用独立的 Python 脚本,确保每个子窗口在单独的进程中运行。
-
模块化设计:
child_common.py
提供了通用的子窗口处理逻辑,避免了代码重复。- 每个子窗口脚本(如
child1.py
,child2.py
,child3.py
)只需要调用setup_child_window
函数,传入相应的子窗口 ID 即可。
-
灵活的 UI 组件:
- 使用 Flet 库构建用户界面,支持丰富的 UI 组件,如按钮、文本等。
- 通过
ft.Page
对象管理页面状态和组件,确保界面的动态性和交互性。
-
始终置顶:
- 子窗口可以通过设置
page.window.always_on_top = True
来确保始终显示在最上层,方便用户操作。
- 子窗口可以通过设置
-
数据通信:
- 子窗口通过 socket 与主窗口或其他子窗口进行通信,实现数据的实时传递和同步。
- 通过
asyncio.open_connection
建立连接,并使用reader
和writer
进行数据读写。
四、概括说明
该模板通过异步处理和多窗口管理,提供了一个灵活且强大的框架,适用于需要多任务处理和实时数据通信的桌面应用程序开发。模块化的设计使得代码更加简洁和易于维护。这个应用涉及多线程、多进程和异步编程,用于管理和控制多个独立窗口。具体来说:管理和控制多个独立窗口。
五、Flet异步多窗口Socket通信应用实现原理分析
这段代码实现了一个基于Flet框架的多窗口应用,主窗口和子窗口之间通过Socket进行异步通信。下面是对实现原理的详细分析:
(一)系统架构
1. 多进程架构
- 主窗口进程:运行Socket服务器,管理子窗口的启动
- 子窗口进程:多个独立的Flet应用,作为Socket客户端连接到主窗口
2. 通信机制
- 使用TCP Socket进行进程间通信
- 主窗口作为服务器监听端口18585
- 子窗口作为客户端连接到主窗口
(二)主窗口实现原理
1. Socket服务器
def start_socket(page):
async def handle_client(reader, writer):
data = await reader.read(100)
message = data.decode()
addr = writer.get_extra_info("peername")
print(f"Received {
message} from {
addr}")
if message == "bye":
writer.close()
await writer.wait_closed()
else:
response = f"Echo: