我真的想不出来这个问题的答案...在按下按钮时,我的代码如下:
@QtCore.pyqtSlot():
def buttonPressed(self):
d = QtGui.QDialog()
d.show()
所有的情况下,一个窗口会短暂地弹出但没有任何内容,然后消失。反复点击按钮并不能解决问题。
使用Python 2.6和最新的PyQt4。
如果我没记错的话,似乎有其他人也遇到了相似的问题。问题看起来是你定义了一个本地变量d
并将其初始化为QDialog
,然后显示它。问题在于一旦buttonPressed
处理程序执行完毕,对d
的引用就超出了其作用域,因此它会被垃圾收集器销毁。尝试像这样做:self.d = QtGui.QDialog()
以使其保持在作用域内。
QtGui.QDialog().show()
是否有效...如果是这样,那么我认为就没有局部变量,也许垃圾收集器会将其保持不变。虽然我有一种乐观的感觉,但我觉得我可能太过于乐观了。 - voithos您应在创建对话框时如此操作:
@QtCore.pyqtSlot():
def buttonPressed(self):
d = QtGui.QDialog(self)
d.show()
这将保留对QDialog对象的引用,使其处于作用域内。如果您将适当的QMainWindow等作为父级传递,则还允许对话框的正常行为。
QDialog
(任何对话框都会继承)在其__init__
中需要一个parent
作为参数。通过将您的窗口作为父级传递,您的对话框不会被关闭。 - delrocco