(一)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_()) # 运行主循环,必须调用此函数才可以开始事件处理
结果
本部分完毕!