当前位置:网站首页>PyQt5快速开发与实战 4.2 QWidget
PyQt5快速开发与实战 4.2 QWidget
2022-07-27 10:13:00 【Ding Jiaxiong】
PyQt5快速开发与实战
文章目录
4. 第4章 PyQt5 基本窗口控件
4.2 QWidget
基础窗口控件 QWidget类是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类。
窗口控件(Widget,简称“控件”是在PyQt中建立界面的主要元素。在 PyQt中把没有嵌入到其他控件中的控件称为窗口,一般窗口都有边框、标题栏。窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最小化按钮、最大化按钮等;控件是指按钮、复选框、文本框、表格、进度条等这些组成程序的基本元素。一个程序可以有多个窗口,一个窗口也可以有多个控件。
4.2.1 窗口坐标系统
PyQt使用统一的坐标系统来定位窗口控件的位置和大小。
顶层窗口:
以屏幕的左上角为原点(0,0),从左向右为x轴正向,从上向下为y轴正向,整个屏幕的坐标系统用来定位顶层窗口。
窗口内部:
以左上角作为原点,从左向右为x轴正向,从上向下为y轴正向,原点、x轴、y轴围成的区域叫作Client Area(客户区),在客户区周围则是标题栏(Window Title)和边框(Frame)。

QWidget直接提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得客户区的宽度和高度。
QWidget的 geometry()提供的成员函数:x()、y())获得客户区左上角的坐标,width()、height()获得客户区的宽度和高度。
QWidget的 frameGeometry()提供的成员函数: x()、y()获得窗口左上角的坐标,width()、height()获得包含客户区、标题栏和边框在内的整个窗口的宽度和高度。
4.2.2 常用的几何结构
两种常用的几何结构:
- 不包含外边各种边框的几何结构
- 包含外边各种边框的几何结构
- QWidget不包含边框的常用函数
一般情况下,不包含边框的部分是客户区,这里面就是正常操作的地方,可以添加子控件。这部分是一个长方形,会有大小和位置。大小就是指宽度(width)和高度(height);位置就是指这个长方形在屏幕上的位置。在Qt中保存这个长方形使用的是QRect类,这个类也有自己的大小和位置。要改变其大小和位置,可以使用如下几个函数。
改变客户区的面积
QWidget.resize(width, height) QWidget.resize(Qsize)也可以用鼠标来改变它的大小
获得客户区的大小
QWidget.size()获得客户区的宽度和高度
QWidget.width() QWidget.height()设置客户区的宽度和高度
QWidget.setFixedWidth(int width) # 高度固定QWidget.setFixedHeight(int height) # 宽度固定QWidget.setFixedSize(Qsize size) QWidget.setFixedsize(int width, int height) # 高度宽度固定了,不可以通过鼠标来改变窗口的宽度和高度同时改变客户区的大小和位置
QWidget.setGeometry(int x, int y, int width, int height); QWidget.setGeometry(QRect rect)
- QWidget包含边框的常用函数
QWidget包含边框,这个边框有大小和位置,是窗口在屏幕上显示的整个区域。这里没有设置这个边框大小的函数,因为通过上面不包含边框函数的设置,就可以设置包含边框的大小了。通过下面的函数,可以获得整个窗口的位置和大小。
获得窗口的大小和位置
QWidget.frameGeometry()设置窗口的位置
QWidget.move(int x , int y) QWidget.move(QPoint point)获得窗口左上角的坐标
QWidget.pos()
案例
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton
import sys
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
widget = QWidget()
btn = QPushButton(widget)
btn.setText("Button")
# 以QWidget左上角为(0,0)点
btn.move(20, 20)
widget.resize(300 , 200)
# 以屏幕左上角为(0,0)点
widget.move(250 , 200)
widget.setWindowTitle("PyQt 坐标系统例子")
widget.show()
print("QWidget:")
print("w.x() = %d" % widget.x())
print("w.y() = %d" % widget.y())
print("w.width() = %d" % widget.width())
print("w.height() = %d" % widget.height())
print("QWidget.geometry")
print("widget.geometry().x() = %d " % widget.geometry().x())
print("widget.geometry().y() = %d " % widget.geometry().y())
print("widget.geometry().width() = %d " % widget.geometry().width())
print("widget.geometry().height() = %d " % widget.geometry().height())
sys.exit(app.exec_())

4.2.3 创建第一个PyQt5 应用
# -*- coding:UTF-8 -*-
# 上面这行代码是为了避免在所生成的PyQt程序中出现中文乱码问题
import sys
from PyQt5.QtWidgets import QApplication,QWidget # 载入必需的模块
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv) # 每一个PyQt5程序都需要有一个QApplication对象
window = QWidget() # 所有用户界面类的父类,这里使用了没有参数的默认构造函数,没有继承其他类,称没有父类的控件为窗口。
window.resize(300 , 200) # 改变窗口控件的大小
window.move(250 , 150) # 设置窗口初始化的位置(x , y)
window.setWindowTitle("Hello PyQt5") # 设置窗口控件的标题
window.show() # 将窗口控件显示在屏幕上
sys.exit(app.exec_()) # 如果是Python3 下,完全可以写成app.exec() ,【向下兼容】

4.2.4 为应用设置程序图标
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget , QApplication
# 创建一个名为Icon的窗口类,继承自QWidget类
class Icon(QWidget):
def __init__(self,parent = None):
super(Icon, self).__init__(parent) # 必须调用两个构造函数
self.initUI()
# 初始化窗口
def initUI(self):
self.setGeometry( 300 , 300 ,250 , 150)
self.setWindowTitle("程序图标")
self.setWindowIcon(QIcon('../打包资源文件/pic/cartoon2.ico'))
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
icon = Icon()
icon.show()
sys.exit(app.exec_())


Python同时支持面向过程和面向对象编程,PyQt的精髓是面向对象编程。
4.2.5 显示气泡提示信息
import sys
from PyQt5.QtWidgets import QWidget , QToolTip , QApplication
from PyQt5.QtGui import QFont
class Winform(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif',10))
self.setToolTip('这是一个<b>气泡提示</b>')
self.setGeometry(200 , 300 ,400 ,400)
self.setWindowTitle("气泡提示demo")
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = Winform()
win.show()
sys.exit(app.exec_())

当鼠标悬停于主窗口中时,显示气泡提示。
边栏推荐
- FSM onehot answer record
- A brief introduction to R language pipeline symbols (% >%) and placeholders (.)
- Oracle查看硬解析
- [brother hero June training] day 25: tree array
- FTP server
- ORACLE 11g手动内存管理
- Ant advanced -path and fileset
- Matlab-绘制日期和持续时间图
- Matlab draws the system response under different damping
- ctf (hardrce)
猜你喜欢

Have you ever seen this kind of dynamic programming -- the stock problem of state machine dynamic programming (Part 1)

warning: remote HEAD refers to nonexistent ref, unable to checkout报错信息
![[shutter] SharedPreferences](/img/e4/e7518126d35c9ed0eeeacabb262cd3.png)
[shutter] SharedPreferences

邮件服务器

文档智能多模态预训练模型LayoutLMv3:兼具通用性与优越性

How to turn off the application of computer self startup

Wind10 configure ADB command

JSP自定义标签之自定义分页01

Basic statement of database operation

Share machine learning notes (PDF version) + practical projects (dataset + code)
随机推荐
Share machine learning notes (PDF version) + practical projects (dataset + code)
Matlab- draw date and duration diagram
samba服务器
【英雄哥六月集训】第 23天: 字典树
Shardingsphere kernel principle
【英雄哥六月集训】第 28天: 动态规划
分享机器学习笔记(PDF版)+实战项目(数据集+代码)
Apache cannot start in phpstudy
Different binary conversion of MATLAB
【Liunx】安装MySQL
Oracle 11g manual memory management
[Flink] Flink builds clusters in standalone mode
数据库操作基础语句
Establishment of NFS server
Understanding of batchnorm2d() function in pytorch
Girl fan wants to find a boyfriend, but it's for
Wind10 configure ADB command
JVM -- Analysis of bytecode
hdu5288(OO’s Sequence)
FTP server