pyqt4: как показать немодальный диалог? - PullRequest
7 голосов
/ 03 мая 2011

для жизни я не могу понять это ... при нажатии кнопки у меня есть код:

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

все, что происходит, это окно на короткое время всплывает без какого-либо содержимого, а затемисчезает.Повторное нажатие на кнопку не помогает.

Использование Python 2.6, последняя версия PyQt4.

Ответы [ 2 ]

8 голосов
/ 03 мая 2011

Если я не ошибаюсь, похоже, что у кого-то еще была похожая проблема . Кажется, что происходит то, что вы определяете локальную переменную d и инициализируете ее как QDialog, а затем показываете ее. Проблема в том, что после завершения обработки обработчика buttonPressed ссылка на d выходит из области видимости и уничтожается сборщиком мусора. Попробуйте сделать что-то вроде self.d = QtGui.QDialog(), чтобы сохранить его в области видимости.

5 голосов
/ 17 августа 2012

Вы должны передать родительский элемент в диалоговое окно, когда вы создали его следующим образом:

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

Это сохранит ссылку на объект QDialog, оставив его в области видимости. Это также позволяет правильно вести диалог, если вы передаете соответствующий QMainWindow и т. Д. В качестве родителя.

...