PyQt 在使用像 pyObj.setupUi(parent) 这样的链式调用后丢弃所有信号和槽
PyQt drops all of signals and slots after using chained invoke like pyObj.setupUi(parent)
一旦我使用 DummyWidget().setupUi(mainWin)
,所有信号(例如下面代码中的 textChanged)将被删除并且 printDummy 函数将被静音,但是当我使用 dw = DummyWidget(); dw.setupUi(main)
时一切都会正常工作。我没有看到 Python 语法的具体区别。谁能分享任何评论?
class DummyWidget(object):
def setupUi(self, parent=None):
assert parent is not None
self.parent = parent
parent.resize(480, 320)
self.DUMMY = QtGui.QLineEdit(parent)
# parent.setCentralWidget(self.DUMMY)
self.DUMMY.textChanged.connect(self.printDummy)
QtGui.QApplication.processEvents()
def printDummy(self):
print "DUMMY IN CLASS"
if __name__ == "__main__":
import sys
def printDummy(*args):
print "DUMMY"
app = QtGui.QApplication(sys.argv)
# mainWin = MainWindow()
# edit = QtGui.QLineEdit()
# edit.textChanged.connect(printDummy)
# mainWin.setCentralWidget(edit)
mainWin = QtGui.QDialog()
# DummyWidget().setupUi(mainWin)
dw = DummyWidget()
dw.setupUi(mainWin)
mainWin.show()
# mainWin.open()
sys.exit(app.exec_())
如果您不保留对 DummyWidget
实例的引用,它将被垃圾回收,因此您的插槽将不复存在。
如果您这样做 DummyWidget.setupUi(parent)
,您将无法存储引用(此行为您提供 setupUi
的 return 值,即 None
)。
一旦我使用 DummyWidget().setupUi(mainWin)
,所有信号(例如下面代码中的 textChanged)将被删除并且 printDummy 函数将被静音,但是当我使用 dw = DummyWidget(); dw.setupUi(main)
时一切都会正常工作。我没有看到 Python 语法的具体区别。谁能分享任何评论?
class DummyWidget(object):
def setupUi(self, parent=None):
assert parent is not None
self.parent = parent
parent.resize(480, 320)
self.DUMMY = QtGui.QLineEdit(parent)
# parent.setCentralWidget(self.DUMMY)
self.DUMMY.textChanged.connect(self.printDummy)
QtGui.QApplication.processEvents()
def printDummy(self):
print "DUMMY IN CLASS"
if __name__ == "__main__":
import sys
def printDummy(*args):
print "DUMMY"
app = QtGui.QApplication(sys.argv)
# mainWin = MainWindow()
# edit = QtGui.QLineEdit()
# edit.textChanged.connect(printDummy)
# mainWin.setCentralWidget(edit)
mainWin = QtGui.QDialog()
# DummyWidget().setupUi(mainWin)
dw = DummyWidget()
dw.setupUi(mainWin)
mainWin.show()
# mainWin.open()
sys.exit(app.exec_())
如果您不保留对 DummyWidget
实例的引用,它将被垃圾回收,因此您的插槽将不复存在。
如果您这样做 DummyWidget.setupUi(parent)
,您将无法存储引用(此行为您提供 setupUi
的 return 值,即 None
)。