Отображение всплывающих окон в Python (PyQt4)

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

Я относительно новичок и для 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, и мне не нужно создавать новый.

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

One Solution collect form web for “Отображение всплывающих окон в Python (PyQt4)”

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

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

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

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

 # 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_()) 
Python - лучший язык программирования в мире.