pyqt4:如何显示无模式对话框?

时间:2011-05-03 18:33:21

标签: python qt qt4 pyqt pyqt4

对于我的生活我无法弄明白...按下按钮我有代码:

@QtCore.pyqtSlot():
def buttonPressed(self):
    d = QtGui.QDialog()
    d.show()

所有发生的事情是一个窗口短暂弹出而没有任何内容然后消失。反复按下按钮无济于事。

使用Python 2.6,最新的PyQt4。

2 个答案:

答案 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等作为父级传递,它还允许对话的正确行为。