PyQt5的MainWindow和QMainWindow之间是什么关系

2021-02-22 11:23发布

用PyQt的Qt designer编出的界面py文件里的这个MainWindow和QMainWindow类以及Ui_MainWindow分别是什么,他们间有什么关系class Ui_MainWindo...

用PyQt的Qt designer编出的界面py文件里的这个MainWindow和QMainWindow类以及Ui_MainWindow分别是什么,他们间有什么关系

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1088, 680)
        MainWindow.setFocusPolicy(QtCore.Qt.TabFocus)


1条回答
给你三个亿
2楼-- · 2021-02-23 10:05


在pyqt5中,mainwindow有属于自己的布局,我们无法使用setlayout直接对mainwindow进行直接布局,但是我们可以将一个布局好的widget放置在mianwindow中的布局里,从而达到用setlayout布局widget后在布局到mianwindow中, 本实例采用QFormLayout+QVBoxLayout+QGridLayout将label,lineEdit和textEdit布局到一个widget中,最后将widget布局到mainwindow的中心布局里,本文还添加了一个菜单栏,在linux出现了一小段插曲,没有加入setNativeMenuBar(False)这个方法时,linux下是不会显示出菜单栏,添加之后就全平台都能显示

importsys

fromPyQt5.QtGuiimportQIcon

fromPyQt5.QtWidgetsimport*



classMainWindow(QMainWindow):

def__init__(self,parent=None):

super(MainWindow,self).__init__(parent)

#窗体设置

self.setWindowTitle("关闭窗口")

#菜单动作

self.exitAct=QAction(QIcon('exit.png'),'&Exit',self)

self.exitAct.setShortcut('Ctrl+Q')

self.exitAct.setStatusTip("Exitapplication")

self.exitAct.triggered.connect(self.quitAction)

#菜单栏

self.menu=self.menuBar()

self.menu.setNativeMenuBar(False)

self.fileMenu=self.menu.addMenu('File')

self.fileMenu.addAction(self.exitAct)

#中心窗口嵌入widget布局

self.label1=QLabel('label1')

self.label2=QLabel('label2')

self.lineEdit1=QLineEdit()

self.lineEdit2=QLineEdit()

self.textEdit1=QTextEdit()

self.textEdit2=QTextEdit()

self.formlayout1=QFormLayout()

self.formlayout2=QFormLayout()

self.formlayout1.addRow(self.label1,self.lineEdit1)

self.formlayout2.addRow(self.label2,self.lineEdit2)

self.vbox1=QVBoxLayout()

self.vbox1.addLayout(self.formlayout1)

self.vbox1.addWidget(self.textEdit1)

self.vbox2=QVBoxLayout()

self.vbox2.addLayout(self.formlayout2)

self.vbox2.addWidget(self.textEdit2)

self.gridlayout=QGridLayout()

self.gridlayout.addItem(self.vbox1,0,0)

self.gridlayout.addItem(self.vbox2,0,1)

self.widGet=QWidget()

self.widGet.setLayout(self.gridlayout)

self.setCentralWidget(self.widGet)

self.center()


#窗口居中

defcenter(self):

self.size=QDesktopWidget().screenGeometry()

self.resize=self.geometry()

self.move((self.size.width()-self.resize.width())/2,(self.size.height()-self.resize.height())/2)


defquitAction(self):

QApplication.exit()

if__name__=="__main__":

app=QApplication(sys.argv)

mainWindow=MainWindow()

mainWindow.show()

sys.exit(app.exec_())