本来这一篇是想写一下怎么使用Qt Designer去设计一个界面的,但是我现在通常都是用代码去直接写界面很少用设计器。因为Qt Designer并不是为了python而写的,所以用起来不是很方便。很多初学者可能都比较喜欢使用Qt Designer,因为所见即所得,我以前做MFC开发的时候也是一直用界面设计器,主要是VS的功能非常强大,而且界面设计和代码编写都是使用这个IDE,契合非常完美。但是Qt Designer就一样了。另外一点就是因为你对PyQt5的布局管理器的使用不熟悉,如果你学会了布局管理器的使用,那这些控件的布局其实非常简单。他并不是你所想象的用代码去按像素调整窗口,PyQt5的布局管理器是根据左右布局、上下布局或者栅格布局自动帮你调整到对应的位置,你只需要进行一些微调就可以了。我们在网上搜到的很多代码都是直接去设置控件的绝对位置,这样就误导了很多人。PyQt5的布局管理器是非常好用的,它可以帮我们把大概的布局很简单的就设计好。所以后期我的教程会尽量使用布局管理器。同时在使用的地方也会加上一些注释,这样大家代码看得多了以后就会对布局管理器有一些了解。所以这一篇呢,我们就从控件开始吧,后期如果有时间的话,我再把Qt Designer简单使用写一篇文章。

QWidget

   一个程序可以拥有多个窗口,每个窗口都会承载多个控件。所有的窗口和控件都是直接或者间接的继承自QWidget类。

窗口坐标系统

  就像大多数GUI系统一样,PyQt5使用的坐标系统也是以左上角为原点(0, 0)。

import sysfrom PyQt5.QtWidgets import QApplication, QWidgetapp = QApplication(sys.argv)widget = QWidget()widget.setGeometry(300, 300, 500, 500)widget.setWindowTitle("我是主窗口控件")w1 = QWidget(widget)w1.setGeometry(100, 100, 200, 200)w1.setWindowTitle("我是子控件")w1.setStyleSheet("background-color:blue")widget.show()sys.exit(app.exec_())

对于独立的顶层窗口,它的X、Y坐标是针对整个屏幕的,也就是说widget控件设置的300,300是在屏幕上的偏移位置。对于子控件,它的X、Y坐标是针对其父控件的,w1控件设置的100,100是针对widget控件的,在整个屏幕上就是400,400位置。X坐标从上往下一次递增,值越大越靠近屏幕下方,Y坐标从左往右依次递增,值越大越靠近屏幕右方。在PyQt5中获取控件位置有以下三种方式:

  • QWidget直接提供的成员函数:x(), y()获得窗口左上角的坐标,width(), height()获取窗口的宽度和高度。
  • QWidget的geometry()提供的成员函数:x(),y()获取窗口左上角坐标,width(), height()获取窗口的宽度和高度。
  • QWidget的frameGeometry()提供的成员函数:x(),y()获取窗口左上角坐标,width(), height()获取窗口的宽度和高度。

常用的几何结构

QWidget有两种几何结构。

  • 不包含外边框。
  • 包含外边框。

对于主窗口控件,不包含边框的部分就是客户区,我们可以在其中添加子控件。

不包含外边框

客户区的大小是一个QRect类。要改变窗口的大小,可以使用如下函数:

  1. 修改窗口大小
    QWidget.resize(width, height)
    Qwidget.resize(QSize)

2.获取窗口大小
QWidget.size()

3.获取窗口的宽和高
QWidget.width()
QWidget.height()

4.设置窗口的高度和宽度
QWidget.setFixedWidth(width)
QWidget.setFixedHeight(height)
QWidget.setFixedSize(QSize)
QWidget.setFixedSize(width, height)
设置固定宽度和高度,设置以后,窗口的大小不能改变。

QWidget.setGeometry(x, y, width, height)
QWidget.setGeometry(QRect)
同时设置窗口的位置和大小

包含外边框

QWidget包含边框是窗口在整个屏幕上显示的整个区域。

  1. 获取窗口的位置和大小
    QWidget.frameGeometry()

2.设置窗口的位置
QWidget.move(x, y)
QWidget.move(QPoint)

3.获得窗口左上角坐标
QWidget.pos()

下面再来一个例子结束今天的文章:

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QPushButtonif __name__ == "__main__":    app = QApplication(sys.argv)    main_widget = QWidget()    main_widget.setWindowTitle("我是主窗口控件")    # 相当于main_widget.setGeometry(300, 300, 500, 500)    main_widget.resize(500, 500)    main_widget.move(300, 300)    # QPushButton(main_widget)的意思是将btn作为main_widget的子控件,这样在移动位置时才会以父控件为参照    # 相当于btn.setParent(main_widget)    btn = QPushButton(main_widget)    btn.setText("我是按钮")    btn.setFixedSize(100, 30)    btn.move(100, 100)    # 打印一下位置信息    print("main_widget")    print("x=%d, y=%d" % (main_widget.x(), main_widget.y()))    print("width=%d, height=%d" % (main_widget.width(), main_widget.height()))    print("geometry")    print("x=%d, y=%d" % (main_widget.geometry().x(), main_widget.geometry().y()))    print("width=%d, height=%d" % (main_widget.geometry().width(), main_widget.geometry().height()))    print("frameGeometry")    print("x=%d, y=%d" % (main_widget.frameGeometry().x(), main_widget.frameGeometry().y()))    print("width=%d, height=%d" % (main_widget.frameGeometry().width(), main_widget.frameGeometry().height()))    main_widget.show()    sys.exit(app.exec_())

mfc e将控件置于窗口顶层_PyQt5学习笔记04 - QWidget窗口控件基类相关推荐

  1. 最大化窗口设置_Qt学习笔记4(窗口操作及插入图片)

    窗口操作: Qt全屏显示函数 showFullScreen() Qt最大化显示函数 showMaximized() Qt最小化显示函数 showMinimized() Qt固定尺寸显示函数 resiz ...

  2. C# 控件置于最顶层、最底层、隐藏、显示

    控件置于最顶层.最底层 pictureBox1.BringToFront();//将控件放置所有控件最前端 pictureBox1.SendToBack();//将控件放置所有控件最底端 控件隐藏.显 ...

  3. C# 学习笔记(8) 控件的跨线程访问

    C# 学习笔记(8) 控件的跨线程访问 本文参考博客 C#多线程 https://www.cnblogs.com/dotnet261010/p/6159984.html C# 线程与进程 https: ...

  4. Python tkinter 学习笔记(2)-- 控件、组件(二)

    Python tkinter 学习笔记(1)-- 第一个窗口之HelloWorld 教程 Python tkinter 学习笔记(2)-- 控件.组件(一) > 续上一章节 Python tki ...

  5. Vue学习笔记:Element时间控件设置某一个日期禁止选择

    Vue学习笔记:Element时间控件添加一段时间禁止选择 需求:时间控件,当天之前禁止选择,某一个日期的之前时间禁止选择 文档: 代码实现:在时间控件上添加 :picker-options=&quo ...

  6. PowerBuilder学习笔记(4)数据窗口(DataWindow)

    PowerBuilder学习笔记(4)数据窗口(DataWindow) 一.数据窗口对象(Object)与数据窗口控件(Control)     数据窗口对象是利用PowerBuilder所提供的数据 ...

  7. VS2019/MFC学习笔记之三(对话框控件随窗口大小同比例缩放)

    目录 一.禁止改变窗口大小 二.控件随窗口大小同比例缩放 三.设置窗口最大最小值 最近在做一个简易计算器的时候,发现窗口大小是可以随意拖动的,但是对话框内的控件并没有发现改变,这就会出现控件部分不动, ...

  8. Duilib学习笔记《03》— 控件使用

    在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...

  9. 安卓学习笔记21:常用控件 - 列表视图

    文章目录 零.学习目标 一.列表视图概述 (一)继承关系图 (二)列表视图四要素 (三)四种适配器 二.基于数组适配器使用列表视图案例 -- 阅读古诗 (一)数组适配器 (二)运行效果 (三)涉及知识 ...

最新文章

  1. 分布式程序的自动化回归测试
  2. hdu 1258 确定比赛名次
  3. 网易云信稳定背后的秘密
  4. 逆向入门--简单win32CK逆向手记
  5. Socket编程实践(4) --多进程并发server
  6. Spring常用注解 - 使用注解来构造IoC容器
  7. mysql生活使用方法_MySQL Workbench使用教程
  8. 第3章 控制程序流程(1)
  9. Java连Mysql数据库
  10. 【算法】排序_冒泡排序及其优化
  11. 事件绑定完整版2016/4/21
  12. 新知实验室TRTC初探
  13. java操作Excel表格使用EasyExcel
  14. Imagination发布开源项目:适配PowerVR IP的Vulkan驱动和编译器合入Mesa 3D 图形库
  15. 餐饮行业裂变解决方案
  16. 如何做到服务的高并发、高可用?
  17. 转:接班人都是“剩出来”的,选接班人9条必用原则
  18. 【无标题】CCSRP是网络与信息安全应急人员认证(现更名为CCSC)
  19. 计算机操作系统——LINUX的C语言编程与shell编程
  20. 图书管理系统——C语言版

热门文章

  1. python之父叫什么-Python之父:为什么操作符很有用?
  2. 以下不是python文件读写方法的是-Python 文件I/O
  3. python手机版idle-Python IDLE下载
  4. python类装饰器详解-Python装饰器详解
  5. python程序员月薪多少-据说做Python程序员,都月薪上万?
  6. python代码格式-Python代码格式PEP8
  7. python小项目实例流程-公司内项目对接钉钉审批流程(python)
  8. LeetCode Guess Number Higher or Lower II(动态规划)
  9. LeetCode Find Minimum in Rotated Sorted Array II
  10. python中的控制流