简介
QMainWindow继承自QWidgets
窗口大致由菜单栏,工具栏,状态栏,中心Widget 和 Dock Widgets(停靠部件)组成。
常用API:
1 菜单栏(QMenu)
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class QMainWindowDemo(QMainWindow):
def __init__(self):
super(QMainWindowDemo, self).__init__()
self.resize(600,400)
self.setWindowTitle("QMainWindow学习")
# 1 获得菜单栏 用于返回主窗口的QMenuBar对象;
self.menubar = self.menuBar()
self.menubar.setStyleSheet("background-color: red;color:black; ")
# 菜单栏中添加菜单 (QMenu)
self.filemenu = self.menubar.addMenu("文件")
self.helpmenu = self.menuBar().addMenu("帮助")
# 菜单中添加Action
self.filemenu.addAction("打开文件")
self.filemenu.addAction("关闭文件")
self.helpmenu.addAction("工具介绍")
self.helpmenu.addAction("版本信息")
#信号槽
self.filemenu.triggered[QAction].connect(self.processtrigger)
self.helpmenu.triggered[QAction].connect(self.processtrigger)
def processtrigger(self,qaction):
print(qaction.text()+" is triggered!")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
test = QMainWindowDemo()
test.show()
sys.exit(app.exec_())
效果如下:
2 工具栏
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class QMainWindowDemo(QMainWindow):
def __init__(self):
super(QMainWindowDemo, self).__init__()
self.resize(400,300)
self.setWindowTitle("QMainWindow学习")
# 工具栏(一般带图片的那种)
tool = self.addToolBar("File")
tool.setStyleSheet("background-color: red;color:black; ")
tool.addAction("刷新")
tool.addAction("保存")
#信号槽
tool.actionTriggered[QAction].connect(self.toolBtnPressed)
def toolBtnPressed(self,qaction):
print("pressed too btn is",qaction.text())
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
test = QMainWindowDemo()
test.show()
sys.exit(app.exec_())
效果:
3 状态栏
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class QMainWindowDemo(QMainWindow):
def __init__(self):
super(QMainWindowDemo, self).__init__()
self.resize(400,300)
self.setWindowTitle("QMainWindow学习")
# 状态栏
self.status_bar = QStatusBar()
self.status_bar.setStyleSheet("background-color: green;color:black; ")
self.setStatusBar(self.status_bar )
#self.status_bar.set
self.status_bar.addWidget(QLabel("状态栏: 2020-06-09"))
self.status_bar.addWidget(QLabel(" ##############"))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
test = QMainWindowDemo()
test.show()
sys.exit(app.exec_())
效果如下:
4 Dock Widgets(停靠部件QDockWidget)
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class QMainWindowDemo(QMainWindow):
def __init__(self):
super(QMainWindowDemo, self).__init__()
self.resize(400,300)
self.setWindowTitle("QMainWindow学习")
center = QFrame()
center.setFrameStyle(QFrame.Box|QFrame.Panel)
self.setCentralWidget(center)
# Dock Widget
self.dockwidget = QDockWidget(self)
dockw = QFrame()
dockw_layout = QVBoxLayout(dockw)
dockw_layout.addWidget(QLabel("label01"))
dockw_layout.addWidget(QLabel("label02"))
dockw_layout.addStretch()
self.dockwidget.setWidget(dockw)
self.addDockWidget(Qt.RightDockWidgetArea, self.dockwidget)
self.dockwidget.setStyleSheet("background-color: green;color:black;")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
test = QMainWindowDemo()
test.show()
sys.exit(app.exec_())
效果: