python - 我应该使用 Qt 信号还是事件?
问题描述
我正在使用 PySide2 并不清楚Signal和Event
如果我们有两个人在做两个View。
人 A正在做ListView
人 B正在做ParameterView
选择ListItem时,更新ParameterView
我应该如何连接它们?使用信号还是事件?
也许我会有另一个View,它也需要更新,而ListItem selectChanged
信号
class ListView(QListView):
# do something
class ParameterView(QWidget):
def update(self):
# do something
list_view = ListView()
parameter_view = ParameterView()
list_view.selectChanged.connect(parameter_view.update)
事件
class ListView(QListView):
def selectChanged(self):
QApplication.sendEvent(self, SelectChangedEvent)
class SelectChangedEvent(QEvent):
# initialize ...
class ParameterView(QWidget):
def update(self):
# do something
def event(self, event):
if event.type() == SelectChangedEvent:
self.update()
解决方案
这两个选项都是有效的,因为它们使用相同的机制来传输信息,但最大的区别是,如果您想发送 QEvent,那么您必须访问该空间中的对象,而不是使用 Qt 信号,您不应该知道该空间中的对象空间,但仅在连接中。
我的建议是信号应该用于解耦类。我建议你阅读:
推荐阅读
- wordpress - 你可以在 WordPress 循环中有 2 个相邻的“if”语句吗?什么是最佳实践?
- python - 将十六进制值存储为整数
- azure - 对多租户应用程序使用授权码流不起作用
- swift - 图类的 Swift 泛型
- imagemagick - 使用 imagemagick++ 从 PNG 文件中读取元数据
- flutter - SharedPreferences 是让用户在 Flutter 中保持登录的安全方式吗?
- android - 在 Android 设备屏幕解锁之前运行服务
- node.js - router.param 未触发 passport.js 在 app.use 中初始化
- python - shell_exec 无法在 apache 服务器上启用
- reactjs - 从 React 表中获取单元格值