返回

PyQt5基本窗口控件(二)QWidget

发布时间:2023-01-09 20:36:06 279
# python# 脚本# 信息# 工具

(PyQt5基本窗口控件(二)QWidget)

二、QWidget

  • 是基础窗口控件,是所有用户界面对象的基类,所有窗口和控件都继承自QWidget类。
  • 窗口:包括标题栏、菜单栏、工具栏、关闭按钮、最小化、最大化按钮等。
  • 控件:按钮、复选框、单选框、文本框、表格、进度条等

1、窗口坐标系统

  • PyQt使用统一坐标系统来定位窗口控件的位置和大小,具体如下图。 在这里插入图片描述
  • 以屏幕左上角为原点——即pos的(0, 0)点,从左向右为x轴正方向,从上向下为y轴正方向。同理每个窗口内部也有这样的坐标系统,原点、x轴、y轴围成的区域是ClientArea(客户区),在客户区的周围则是标题栏(WindowTitle)和边框(Frame)。
  • 上图是QWidget的成员函数标识,分为三类。
    • QWidget直接提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得客户区的宽度和高度。
    • QWidget的geometry()提供的成员函数:x()、y()获得客户区左上角的坐标,width()、height()获得客户区的宽度和高度。
    • QWidget的frameGeometry()提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得客户区、标题栏和边框在内整个窗口的宽度和高度。

2、常用的几何结构

(1)QWidget不包含边框的常用函数

  • 改变客户区的面积

      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)
    

    这俩函数,同时改变客户区的大小和位置,x和y对应的是x和y坐标。

(2)QWidget包含边框的常用函数

  • 获得窗口的大小和位置

      QWidget.frameGeometry()		
    
  • 设置窗口的位置

      QWidget.move(int x, int y)
      QWidget.move(QPoint point)	
    
  • 获得窗口左上角的坐标

      QWidget.pos()			
    

案例四、屏幕坐标系统显示

# -*- coding:utf-8 -*-
# @Time:2022/12/7 0007 23:49
# @Author:晚秋拾叶
# @File:qt04_widgetGeometry.py
# Python之PyCharm
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
import sys

app = QApplication(sys.argv)
widget = QWidget()
btn = QPushButton(widget)
btn.setText("按钮")

# 以QWidget左上角为(0,0)点
btn.move(20, 20)

# 不同的操作系统可能对窗口的最小宽度有规定,若设置宽度小于限定值,则会以规定值进行显示
widget.resize(300, 200)

# 以屏幕左上角为(0, 0)点
widget.move(250, 250)

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_())
  • 效果如下: 

3、创建一个最简单的PyQt5应用

案例五 建立一个主窗口

# -*- coding:utf-8 -*-
# @Time:2022/12/8 0008 0:21
# @Author:晚秋拾叶
# @File:FirstPyQt5.py
# Python之PyCharm
import sys
from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)        # 定义一个应用程序的实例
win = QWidget()                     # 实例化一个窗体(基础窗口控件)
win.resize(300, 200)                # 改变客户区大小
win.move(250, 150)                  # 设置窗口的位置
win.setWindowTitle("Hello PyQt5")   # 设置win窗口标题
win.show()

sys.exit(app.exec_())

  • 代码分析:

    • QApplication(sys.argv)里面的参数sys.argv是一个命令行参数列表,是引自C++格式来的。Python脚本可以从Shell中执行,如双击py文件,通过参数选择启动脚本的方式
    • 窗口和控件都继承自QWidget类,不给控件指定父对象,那么控件就是一个窗口,就可以setWindowTitle()和setWindowIcon()
    • 这里的窗口坐标系统,在各种手机端操作系统,也是适应的。
    • sys.exit(app.exec_())用sys的exit命令,让app程序的主循环停止,按规则,此时exec_()返回的是0。
    • exec_()函数在PyQt4及以前版本,是因为Python2中exec是Python关键字。所以PyQt5就用了exec_(),到Python3以后,问题解决,但是习惯以及向后兼容,依然用exec_()这个写法。
  • 效果如下:

4、为应用设置程序图标

案例六 设置程序图标

# -*- coding:utf-8 -*-
# @Time:2022/12/8 0008 0:40
# @Author:晚秋拾叶
# @File:qt04_QIcon.py
# Python之PyCharm
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QApplication


# 1 创建一个名为Icon的窗口类,继承自QWidget类
class Icon(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    # 2 初始化窗口
    def initUI(self):
        self.setGeometry(600, 600, 450, 350)
        self.setWindowTitle("程序图标")
        self.setWindowIcon(QIcon('./images/头像.ico'))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    icon = Icon()
    icon.show()
    sys.exit(app.exec_())
    
  • 代码分析:
    • 上一个例子是面向过程编程,这个例子是面向对象编程。面向对象的情况下,就是属性、方法、类等。这个程序里面就有了Icon类中的构造函数(方法)和继承类QWidget的构造函数。
    • 再定义了初始化界面的方法initUI(),里面用了QWidget里面的三种方法setGeometry()、setWindowTitle()、setWindowIcon(),分别用来设置位置大小、标题、图标。
  • 效果如下: 

5、显示气泡提示信息

案例七 显示气泡提示信息

# -*- coding:utf-8 -*-
# @Time:2022/12/8 0008 0:40
# @Author:晚秋拾叶
# @File:qt04_QIcon.py
# Python之PyCharm

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("这是一个气泡提示")  # 接受富文本格式如Html
        self.setGeometry(200, 300, 400, 400)
        self.setWindowTitle('气泡提示Demo')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = WinForm()
    win.show()
    sys.exit(app.exec_())

  • 代码分析:
    • 创建工具提示,需要调用setToolTip()方法,该方法接受富文本格式的参数。
  • 效果如下: 
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
PyQt5基本窗口控件(一)QMainWindow 2023-01-09 20:18:38