PyQt5第一部分-窗口类:QWidget, QDeskWidget, QTabWidget, QMainWindow, QDialog
- 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相关推荐
- Python Qt GUI设计:QMainWindow、QWidget和QDialog窗口类(基础篇—10)
目录 1. QMainWindow窗口 2.QWidget窗口 3.QDialog窗口 3.1.QMessageBox窗口 3.2.QInputDialog窗口 3.3.QFontDialog窗口 3 ...
- qtabwidget放大_Qt自定义弹窗屏蔽父窗口(QWidget设置setWindowModality(Qt::ApplicationModal);以后再show)...
写Qt程序时遇到一个问题: Qt自带的弹窗功能单一,所以须要自己用ui设计弹窗的内容,这样弹窗就和普通窗口一样了,但问题是这个弹窗显示后父窗口还是活动的.网上找了很久找到了解决办法: Qt::Wind ...
- PYQT5(12)-基本窗口控件-窗口绘图类空间
一般通过QPainter.QPen和QBrush这三个类来实现绘图功能.QPixmap的作用是加载并呈现本 地图像,其图像的呈现本质上也是通过绘图方式实现的. QPainter QPainter类在Q ...
- PyQt5学习--基本窗口控件--QButton类控件
参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 介绍 PyQt5按钮的基类是QAbstractButton,为抽象类,不能实例化. 常见的按钮类有:QPushButton.QToo ...
- [WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]
首先注册了窗口类,然后创建了一个窗口,创建窗口时指定的窗口的属性和窗口消息的处理函数.函数消息的处理函数大多调用系统默认函数来处理. 1 #include<windows.h> 2 3 / ...
- 实战PyQt5: 052-停靠窗口控件QDockWidget
QDockWidget简介 在很多桌面应用软件中,比如Qt的C++ IDE集成开发环境Qt Creater, 宇宙第一集成开发环境Visual Studio等工程软件,都使用了停靠窗口布局,这样做有一 ...
- PyQt5学习--基本窗口控件--加载文件-QFileDialog
参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 介绍 QFileDialog是用来打开和保存文件的标准对话框.QFileDialog类继承自QDialog类. QFileDialo ...
- PyQt5学习--基本窗口控件--QMainWindow
参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 QMainWindow主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件.比如将工具栏.菜单栏和状态栏等添加到布 ...
- distiller的另一个实例正忙于启动_PYQT5学习(02):利用Qt Designer制作第一个窗口程序
目标 利用Qt Designer设计窗口界面 使用PyUIC把Qt Designer生成的UI文件转换为py文件 使用转换生成的py文件 创建项目 启动启动pycharm并创建项目 这一环节在这里就不 ...
最新文章
- JS实现图片放大查看
- MinGW下静态编译、链接Qt 5.0
- C#中怎样跨窗体调用事件-从事件订阅实例入手
- 【BZOJ3712】Fiolki(并查集重构树)
- 2013年7月04日_回顾总结
- Microsoft Visual C# 2008 Step by Step
- php mysql 字段自增_MySQL自增字段取值的详细介绍(附代码)
- js实现炫酷数字效果
- Flutter基础—应用实例
- 第 6 章 工厂模式
- 黑马程序员——C语言基础 字符串
- JACKSON JSON 操作帮助类
- java 调用soapui_利用soapui和jdk API访问webservice
- 百度AI-语音识别图片搜索(Java)
- 运用spss modeler运用支持向量机_一道向量题一题多解引起的思考
- golang 报错 missing go.sum entry
- 如何入门嵌入式?ARM嵌入式开发板学习方法步骤
- linux tty core code,linux tty core 源码分析(6)
- 七招教你如何取好极具吸引力的文案标题
- js实现复制图片到剪切板下载图片
热门文章
- Urban Airship Android Client - Google GCM Push
- hdu1056 堆积木
- 贾跃亭不是老赖?网传贾跃亭已偿还200亿债务,你怎么看?...
- 机房机柜专用UPS不间断电源的使用寿命能够达到多久?
- 网购平台比价系统的实现
- c ibatis mysql实例_Ibatis+MySql实例
- 网络性能优化的几个思路
- 全国计算机竞赛保送清华,35人!江苏2021清华、北大保送名单公布!
- python爬取肯德基KFC全国门店2021-01-11
- python 查看kafka发送的消息格式及消息内容