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

Cla*_*diu 7 python qt qt4 pyqt pyqt4

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

@QtCore.pyqtSlot():
def buttonPressed(self):
    d = QtGui.QDialog()
    d.show()
Run Code Online (Sandbox Code Playgroud)

所有这一切都是一个窗口短暂弹出,没有任何内容,然后消失.反复按下按钮没有帮助.

使用Python 2.6,最新的PyQt4.

voi*_*hos 8

如果我没有弄错的话,似乎其他人也有类似的问题.似乎正在发生的是你定义一个局部变量d并将其初始化为a QDialog,然后显示它.问题是,一旦buttonPressed处理程序完成执行,引用d就会超出范围,因此垃圾收集器会将其销毁.尝试做一些类似于self.d = QtGui.QDialog()保持范围的事情.


ari*_*ing 5

创建对话框时,应将父级传递给对话框,如下所示:

@QtCore.pyqtSlot():
def buttonPressed(self):
    d = QtGui.QDialog(self)
    d.show()
Run Code Online (Sandbox Code Playgroud)

这将保留对QDialog对象的引用,并将其保留在范围内。如果您将适当的QMainWindow等作为父级传递,它还允许对话框的正确行为。