PyQt5基本窗口控件二(QWidget)

标签: python

QWidget基本介绍

基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口或者控件都直接或者间接的继承自QWidget类。


窗口坐标系统

PyQt使用统一的坐标系统来定位窗口控件的位置和大小,具体如下
窗口坐标系统
以屏幕左上角为原点,也就是(0, 0)点,从左向右为x轴正方向,从上向下为y轴正方向,整个屏幕的坐标系统用来定位顶层窗口。
在窗口内部也有自己的坐标系统,该坐标系统以客户区的左上角为原点,从左向右为x轴正方向,从上到下为y轴正方向,在客户区周围有标题栏和边框。
QWidget几何机构
从上图中,可以将这些成员函数分成三类:

  1. QWidget直接提供的成员函数,x(), y()获得整个窗口左上角的坐标,width()和height()返回客户区的宽度和高度。
  2. QWidget的geometry()提供的成员函数,x(),y()返回的是客户区左上角坐标,width(),height()返回客户区宽度和高度。
  3. QWidget的frameGeometry()提供的成员函数,x(),y()返回的是整个窗口左上角的坐标,-width(),height()也是整个对话框的宽度和高度,包括标题栏和边框。

从上图可以看出来,QWidget有两种常见的几何结构
不包含外面各种边框的几何结构(客户区)。
包含各种边框的几何结构。

不包含边框常用函数

  • 改变客户区面积
    QWidget.resize(width, height)
  • 获取客户区大小
    QWidget.size()
  • 获取客户区的宽度和高度
    QWidget.width()
    QWidget.height()
  • 设置客户区的宽度和高度(在某些维度上值不可改变)
    QWidget.setFixedWidth(int width)
    QWidget.setFixedHeight(int height)
    QWidget.setFixedSize(int width, int height)
  • 设置窗口的位置(值可以改变)
    QWidget.setGeometry(int x, int y, int width, int height)

包含边框常用函数

  • 获取窗口的大小和位置
    QWidget.frameGeometry()
  • 设置窗口的位置
    QWidget.move(int x, int y)
  • 获取窗口左上角坐标
    QWidget.pos()

坐标系统测试

# _*_ coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton)

class MyDialog(QWidget):
    def __init__(self):
        super(MyDialog, self).__init__()
        self.init_ui()

    def init_ui(self):
        # (50, 50)相对屏幕最左上角
        # (300, 200)客户区宽度 高度
        self.move(50, 50)
        self.resize(300, 200)
        self.setWindowTitle('测试窗口坐标系统')

        self.btn = QPushButton('测试按钮', self)
        # 相对于客户区的原点
        self.btn.move(20, 20)

        self.show()

    def show_coordinate(self):
        print("显示整个窗口的参数")
        print("QWidget.x() = %d" % self.x())
        print("QWidget.y() = %d" % self.y())
        print("QWidget.pos()" + str(self.pos()))
        print("width=%d" % self.frameGeometry().width())
        print("height=%d\n" % self.frameGeometry().height())

        print("显示工作区参数")
        print("x=%d" % self.geometry().x())
        print("y=%d" % self.geometry().y())
        print("width=%d" % self.width())
        print("height=%d" % self.height())
        print("geometry width=%d" % self.geometry().width())
        print("geometry height=%d\n" % self.geometry().height())

        print("显示按钮参数")
        print("x=%d" % self.btn.x())
        print("y=%d" % self.btn.y())

if __name__ == "__main__":

    app = QApplication(sys.argv[1:])

    win = MyDialog()
    win.show_coordinate()

    sys.exit(app.exec_())

显示整个窗口的参数 QWidget.x() = 50 QWidget.y() = 50
QWidget.pos()PyQt5.QtCore.QPoint(50, 50) width=318 height=245

显示工作区参数 x=59 y=86 width=300 height=200 geometry width=300 geometry
height=200

显示按钮参数 x=20 y=20

坐标系测试

版权声明:本文为weixin_43200735原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43200735/article/details/82766373

智能推荐

Qt 之 Query Model Example 解析

总体概括 Query Model Example主要演示了怎么使用QSqlQueryModel这个数据库查询模型类。其中包括创建普通的数据库查询模型、可编辑的数据库查询模型和自定义的数据库查询模型。普通(默认)的数据库查询模型是只读的(不可再模型中编辑数据,模型只通过视图展示数据);可编辑的数据库查询模型重写了QSqlQueryModel的flags()方法和setData()方法;自定义的数据库...

Flutter:Scaffold.of() called with a context that does not contain a Scaffold.

Flutter:Scaffold.of() called with a context that does not contain a Scaffold. 当我第一次点击按钮想要弹出底部消息时出现了如下错误 当BuildContext在Scaffold之前时,调用Scaffold.of(context)会报错。这时可以通过Builder Widget来解决,代码如下:...

【机器学习基础】线性回归

                                                        &nbs...

08-Vue实现书籍购物车案例

书籍购物车案例 index.html main.js style.css 1.内容讲解 写一个table和thead,tbody中每一个tr都用来遍历data变量中的books列表。 结果如下: 在thead中加上购买数量和操作,并在对应的tbody中加入对应的按钮。结果如下: 为每个+和-按钮添加事件,将index作为参数传入,并判断当数量为1时,按钮-不可点击。 结果如下: 为每个移除按钮添加...

堆排序

堆排序就是利用堆进行排序的方法,基本思想是,将代排序列构造成一个大根堆,此时整个序列的最大值就是堆顶的根节点。将它与堆数组的末尾元素交换,此时末尾元素就是最大值,移除末尾元素,然后将剩余n-1个元素重新构造成一个大根堆,堆顶元素为次大元素,再次与末尾元素交换,再移除,如此反复进行,便得到一个有序序列。 (大根堆为每一个父节点都大于两个子节点的堆) 上面思想的实现还要解决两个问题: 1.如何由一个无...

猜你喜欢

基础知识(变量类型和计算)

一、值类型 常见的有:number、string、Boolean、undefined、Symbol 二、引用类型 常用的有:object、Array、null(指针指向为空)、function 两者的区别: 值类型暂用空间小,所以存放在栈中,赋值时互不干扰,所以b还是100 引用类型暂用空间大,所以存放在堆中,赋值的时候b是引用了和a一样的内存地址,所以a改变了b也跟着改变,b和a相等 如图: 值...

Codeforces 1342 C. Yet Another Counting Problem(找规律)

题意: [l,r][l,r][l,r] 范围内多少个数满足 (x%b)%a!=(x%a)%b(x \% b) \% a != (x \% a) \% b(x%b)%a!=(x%a)%b。 一般这种题没什么思路就打表找一下规律。 7 8 9 10 11 12 13 14 15 16 17 18 19 20 28 29 30 31 32 33 34 35 36 37 38 39 40 41 49 50...

[笔记]飞浆PaddlePaddle-百度架构师手把手带你零基础实践深度学习-21日学习打卡(Day 3)

[笔记]飞浆PaddlePaddle-百度架构师手把手带你零基础实践深度学习-21日学习打卡(Day 3) (Credit: https://gitee.com/paddlepaddle/Paddle/raw/develop/doc/imgs/logo.png) MNIST数据集 MNIST数据集可以认为是学习机器学习的“hello world”。最早出现在1998年LeC...

哈希数据结构和代码实现

主要结构体: 实现插入、删除、查找、扩容、冲突解决等接口,用于理解哈希这种数据结构 完整代码参见github: https://github.com/jinxiang1224/cpp/tree/master/DataStruct_Algorithm/hash...