2017-02-09 179 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,因为无论如何只要其父节点(MainWindow)调用show就会被调用。正如mata指出的那样,将Widget添加到MainWindow实例的正确方法是使用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