初始化
This commit is contained in:
49
demo/mvvm/view.py
Normal file
49
demo/mvvm/view.py
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
View 层。
|
||||
|
||||
View 负责界面控件的创建、显示和刷新。这里使用 PyQt5 的 QMainWindow
|
||||
作为主窗口,并把 QTextBrowser 包装成一个 LogView,方便接入 MVVM 绑定。
|
||||
"""
|
||||
from PyQt5.QtWidgets import *
|
||||
|
||||
from mvvm.framework import *
|
||||
from design import main_win
|
||||
|
||||
|
||||
class LogView(BaseView):
|
||||
"""日志视图:把收到的日志文本追加显示到 QTextBrowser 中。"""
|
||||
|
||||
def __init__(self, topic: str, browser: QTextBrowser):
|
||||
# topic 表示这个 View 自己发布变化时使用的主题。
|
||||
super().__init__(topic)
|
||||
# 保存真正负责显示日志的 PyQt 控件。
|
||||
self.browser = browser
|
||||
|
||||
def signal_proxy(self, log: str):
|
||||
"""
|
||||
接收 Model 发来的日志文本,并刷新界面。
|
||||
|
||||
在本 demo 中,StringModel.value 被修改后会发布 log 文本,
|
||||
框架事件通道最终会调用这个函数。
|
||||
"""
|
||||
super().signal_proxy()
|
||||
# 将新日志追加到文本浏览器。
|
||||
self.browser.append(log)
|
||||
# 文本框显示到底部,让用户总能看到最新日志。
|
||||
self.browser.moveCursor(self.browser.textCursor().End)
|
||||
|
||||
|
||||
class MainWinView(QMainWindow, main_win.Ui_MainWindow):
|
||||
"""主窗口 View:继承 Qt 主窗口和 Qt Designer 生成的界面类。"""
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super(MainWinView, self).__init__(parent)
|
||||
# setupUi 会创建 LogBrowser、YesBtn、NoBtn 等控件。
|
||||
self.setupUi(self)
|
||||
# 设置窗口标题。
|
||||
self.setWindowTitle("log演示demo")
|
||||
|
||||
# 包装日志控件,让它成为可绑定的 View 对象。
|
||||
self.view_log = LogView('view_to_log', self.LogBrowser)
|
||||
Reference in New Issue
Block a user