对于我的生活我无法弄明白...按下按钮我有代码:
@QtCore.pyqtSlot():
def buttonPressed(self):
d = QtGui.QDialog()
d.show()
所有发生的事情是一个窗口短暂弹出而没有任何内容然后消失。反复按下按钮无济于事。
使用Python 2.6,最新的PyQt4。
答案 0 :(得分:7)
如果我没弄错的话,似乎其他人有similar issue。似乎正在发生的是您定义局部变量d
并将其初始化为QDialog
,然后显示它。问题是,一旦buttonPressed
处理程序执行完毕,对d
的引用就会超出范围,因此垃圾收集器会将其销毁。尝试执行self.d = QtGui.QDialog()
之类的操作以使其保持在范围内。
答案 1 :(得分:4)
您应该在创建对象时将父对象传递给对话框:
@QtCore.pyqtSlot():
def buttonPressed(self):
d = QtGui.QDialog(self)
d.show()
这将保留对QDialog对象的引用,使其保持在范围内。如果您将相应的QMainWindow等作为父级传递,它还允许对话的正确行为。