2016-04-21 7 views
4

Прежде всего, на подобные вопросы уже был дан ответ, но мне нужна помощь с этим.PyQT: как открыть новое окно

У меня есть окно, которое содержит одну кнопку (класс First) и я хочу на нажата, второе пустое окно, чтобы быть появился (класс второй).

Я повозился с кодом скопированного из этого вопроса: PyQT on click open new window, и я писал этот код:

# -*- coding: utf-8 -*- 

from PyQt4 import QtGui, QtCore 
import sys 
import design1, design2 

class Second(QtGui.QMainWindow, design2.Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(Second, self).__init__(parent) 
     self.setupUi(self) 

class First(QtGui.QMainWindow, design1.Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(First, self).__init__(parent) 
     self.setupUi(self) 

     self.pushButton.clicked.connect(self.on_pushButton_clicked) 
     self.dialog = Second(self) 

    def on_pushButton_clicked(self): 
     self.dialog.exec_() 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    main = First() 
    main.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

но on_pressed, появляется сообщение об ошибке:

AttributeError: 'Second' object has no attribute 'exec_' 

(design1 и design2 есть был получен от дизайнера Qt.)

Любая мысль была бы оценена.

+0

В то время как 'QDialog' имеет' метод exec_', вы подклассы 'QMainWindow', который не имеет этот метод. Вы можете прочитать о различиях между классами tge и решить, что вы хотите использовать. –

ответ

8

Я думаю, вы должны использовать метод show.

Здесь ист рабочий пример (образовавшийся от вашего):

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from PyQt4 import QtGui, QtCore 
import sys 


class Second(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(Second, self).__init__(parent) 


class First(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(First, self).__init__(parent) 
     self.pushButton = QtGui.QPushButton("click me") 

     self.setCentralWidget(self.pushButton) 

     self.pushButton.clicked.connect(self.on_pushButton_clicked) 
     self.dialog = Second(self) 

    def on_pushButton_clicked(self): 
     self.dialog.show() 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    main = First() 
    main.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 
+0

Он отлично работает. Спасибо. – user3060854