Отображение всплывающих окон в Python (PyQt4) - PullRequest
2 голосов
/ 31 января 2012

Мне нужно знать, как сделать диалоговое окно всплывающим, когда пользователь нажимает кнопку.

Я относительно новичок в Python и PyQt / QtDesigner.Я использую в них только около месяца, но я думаю, что у меня есть хорошее представление.

Вот что у меня есть: Главный диалог (который является основной частью приложения), который я разработалв QtDesigner.Я преобразовал .ui в .py, используя pyuic4easy.

Вот что я хочу сделать: создать новое диалоговое окно в QtDesigner и каким-то образом заставить его всплывать, когда пользователь нажимает кнопку на первом (главном)диалоговое окно.

Вот код моего основного диалога:

import sys
from PyQt4.QtCore import *
from loginScreen import *


class MyForm(QtGui.QDialog):

    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.popup)     
        ...

        ... Some functions ...

   def popup(self):
        #Pop-up the new dialog

if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)
   myapp= MyForm()
   myapp.show()
   sys.exit(app.exec_())

Итак, как вы можете видеть, я подключил первую кнопку к методу popup, который должен бытьзаполнен кодом, чтобы мое второе окно всплыло.Как мне это сделать?Помните, что я уже разработал свой второй диалог в QtDesigner, и мне не нужно создавать новый.

Спасибо за помощь!

1 Ответ

9 голосов
/ 31 января 2012

Итак, как вы можете видеть, я подключил первую кнопку к методу popup, который должен быть заполнен кодом, чтобы всплыло второе окно.Как мне это сделать?

Почти так же, как вы делаете это для своего главного окна (MyForm).

Как обычно, вы пишете класс-обёртку дляваш код QtDesigner для второго диалога (как вы сделали с MyForm).Давайте назовем это MyPopupDialog.Затем в вашем методе popup вы создаете экземпляр и затем показывает свой экземпляр с exec_() или show() в зависимости от того, хотите ли вы модальный или немодальный диалог.(Если вы не знакомы с модальной / немодальной концепцией, вы можете обратиться к документации . )

Таким образом, общая ситуация может выглядеть следующим образом (с парой модификаций):

# Necessary imports

class MyPopupDialog(QtGui.QDialog):
    def __init__(self, parent=None):
        # Regular init stuff...
        # and other things you might want


class MyForm(QtGui.QDialog):
    def __init__(self, parent=None):
        # Here, you should call the inherited class' init, which is QDialog
        QtGui.QDialog.__init__(self, parent)

        # Usual setup stuff
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        # Use new style signal/slots
        self.ui.pushButton.clicked.connect(self.popup)     

        # Other things...

   def popup(self):
        self.dialog = MyPopupDialog()

        # For Modal dialogs
        self.dialog.exec_()

        # Or for modeless dialogs
        # self.dialog.show()

if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)
   myapp= MyForm()
   myapp.show()
   sys.exit(app.exec_())
...