RS小生

导航

(一)PyQt5基本窗口控件之QMain Window

===============================================================

讲解前提——已经在Windows或者Mac系统上安装好PyQt5及其相应的配置

参考书:《PyQt5 快速开发与实战》

===============================================================

 

(1)基本概念

窗口:指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最小化按钮、最大化按钮等(可以理解为相当于浏览器的主页)

控件:指按钮、复选框、文本框、表格、进度条等这些组成程序的基本元素 。

窗口控件:是PyQt中建立界面的主要元素。在PyQt中把没有嵌入到其他控件中的控件称为窗口,一般窗口都有边框、标题栏。

一个程序可以有多个窗口,一个窗口也可以有多个控件。

 

在PyQt中,有三个类都是用来创建窗口的,即QMainWindow, QWidget和QDialog,这些窗口可以直接调用,也可以继承后再使用。

  • 作为PyQt中的基本窗口控件之一,QMain Window主窗口为用户提供了一个应用程序框架,它拥有自己的布局,可以在布局中添加不同的控件。QMain Window窗口可以包含菜单栏、工具栏、状态栏、标题栏等。是比较常用的窗口形式,一般作为GUI的主窗口使用。
  • 与之不同,QDialog是对话框窗口的基类。而对话框主要是用来执行短期任务,或者与用户进行互动,既可以是模态的,也可以是非模态的。QDialog窗口没有菜单栏、工具栏、状态栏等。
  • QWidget类窗口控件是所有用户界面对象的基类,所有的窗口和控件都直接或者间接继承自QWidget类。

因此,如果是主窗口,则使用QMain Window类;如果是对话框,则使用QDialog类;如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,则使用QWidget类

 

(2)创建窗口

父窗口:指一个窗口包含一个或多个窗口

子窗口:被包含的窗口

顶层窗口:没有父窗口的窗口,QMain Window就是一个顶层窗口,它可以包含多个界面元素,如菜单栏、工具栏、状态栏、子窗口等。

QMain Window继承自QWidget类,拥有它的所有派生方法和属性,其中比较重要的方法有:

1)addToolBar(): 表示添加工具栏

2)centralWidget():表示返回窗口中心的一个控件,未设置时返回NULL

3) menuBar():表示主窗口的菜单栏

4)setCentralWidget():表示设置窗口中心的控件

5) setStatusBar():表示设置状态栏

6)StatusBar(): 表示获得状态栏对象后,调用状态栏对象的showMessage显示状态栏信息。

需要注意的是:QMain Window不能设置布局,它有自己的布局方式。

 

(3)代码展示

在下面的例子中,我们将创建窗口,显示在屏幕中央,以及关闭主窗口写在一起。

在创建好的窗口中,插入了一个Button控件,用来关闭当前窗口

# _*_ coding: UTF-8 _*_
# Author: liming

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QDesktopWidget, QHBoxLayout, QPushButton, QWidget
from PyQt5.QtGui import QIcon

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.resize(600, 300) # 设置窗口的大小
        self.status = self.statusBar() # 状态栏
        self.status.showMessage('正在处理中......', 0) # 显示状态栏信息,默认为0(表示下一个操作前,一直显示状态栏;也可以设置显示时间,单位为毫秒)
        self.setWindowTitle('PyQt MainWindow操作例子') # 设置该窗口的名称

        self.center() # 将窗口放在屏幕中央

        self.button1 = QPushButton('关闭当前窗口!') # 创建一个按钮,并赋予相应的文本
        self.button1.clicked.connect(self.onButtonClick) # 关联按钮的点击信号与onButtonClickx信号槽
        layout = QHBoxLayout() # 设置水平布局
        layout.addWidget(self.button1) # 水平布局应用到button1
        main_frame = QWidget()
        main_frame.setLayout(layout)
        self.setCentralWidget(main_frame) # 设置窗口中心的控件

    def center(self):
        screen = QDesktopWidget().screenGeometry() # 计算显示屏幕的大小
        size = self.geometry() # 用来获取窗口的大小
        self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2) # 将窗口移动到屏幕中央

    def onButtonClick(self):
        sender = self.sender() # 发送信号的对象
        print(sender.text() + '被按下了')
        qApp = QApplication.instance()
        qApp.quit()


if __name__ == '__main__':
    app = QApplication(sys.argv) # 是PyQt的整个后台管理的命脉
    app.setWindowIcon(QIcon('./images/cartoon1.ico')) # 设置窗口的头标
    form = MainWindow() # 调用MainWindow类,并进行显示
    form.show()
    sys.exit(app.exec_()) # 运行主循环,必须调用此函数才可以开始事件处理

 

结果

 

 

本部分完毕!

 

 

 

 

  

 

posted on 2020-05-21 23:39  RS小生  阅读(3794)  评论(1编辑  收藏  举报