PyQt5之QMainWindow

PyQt5之QMainWindow

如果一个窗口包含一个或多个窗口,那么这个窗口就是父窗口,被包含的窗口则是子窗口。没有父窗口的窗口就是顶层窗口,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_())

代码分析:

  • 在自定义的窗口类 MainWindow 中,继承了主窗口 QMainWindow 类所有的属性和方法,然后使用父类的构造函数 super() 初始化窗口;
  • 通过 setWindowTitle() 方法设置窗口标题,resize() 方法设置窗口大小;
  • 使用QMainWindow 类的 statusBar() 方法创建状态栏,然后调用;showMessage() 方法将提示信息显示在状态栏,显示时间为5秒,5秒之后状态栏提示信息消失。

二、主窗口居中

利用 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_())

代码分析:

  • QDesktopWidget().screenGeometry() 用来计算显示屏幕的大小,QDesktopWidget是描述显示屏幕的类,通过 screenGeometry() 来获得屏幕的大小;
  • self.geometry() 是用来获取主窗口的大小;
  • self.move() 用来移动主窗口,里面的参数即为屏幕中心的位置坐标,如果出现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_())

代码分析:

  • QPushButton(str,QWidget) 创建一个按钮对象添加到主窗口中;
  • button.clicked.connect(self.close) 连接槽函数,当按钮被点击时调用close()函数,使主窗口关闭。

你可能感兴趣的:(Python)