如果一个窗口包含一个或多个窗口,那么这个窗口就是父窗口,被包含的窗口则是子窗口。没有父窗口的窗口就是顶层窗口,
QMainWindow
就是一个顶层窗口,它可以包含很多界面元素,如菜单栏、工具栏、状态栏、子窗口等。
QMainWindow
继承自QWidget类,拥有它的所有派生方法和属性,比较重要的方法如下:
方法 | 描述 |
---|---|
addToolBar() | 添加工具栏 |
centralWidget() | 返回窗口中心的一个控件,未设置时返回NULL |
menuBar() | 返回主窗口的菜单栏 |
setCentralWidget() | 设置窗口中心的控件 |
setStatusBar() | 设置状态栏 |
statusBar() | 获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout=0)方法,显示状态栏信息。其中第一个参数是要显示的状态栏信息,第二个参数是信息停留的时间,单位是毫秒(ms),默认是0,表示一直显示状态栏信息。 |
注:QMainWindow
不能设置布局(使用setLayout()方法),因为它有自己的布局。
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.setWindowTitle("第一个主窗口")
self.resize(400,400)
self.status = self.statusBar()
self.status.showMessage("这是状态栏",5000)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
代码分析:
利用 QDesktopWidget 类来实现主窗口居中显示,代码如下:
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QDesktopWidget
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.resize(400,400)
self.setWindowTitle("第二个主窗口")
self.center()
def center(self):
screen = QDesktopWidget().screenGeometry()
size = self.geometry()
self.move(int((screen.width()-size.width())/2),int((screen.height()-size.height())/2))
if __name__ == "__main__":
app = QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
代码分析:
DeprecationWarning: an integer is required (got type float)
警告,则将里面的参数进行取整即可。import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QDesktopWidget,QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.resize(400,400)
self.setWindowTitle("第二个主窗口")
button = QPushButton("关闭主窗口",self)
button.move(100,200)
button.clicked.connect(self.close)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
代码分析: