Python gui之 使用 PyQt5 库实现类似于 Flutter 的 BLoc

在 Python 使用 PyQt5 库实现类似于 Flutter 的 BLoC (Business Logic Component) 模式可以帮助分离视图和业务逻辑,提高应用的可维护性。以下是如何在 PyQt5 应用中实现 BLoC 模式控制一个简单计数器的逻辑。

实现 BLoC

首先,创建一个 CounterBloc 类来封装计数器的业务逻辑。这个类将包括方法来增加和减少计数,以及使用信号来通知界面更新。

from PyQt5.QtCore import QObject, pyqtSignal

class CounterBloc(QObject):
    count_changed = pyqtSignal(int)  # 定义一个信号

    def __init__(self):
        super(CounterBloc, self).__init__()
        self._count = 0

    def increment(self):
        self._count += 1
        self.count_changed.emit(self._count)  # 发送信号更新界面

    def decrement(self):
        self._count -= 1
        self.count_changed.emit(self._count)  # 发送信号更新界面

PyQt5 应用

在 PyQt5 应用中,创建一个简单的用户界面,其中包括显示计数、一个增加按钮和一个减少按钮。这些按钮将连接到 CounterBloc 类的方法。

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel

class CounterApp(QWidget):
    def __init__(self, bloc):
        super(CounterApp, self).__init__()
        self.bloc = bloc
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle("Counter BLoC Example")
        layout = QVBoxLayout(self)

        self.label = QLabel("0")
        layout.addWidget(self.label)

        btn_increment = QPushButton("Increment")
        btn_increment.clicked.connect(self.bloc.increment)
        layout.addWidget(btn_increment)

        btn_decrement = QPushButton("Decrement")
        btn_decrement.clicked.connect(self.bloc.decrement)
        layout.addWidget(btn_decrement)

        # 连接 BLoC 的信号到更新 UI 的槽
        self.bloc.count_changed.connect(self.update_label)

    def update_label(self, count):
        self.label.setText(str(count))

if __name__ == '__main__':
    app = QApplication([])
    bloc = CounterBloc()
    ex = CounterApp(bloc)
    ex.show()
    app.exec_()

在这个示例中,CounterBloc 作为模型处理所有业务逻辑,CounterApp 类负责创建和管理 UI。通过信号和槽机制,实现了视图与逻辑的清晰分离,使得代码结构更清晰,维护和扩展更为便捷。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值