【发布时间】:2015-04-01 10:07:54
【问题描述】:
假设我已经实现了一个小部件 A,它需要处理小部件 C 发送的信号。但是小部件 a 没有小部件 C 的引用(至少获取起来非常麻烦)。正确的做法是什么?
这是一个简单的例子:
class WidgetA(QtGui.QWidget):
def __init__(self):
self._tab_widget = QtGui.QTabWidget()
self.layout().addWidget(_tab_widget)
self._tab_widget.addTab(WidgetB())
self._tab_widget.addTab(...)
def show_another_tab(self, index):
self._tab_widget.setCurrentIndex(index)
class WidgetB(QtGui.QWidget):
def __init__(self):
self.layout().addWidget(WidgetC())
class WidgetC(QtGui.QWidget):
show_another_tab = QtCore.pyqtSignal()
def __init__(self):
button = QtGui.QPushButton("show_another_tab")
button.clicked.connect(lambda: self.show_another_tab.emit(2))
所以基本上,我有一个以上的标签。其中一个选项卡中有一个小按钮。当用户单击按钮时,我想切换到另一个选项卡。遗憾的是,该按钮是 WidgetA 的子项的子项,因此在 WidgetA 中保留对按钮的引用对我来说很麻烦。更多的按钮可以在运行时动态创建。
在这种情况下使用信号的正确方法是什么?或者我应该只是在全局变量中引用 WidgetA(我真的不想这样做,但似乎是最简单的方法)?
【问题讨论】:
-
将一个信号从小部件 c 连接到小部件 b 的信号,并将该信号连接到小部件 a 的插槽?
-
@thuga 我不知道这是否是个好主意,如果我有另一个小部件 d,它是小部件 c 的子部件,而小部件 a 不想处理来自 d 的信号。跨度>
-
然后你可以重新设计你的应用程序,这样你就不会遇到这样的问题,或者你可以将小部件 d 的信号连接到小部件 c 的信号。