2017-02-09 6 views
0

에서 하위 창을 표시 :이이 클래스를 사용하여 코드의 가장 기본적인 비트 있어야하는데클래스를 사용하여 메인 윈도우에서 윈도우를 포함하는 방법을 작동 할 수 없습니다 메인 창

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 

""" 
Qt4 tutorial using classes 

This example will be built 
on over time. 
""" 

import sys 
from PyQt4 import QtGui, QtCore 

class Form(QtGui.QWidget): 

    def __init__(self, MainWindow): 
     super(Form, self).__init__() 


class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__() 
     self.setGeometry(50, 50, 1600, 900) 
     new_window = Form(self) 
     self.show() 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    main_window = MainWindow() 
    sys.exit(app.exec_())  

if __name__ == "__main__": 
    main() 

. 두 번째 창을 표시하려면 어떻게해야합니까?

+0

윈도우 란 무엇입니까? 기본 GUI에서 팝업 또는 위젯 대화 상자가 표시됩니까? – alexblae

+0

죄송합니다. 주 윈도우에서 상자를 얻으려고합니다. Form 클래스에 있지만, 그냥 보여주기 위해 얻을 수는 없습니다. 메인 윈도우에 버튼을 놓고 팝업을 표시 할 수는 있지만, 이것을 임베드하고 싶습니다. – iFunction

+0

'Form'에는 부모가 없으므로 레이아웃에 넣지 않았고'show() '하지 않았습니다. – ekhumoro

답변

1

ekhumoro 이미 지적했듯이 위젯은 메인 윈도우의 하위이어야합니다. 그러나 부모 (MainWindow)가 show을 호출하자마자 어쨌든 호출되므로 위젯에 show으로 전화해야한다고 생각하지 않습니다. mata이 올바르게 지적되었으므로 MainWindow 인스턴스에 Widget을 추가하는 적절한 방법은 setCentralWidget을 사용하는 것입니다. 다음은 명확화를위한 작업 예제입니다.

import sys 
from PyQt4 import QtGui, QtCore 

class Form(QtGui.QWidget): 

    def __init__(self, parent): 
     super(Form, self).__init__(parent) 
     self.lbl = QtGui.QLabel("Test", self) 

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 

     super(MainWindow, self).__init__() 
     self.setGeometry(50, 50, 1600, 900) 
     new_window = Form(self) 
     self.setCentralWidget(new_window) 
     self.show() 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    main_window = MainWindow() 
    sys.exit(app.exec_())  

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

아니요, QMainWindow를 사용하여 콘텐츠를 추가하는 것이 옳지 않습니다. ['setCentralWidget()'] (http://doc.qt.io/qt-5/qmainwindow.html#setCentralWidget) 메소드가 있어야합니다. 익숙한. – mata

+0

당신이 맞습니다. [iFunction] (http://stackoverflow.com/users/6500048/ifunction)이''form''을''centralWidget''으로 원한다고 확신하지 못했습니다. – alexblae

+0

@alexblae. 내 말은, 위젯을 보이게하기 위해 내가 언급 한 것들 중 적어도 하나를 할 필요가 있다는 것입니다. 그것을 중앙 위젯으로 설정하는 것은 실제로 레이아웃에 추가하는 것과 동일합니다.이 경우 자동으로 부모가 다시 설정되므로 부모를 명시 적으로 설정할 필요가 없습니다. – ekhumoro