当您将父级传递给QWidget时,它将相对于其父级定位一个位置,并生成与您所获得的控件类似的控件,以解决此问题,使用了布局,QMainWindow是一种特殊的QWidget,因为它具有预定义的元素,因此它已经具有布局
在QMainWindow中,必须使用setCentralWidget函数将小部件添加到centralwidget:
class MyApp(QMainWindow): """Main application class""" def __init__(self, parent=None): super().__init__(parent) self.initUi() def initUi(self): [...] centralWidget = Main(self) self.setCentralWidget(centralWidget)
完整的代码:
class Main(QWidget): """The main widget with label and LineEdit""" def __init__(self, parent=None): super().__init__(parent) self.initUi() def initUi(self): """Initialize the UI of the main widget""" self.mySourceLabel = QLabel("Select your file:") self.mySourceLine = QLineEdit() self.mySourceLine.setPlaceholderText("File name here") # Set layout grid = QGridLayout() #grid.setSpacing(5) grid.addWidget(self.mySourceLabel, 0, 0) grid.addWidget(self.mySourceLine, 1, 0) self.setLayout(grid)class MyApp(QMainWindow): """Main application class""" def __init__(self, parent=None): super().__init__(parent) self.initUi() def initUi(self): """Initialize UI of an application""" # main window size, title self.setGeometry(400, 300, 400, 300) self.setWindowTitle("Version upgrade ") # create central widget, create grid layout centralWidget = Main(self) self.setCentralWidget(centralWidget)


