Всплывающее, немодальное, встроенное диалоговое окно в PyQT - PullRequest
3 голосов
/ 01 ноября 2011

Трудно описать, что я хочу сделать здесь, поэтому вот что я хочу:

- Нажмите кнопку, которая «всплывает» в диалоговом окне.

- Это диалоговое окно, однако,должно быть немодальным.

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

ЭтоПохоже, я более или менее пытаюсь описать всплывающее окно, но я не уверен, так ли это называется, или даже как мне подходить к решению этой проблемы.Итак, PyQt гуру, как бы вы сделали что-то подобное?Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011

Чтобы получить немодальный диалог, откройте его с помощью show () вместо exec _ () .

.app ", установить родительское окно в конструкторе диалога.

from PyQt4 import QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        button = QtGui.QPushButton('Open Dialog', self)
        button.clicked.connect(self.handleOpenDialog)
        self.resize(300, 200)
        self._dialog = None

    def handleOpenDialog(self):
        if self._dialog is None:
            self._dialog = QtGui.QDialog(self)
            self._dialog.resize(200, 100)
        self._dialog.show()

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())
0 голосов
/ 28 марта 2019

для Qt5:

Я игнорирую, почему dialog.setWindowModality(QtCore.Qt.NonModal) не будет работать, но

dialog.run()
dialog.exec_()

будет делать. run сделает диалог немодальным, а exec_ заблокирует его, пока пользователь не введет.

...