2015-03-31 2 views
0

Нажав QPushButton в окне QDialog, я хочу открыть новое окно QWidget. Мой код:Python PyQt4 открыт из QDialog нового окна QWidget

from PyQt4 import QtGui 
import sys 


class MainWindow(QtGui.QWidget): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 

     self.setWindowTitle("Main Window") 


class FirstWindow(QtGui.QDialog): 

    def __init__(self, parent=None): 
     super(FirstWindow, self).__init__(parent) 

     self.createWindow() 

    def createWindow(self): 
     btn = QtGui.QPushButton('Open New Window', self) 
     btn.move(10, 10) 

     self.openNewWindow = MainWindow(self) 
     btn.clicked.connect(self.openMainWin) 

     self.setGeometry(250,250, 150,50) 
     self.setWindowTitle("First Window") 
     self.show() 

    def openMainWin(self): 
     self.openNewWindow.show() 


if __name__ == "__main__": 

    app = QtGui.QApplication(sys.argv) 
    firstwin = FirstWindow() 
    sys.exit(app.exec_()) 

Когда я запустить код, ничего не происходит при нажатии кнопки.

Но когда я изменить класс от class MainWindow(QtGui.QWidget) к class MainWindow(QtGui.QDialog) или class MainWindow(QtGui.QMainWindow) это работает!

Что я делаю неправильно ?! Пожалуйста, помогите мне.

ответ

2

Когда вы создаете экземпляр MainWindow, вы передаете его родителям. Qwidget делает только новое окно, если вы не укажете родителя.

Это, конечно, преднамеренно. Если в новых окнах было показано QWidgets с родителями, вы никогда не сможете создать графический интерфейс. Представьте, что у каждого виджета есть собственное окно!

QMainWindow и QDialog специально предназначены для того, чтобы иметь родителя и создать новое окно. Вы должны использовать их.

Смежные вопросы