• 0 前言
  • 1 控件的几何数据 QRect,QPoint,QSize
    • 1.1 方法列表
  • 2 基本窗口 QWidget
    • 2.1 方法列表
    • 2.2 示例 第一个APP
  • 3 桌面窗口 QDeskWidget
    • 3.1 方法列表
    • 3.2 示例 将窗口放置在屏幕中间
  • 4 选项卡窗口 QTabWidget
    • 4.1 方法列表
    • 4.2 示例 选项卡
  • 5 主窗口 QMainWindow
    • 5.1 方法列表 QMainWindow
    • 5.2 示例 有菜单的APP
  • 6 对话窗口 QDialog
    • 6.1 方法列表 QDialog
    • 6.2 示例 QDialog主窗口
    • 6.3 示例 QDialog弹出窗口

0 前言

>>返回Python系列文章目录<<

PyQt5 是Digia的一套Qt5应用框架与python的结合,是最强大的GUI库之一
PyQt5是一个包,包内有PyQt5.QWidgets,PyQt5.QtCore等模块

pyqt5的安装

pip install PyQt5

.py文件生成exe文件请看>>Python-pyinstaller

窗口类,只用于生成页面容纳其他窗口和控件,自身不具有任何功能的QWidget类窗口,单独使用没有任何意义,通常是APP的最外层框架

继承关系:

  • QWidget

    • QDeskWidget
    • QTabWidget
    • QMainWindow
    • QDialog

1 控件的几何数据 QRect,QPoint,QSize

在PyQt5中,窗口都是以矩形形式呈现,几何数据称为geometry,数据类型QRect类,数据形式(x, y, width, height)。其中x, y为窗口左上角相对上级窗口或屏幕左上角的坐标,x向右为正,y向下为正
width为窗口宽度,height为窗口高度

窗口坐标是窗口左上角在屏幕或者上级窗口的坐标,称为move,数据类型QPoint类,数据形式(x, y)

窗口尺寸是窗口的宽和高,称为size,数据类型QSize类,数据形式(width, height)

1.1 方法列表

QWidget类及其子类 说明
self.setGeometry(x, y ,width, height) 设定几何数据,输入QRect类
self.move(x, y) 设定左上角坐标,输入QPoint类
self.resize(width, height) 设定窗口尺寸,输入QSize类
self.setFixedSize(width, height) 固定窗口尺寸,输入QSize类
self.setFixedWidth(width) 固定窗口宽度,输入数字
self.setFixedHeight(height) 固定窗口高度,输入数字
=self.geometry() 获取几何数据,返回QRect类
=self.pos() 获取坐标数据,返回QPoint类
=self.size() 获取尺寸数据,返回QSize类
=self.x() 获取x轴坐标数据,返回数字
=self.y() 获取y轴坐标数据,返回数字
=self.width() 获取宽度数据,返回数字
=self.height() 获取宽度数据,返回数字
QRect类 说明
self=QRect(x, y, width, height) 创建QRect类
=self.pos() 获取坐标数据,返回QPoint类
=self.size() 获取尺寸数据,返回QSize类
=self.x() 获取x轴坐标数据,返回数字
=self.y() 获取y轴坐标数据,返回数字
=self.width() 获取宽度数据,返回数字
=self.height() 获取宽度数据,返回数字
QPoint类 说明
self=QPoint(x, y) 创建QPoint类
=self.x() 获取x轴坐标数据,返回数字
=self.y() 获取y轴坐标数据,返回数字
QSize类 说明
self=QSize(width, height) 创建QSize类
=self.width() 获取宽度数据,返回数字
=self.height() 获取宽度数据,返回数字

2 基本窗口 QWidget

QWidget是PyQt5的核心,QWidget加任意控件就可以形成最简单的APP

2.1 方法列表

QWidget类 说明
self=QWidget(parent) 创建实例和标题栏
parent->父控件,可省略
x, y, width, height, ... 几何类方法,详见窗口的几何数据
self.setWindowTitle(title) 设置标题栏文字
title->字符串
self.setWindowIcon(icon) 设置图标
icon->QIcon类
self.setLayout(layout) 载入布局,只能使用一次
layout->布局类
self.setToolTip(text) 光标悬浮显示文字
self.show() 以非模式显示窗口
self.close() 关闭窗口
QIcon类 说明
self=QIcon(file) 创建图标

2.2 示例 第一个APP

import sys
from PyQt5.QtWidgets import *class MyWindow(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.move(500, 400)self.setFixedSize(300, 300)self.setWindowTitle('第一个APP')btn = QPushButton(self, '开始')   # self下新建Button实例,由于没有布局,此处self不能省略if __name__ == '__main__':app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec_())


说明

if __name__ == '__main__':

一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行

if __name__ == ‘__main__’:的作用相当于C语言中的main()函数,在 if __name__ == ‘__main__’: 下的代码只有文件作为脚本直接运行时才会被执行,而import到其他脚本中是不会被执行的。也就是说项目必须从if __name__ == ‘__main__’:的文件运行,这个文件可以调用其他文件,其他文件不能调用这个文件

不同的是,C语言中 main() 函数是必须的,Python中 if __name__ == ‘__main__’: 是非必须的

import sys
# code
if __name__ == '__main__':app = QApplication(sys.argv)# codesys.exit(app.exec_())

在主程序运行后,首先创建实例 app = QAppliaction,创建时需要使用sys.argv参数

sys.argv这个参数来自Python自带的sys库,作用是在app运行时将键盘、鼠标等外部数据传递给app,相当于全自动运行的input()

app.exec_()的作用是进入程序的主循环直到exit()被调用,并在退出时返回状态代码。相当于C语言中的主程序while(1)。不使用 app.exec_()会导致程序闪退,因为app只有初始化没有主循环

sys.exit() 的作用是关闭窗口后退出进程

class MyWindow(QWidget):def __init__(self):super().__init__()self.initUI()

实例化MyWindow时,自动执行__init__方法,__init__方法负责继承父类初始化和调用自己写的initUI方法完成窗口创建

3 桌面窗口 QDeskWidget

QDeskWidget是将电脑屏幕虚拟为一个窗口,方便使用QWidget类的方法读取屏幕数据,方便布局

3.1 方法列表

QDeskWidget类 说明
self=QDeskWidget() 创建实例
x, y, width, height 几何类方法,详见窗口的几何数据,只能读取

3.2 示例 将窗口放置在屏幕中间

import sys
from PyQt5.QtWidgets import *class MyWindow(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setFixedSize(300, 300)x = (QDesktopWidget().width() - self.width())/2y = (QDesktopWidget().height() - self.height())/2self.move(int(x), int(y))self.setWindowTitle('放在屏幕中间')btn = QPushButton(self)btn.setText('开始')if __name__ == '__main__':app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec_())

4 选项卡窗口 QTabWidget

QTabWidget控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面,通过单击各选项卡可以查看对应的界面,如果在一个窗口中显示的输入字段很多,则可以对这些字段进行拆分,分别放置在不同界面的选项卡中

4.1 方法列表

QTabWidget 说明
self=QTabWidget(parent) 创建实例
parent->父控件,使用布局时可省略
self.addTab(tab, title) 添加选项页
tab->QWidget类
title->字符串
self.insertTab(idx, tab, title) 插入选项页
idx->从0开始
tab->QWidget类
title->字符串
self.removeTab(idx) 移除选项页
self.setCurrentWidget(tab) 设置当前可见的界面
self.setTabPosition() 设置选项卡的位置:
QTabWidget.North:显示在页面的上方
QTabWidget.South:显示在页面的下方
QTabWidget.West:显示在页面的左侧
QTabWidget.East:显示在页面的右侧
self.setTabText(idx, title) 设置选项页标题
继承自QWidget类的方法
x, y, width, height, ... 几何类方法,详见窗口的几何数据
self.setWindowTitle(title) 设置标题栏文字
title->字符串
self.setWindowIcon(icon) 设置图标
icon->QIcon类
self.show() 以非模式显示窗口
self.close() 关闭窗口

4.2 示例 选项卡

import sys
from PyQt5.QtWidgets import *class MyWindow(QTabWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.move(500, 400)self.setFixedSize(300, 300)self.setWindowTitle('选项卡示例')#创建3个选项卡小控件窗口self.tab1=QWidget()self.tab2=QWidget()self.tab3=QWidget()#将三个选项卡添加到顶层窗口中self.addTab(self.tab1, '联系方式')self.addTab(self.tab2, '个人详细信息')self.addTab(self.tab3, '教育程度')#每个选项卡自定义的内容self.tab1UI()self.tab2UI()self.tab3UI()def tab1UI(self):#表单布局layout=QFormLayout()#添加姓名,地址的单行文本输入框layout.addRow('姓名',QLineEdit())layout.addRow('地址',QLineEdit())self.tab1.setLayout(layout)def tab2UI(self):#表单布局,次水平布局layout=QFormLayout()sex=QHBoxLayout()#水平布局添加单选按钮sex.addWidget(QRadioButton('男'))sex.addWidget(QRadioButton('女'))#表单布局添加控件layout.addRow(QLabel('性别'),sex)layout.addRow('生日',QLineEdit())self.tab2.setLayout(layout)def tab3UI(self):#水平布局layout=QHBoxLayout()#添加控件到布局中layout.addWidget(QLabel('科目'))layout.addWidget(QCheckBox('物理'))layout.addWidget(QCheckBox('高数'))self.tab3.setLayout(layout)
if __name__ == '__main__':app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec_())

5 主窗口 QMainWindow

QMainWindow是APP的最上层窗口,不能直接使用布局和控件,而是将其他窗口作为中央窗口(Central Widget)过渡

QMainWindow的结构分为五个部分:菜单栏(Menu Bar)、工具栏(Toolbars)、停靠窗口(Dock Widgets)、状态栏(Status Bar)和中央窗口(Central Widget)。可以用下面的图形表示:


菜单是QMenu对象,然后将多个QMenu对象放置在一个QMenuBar(菜单栏)对象中。对于每个菜单,我们再为其添加动作列表,即QAction对象。

5.1 方法列表 QMainWindow

QMainWindow类 说明
self=QMainWindow(title) 创建实例和标题栏
title->字符串,可省略
self.setCentralWidget(widget) 将窗口设为中央窗口
widget->QWidget类
=self.statusBar() 创建状态栏,返回QStatusBar类
=self.menuBar() 创建菜单栏,返回QMenuBar类
继承自QWidget类的方法
x, y, width, height 几何类方法,详见窗口的几何数据
self.setWindowTitle(title) 设置标题栏文字
title->字符串
self.setWindowIcon(icon) 设置图标
icon->QIcon类
self.show() 以非模式显示窗口
self.close() 关闭窗口
QStatusBar类 说明
self.showMessage(message) 设置状态栏文字
message->字符串
QMenuBar类 说明
self.addAction(action) 菜单添加动作
action->QAction类
self.addMenu(menu) 菜单添加下拉菜单
menu->QMenu
QMenu类 说明
self..addAction(action) 下拉菜单添加动作
action->QAction类
QAction类 说明
self=Action(text, parent) 创建实例和名称
text->字符串
parent->父控件,QMenuBar类QMenu类
self.setShortcut('Ctrl+Q') 快捷方式
self.setStatusTip(message) 状态栏提示
message->字符串
self.triggered.connect(fun) 触发的槽函数

5.2 示例 有菜单的APP

import sys
from PyQt5.QtWidgets import *
from PyQt5.Qt import *class MyWindow(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.move(500, 400)self.setFixedSize(300, 300)self.setWindowTitle('有菜单的APP')self.statusBar()menubar = self.menuBar()file_menu = menubar.addMenu('File')exit_act = QAction('Exit', self)exit_act.setShortcut('Ctrl+Q')exit_act.setStatusTip('Exit application')exit_act.triggered.connect(qApp.quit)file_menu.addAction(exit_act)widget = QWidget()self.setCentralWidget(widget)layout = QHBoxLayout()widget.setLayout(layout)label = QLabel('开始')label.setAlignment(Qt.AlignCenter)layout.addWidget(label)btn = QPushButton()layout.addWidget(btn)if __name__ == '__main__':app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec_())

6 对话窗口 QDialog

QDialog是临时弹出的交互对话框,和QWidget的区别是QDialog没有最大最小化按钮,但是多出一个帮助按钮

6.1 方法列表 QDialog

QDialog类 说明
self=QDialog(parent, title) 创建实例和标题栏
title->字符串
parent->父控件,使用布局时可省略
self.exec() 以模式显示窗口,锁住程序以等待窗口的返回值
继承自QWidget类的方法
x, y, width, height, ... 几何类方法,详见窗口的几何数据
self.setWindowTitle(title) 设置标题栏文字
title->字符串
self.setWindowIcon(icon) 设置图标
icon->QIcon类
self.setLayout(layout) 载入布局,只能使用一次
layout->QLayout类
self.show() 以非模式显示窗口
self.close() 关闭窗口

6.2 示例 QDialog主窗口

import sys
from PyQt5.QtWidgets import *class MyWindow(QDialog):  # QWidget改为QDialogdef __init__(self):super().__init__()self.initUI()def initUI(self):self.move(500, 400)self.setFixedSize(300, 300)self.setWindowTitle('垂直布局')layout = QVBoxLayout()self.setLayout(layout)btn1 = QPushButton('start')layout.addWidget(btn1)btn2 = QPushButton('close')layout.addWidget(btn2)if __name__ == '__main__':app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec_())

6.3 示例 QDialog弹出窗口

import sys
from PyQt5.QtWidgets import *class MyWindow(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.move(500, 400)self.setFixedSize(300, 300)self.setWindowTitle('弹出窗口')layout = QVBoxLayout()self.setLayout(layout)btn = QPushButton('对话框')btn.clicked.connect(self.showDialog)layout.addWidget(btn)def showDialog(self):dialog = QDialog(self)dialog.move(600, 500)dialog.setFixedSize(200, 100)btn = QPushButton('关闭窗口', dialog)btn.move(50, 50)btn.clicked.connect(dialog.close)dialog.show()if __name__ == '__main__':app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec_())


>>返回Python系列文章目录<<

PyQt5第一部分-窗口类:QWidget, QDeskWidget, QTabWidget, QMainWindow, QDialog相关推荐

  1. Python Qt GUI设计:QMainWindow、QWidget和QDialog窗口类(基础篇—10)

    目录 1. QMainWindow窗口 2.QWidget窗口 3.QDialog窗口 3.1.QMessageBox窗口 3.2.QInputDialog窗口 3.3.QFontDialog窗口 3 ...

  2. qtabwidget放大_Qt自定义弹窗屏蔽父窗口(QWidget设置setWindowModality(Qt::ApplicationModal);以后再show)...

    写Qt程序时遇到一个问题: Qt自带的弹窗功能单一,所以须要自己用ui设计弹窗的内容,这样弹窗就和普通窗口一样了,但问题是这个弹窗显示后父窗口还是活动的.网上找了很久找到了解决办法: Qt::Wind ...

  3. PYQT5(12)-基本窗口控件-窗口绘图类空间

    一般通过QPainter.QPen和QBrush这三个类来实现绘图功能.QPixmap的作用是加载并呈现本 地图像,其图像的呈现本质上也是通过绘图方式实现的. QPainter QPainter类在Q ...

  4. PyQt5学习--基本窗口控件--QButton类控件

    参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 介绍 PyQt5按钮的基类是QAbstractButton,为抽象类,不能实例化. 常见的按钮类有:QPushButton.QToo ...

  5. [WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]

    首先注册了窗口类,然后创建了一个窗口,创建窗口时指定的窗口的属性和窗口消息的处理函数.函数消息的处理函数大多调用系统默认函数来处理. 1 #include<windows.h> 2 3 / ...

  6. 实战PyQt5: 052-停靠窗口控件QDockWidget

    QDockWidget简介 在很多桌面应用软件中,比如Qt的C++ IDE集成开发环境Qt Creater, 宇宙第一集成开发环境Visual Studio等工程软件,都使用了停靠窗口布局,这样做有一 ...

  7. PyQt5学习--基本窗口控件--加载文件-QFileDialog

    参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 介绍 QFileDialog是用来打开和保存文件的标准对话框.QFileDialog类继承自QDialog类. QFileDialo ...

  8. PyQt5学习--基本窗口控件--QMainWindow

    参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 QMainWindow主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件.比如将工具栏.菜单栏和状态栏等添加到布 ...

  9. distiller的另一个实例正忙于启动_PYQT5学习(02):利用Qt Designer制作第一个窗口程序

    目标 利用Qt Designer设计窗口界面 使用PyUIC把Qt Designer生成的UI文件转换为py文件 使用转换生成的py文件 创建项目 启动启动pycharm并创建项目 这一环节在这里就不 ...

最新文章

  1. JS实现图片放大查看
  2. MinGW下静态编译、链接Qt 5.0
  3. C#中怎样跨窗体调用事件-从事件订阅实例入手
  4. 【BZOJ3712】Fiolki(并查集重构树)
  5. 2013年7月04日_回顾总结
  6. Microsoft Visual C# 2008 Step by Step
  7. php mysql 字段自增_MySQL自增字段取值的详细介绍(附代码)
  8. js实现炫酷数字效果
  9. Flutter基础—应用实例
  10. 第 6 章 工厂模式
  11. 黑马程序员——C语言基础 字符串
  12. JACKSON JSON 操作帮助类
  13. java 调用soapui_利用soapui和jdk API访问webservice
  14. 百度AI-语音识别图片搜索(Java)
  15. 运用spss modeler运用支持向量机_一道向量题一题多解引起的思考
  16. golang 报错 missing go.sum entry
  17. 如何入门嵌入式?ARM嵌入式开发板学习方法步骤
  18. linux tty core code,linux tty core 源码分析(6)
  19. 七招教你如何取好极具吸引力的文案标题
  20. js实现复制图片到剪切板下载图片

热门文章

  1. Urban Airship Android Client - Google GCM Push
  2. hdu1056 堆积木
  3. 贾跃亭不是老赖?网传贾跃亭已偿还200亿债务,你怎么看?...
  4. 机房机柜专用UPS不间断电源的使用寿命能够达到多久?
  5. 网购平台比价系统的实现
  6. c ibatis mysql实例_Ibatis+MySql实例
  7. 网络性能优化的几个思路
  8. 全国计算机竞赛保送清华,35人!江苏2021清华、北大保送名单公布!
  9. python爬取肯德基KFC全国门店2021-01-11
  10. python 查看kafka发送的消息格式及消息内容