PyQt5学习笔记

P95  绝对布局

绝对布局,使用move方法,操作坐标来控件控件的位置。
import sys
from PyQt5.QtWidgets import *
'''
绝对布局,使用move方法,操作坐标来控件控件的位置。
'''
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        # self.resize(300, 300)
        self.setWindowTitle('绝对布局')

        self.label1=QLabel("欢迎",self)
        self.label1.move(15,20)

        self.label2=QLabel("学习",self)
        self.label2.move(35,40)

        self.label3=QLabel("PyQt5",self)
        self.label3.move(55,80)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P96 水平盒布局

学习的新方法:

hlay.setSpacing() 设置控件间距,参数为数字

课堂练习代码: 

import sys
from PyQt5.QtWidgets import *

class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        hlay=QHBoxLayout()
        hlay.setSpacing(40) # 设置控件间距
        hlay.addWidget(QPushButton("按钮1"))
        hlay.addWidget(QPushButton("按钮2"))
        hlay.addWidget(QPushButton("按钮3"))
        hlay.addWidget(QPushButton("按钮4"))
        hlay.addWidget(QPushButton("按钮5"))
        self.setLayout(hlay)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P97设置控件拉伸因子及对齐方式

参数:

addWidget(self, QWidget, stretch=0, alignment, Qt_Alignment=None, Qt_AlignmentFlag=None, *args, **kwargs)
    参数1.QWidget 表示控件,比如按钮等。
    参数2.stretch 参数值为数字,比如代码中的数字2或4,数字表示拉伸因子:
        在 PyQt5 中,Hlay.addWidget(假设应该是水平布局QHBoxLayout的addWidget方法)中的数字参数通常是拉伸
    因子(stretch factor)。
        这个参数决定了在布局调整大小时,各个添加到布局中的部件如何分配多余的空间。例如,如果有多个部件添加到一个水平
    布局中,并且给不同的部件设置不同的拉伸因子,当布局的宽度发生变化时,具有较大拉伸因子的部件会分配到更多的额外空间,
    而拉伸因子较小的部件分配到的额外空间相对较少。如果不设置这个参数或者设置为 0,部件通常不会自动拉伸以适应布局的变化。
    参数3.Qt_Alignment    表示对齐方式,参数值比如为Qt.AlignLeft | Qt.AlignBottom,同时有两种对齐方式用|连接。

课堂练习代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        hlay=QHBoxLayout()
        # hlay.setSpacing(40) # 设置控件间距
        hlay.addWidget(QPushButton("按钮1"),2,Qt.AlignLeft | Qt.AlignTop)
        hlay.addWidget(QPushButton("按钮2"),4,Qt.AlignLeft | Qt.AlignTop)
        hlay.addWidget(QPushButton("按钮3"),1,Qt.AlignLeft | Qt.AlignTop)
        hlay.addWidget(QPushButton("按钮4"),1,Qt.AlignLeft | Qt.AlignBottom)
        hlay.addWidget(QPushButton("按钮5"),1,Qt.AlignLeft | Qt.AlignBottom)
        self.setLayout(hlay)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P98 垂直盒布局

课堂练习代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        Vlay=QVBoxLayout()
        # hlay.setSpacing(40) # 设置控件间距
        Vlay.addWidget(QPushButton("按钮1"))
        Vlay.addWidget(QPushButton("按钮2"))
        Vlay.addWidget(QPushButton("按钮3"))
        Vlay.addWidget(QPushButton("按钮4"))
        Vlay.addWidget(QPushButton("按钮5"))
        self.setLayout(Vlay)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P99  设置布局的伸缩量(addStretch用法,好好总结一下该知识点)

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('设置伸缩量')
        self.resize(800,100)
        b1=QPushButton(self)
        b2=QPushButton(self)
        b3=QPushButton(self)
        b4=QPushButton(self)
        b5=QPushButton(self)

        b1.setText("按钮1")
        b2.setText("按钮2")
        b3.setText("按钮3")
        b4.setText("按钮4")
        b5.setText("按钮5")

        lay=QHBoxLayout()
        lay.addStretch(0)
        lay.addWidget(b1)
        lay.addWidget(b2)
        lay.addWidget(b3)
        lay.addWidget(b4)
        lay.addWidget(b5)

        lay.addStretch(1)
        btOK=QPushButton("确定")
        lay.addWidget(btOK)
        btCancel=QPushButton("取消")
        lay.addWidget(btCancel)
        self.setLayout(lay)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P100让按钮永远位于右下角

1.应用场景

2.课堂练习代码

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('让按钮永远位于右下角')
        self.resize(400,300)
        hlay=QHBoxLayout()
        btOK=QPushButton("确定")
        btCancel=QPushButton("取消")
        hlay.addStretch(1)
        hlay.addWidget(btOK)
        hlay.addWidget(btCancel)

        vlay=QVBoxLayout()
        bt1=QPushButton("按钮1")
        bt2=QPushButton("按钮2")
        bt3=QPushButton("按钮3")
        vlay.addStretch(1)
        vlay.addWidget(bt1)
        vlay.addWidget(bt2)
        vlay.addWidget(bt3)
        vlay.addLayout(hlay)

        self.setLayout(vlay)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P101 网格布局:用循环方式实现计算器UI 

课堂练习代码(优于老师的代码):

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('网格布局')
        lay=QGridLayout()
        self.setLayout(lay)
        names=['Cls','Back','','Close',
               '7','8','9','/',
               '4','5','6','*',
               '1','2','3','-',
               '0','.','=','+']

        for num in range(len(names)):
            row=num//4
            column=num%4
            lay.addWidget(QPushButton(names[num]),row,column)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P102 网格布局:进行表单UI设计(使用跨行跨列功能)

1.设计效果

2.课堂练习代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('网格布局:表单设计')
        lay=QGridLayout()
        self.setLayout(lay)
        titleLabel=QLabel('标题')
        authorLabel=QLabel('作者')
        contentLabel=QLabel('内容')
        titleEdit=QLineEdit()
        authorEidt=QLineEdit()
        contentEdit=QTextEdit()
        lay.addWidget(titleLabel,1,0)
        lay.addWidget(titleEdit,1,1)
        lay.addWidget(authorLabel,2,0)
        lay.addWidget(authorEidt,2,1)
        lay.addWidget(contentLabel,3,0)
        lay.addWidget(contentEdit,3,1,5,1) # 网格布局中跨行跨列设置


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P103表单布局(放大时TextEdittd行UI效果优于P102实现效果)

 1.实现效果

2.课堂练习代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('表单布局')
        self.resize(350,300)
        lay=QFormLayout()
        self.setLayout(lay)
        titleLabel=QLabel('标题')
        authorLabel=QLabel('作者')
        contentLabel=QLabel('内容')
        titleEdit=QLineEdit()
        authorEidt=QLineEdit()
        contentEdit=QTextEdit()

        lay.addRow(titleLabel,titleEdit)
        lay.addRow(authorLabel,authorEidt)
        lay.addRow(contentLabel,contentEdit)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

P104 拖动控件之间的边界(QSplitter未听明白其作用)

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QSplitter例子')
        self.setGeometry(300,300,300,200)

        topleft=QFrame()
        topleft.setFrameShape(QFrame.StyledPanel)

        bottom=QFrame()
        bottom.setFrameShape(QFrame.StyledPanel)

        splitter1 = QSplitter(Qt.Horizontal)
        edit = QTextEdit()
        splitter1.addWidget(topleft)
        splitter1.addWidget(edit)
        splitter1.setSizes([100,200]) # 设置尺寸

        splitter2 = QSplitter(Qt.Vertical)
        splitter2.addWidget(splitter1)
        splitter2.addWidget(bottom)

        hbox=QHBoxLayout()
        hbox.addWidget(splitter2)
        self.setLayout(hbox)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939999.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python3.13安装和配置

Python3.13安装和配置 一、Python的下载 点击下面的下载链接,下载需要的版本。以3.13版本为例。如下图所示: 3.13.0下载地址(windows)3.13.0下载地址(windows) 二、安装 下载完成后,双击安装文件。 <

探索Linux中的Zombie僵死进程

文章目录 探索Linux中的Zombie僵死进程什么是Zombie僵死进程&#xff1f;僵死进程的产生原因如何识别僵死进程&#xff1f;如何清理僵死进程&#xff1f;僵死进程对系统的影响总结 探索Linux中的Zombie僵死进程 在Linux系统中&#xff0c;进程管理是一个非常重要的主题&#x…

win11 C盘出现感叹号解决方法

出现感叹号&#xff0c;原因是对C盘进行了BitLocker驱动器加密操作。如果想去除感叹号&#xff0c;对C盘进行BitLocker解密即可。 步骤如下&#xff1a; 1.点击Windows搜索框 2.搜索框内输入 系统 3.按下回车&#xff0c;进入系统界面 4.点击隐私和安全性 点击BitLocker驱…

多个Echart遍历生成 / 词图云

echart官网 安装 如果版本报错推荐安装以下版本 npm install echarts4.8.0 --savenpm uninstall echarts//这个是卸载命令以下安装成功后是局部引入:多个Echart遍历生成 vue3echart单个页面多个图表循环渲染展示:<template><div class"main"><div …

Element plus 下拉框组件选中一个选项后显示的是 value 而不是 label

最近刚进行 Vue3 Element plus 项目实践&#xff0c;在进行表单二次封装的时候&#xff0c;表单元素 select 下拉框组件选中一个选项后显示的是 value 而不是 label&#xff0c;下面上代码&#xff1a; 原来的写法&#xff1a; <el-selectv-if"v.type select"…

中小学教室多媒体电脑安全登录解决方案

中小学教室多媒体电脑面临学生随意登录的问题&#xff0c;主要涉及到设备使用、网络安全、教学秩序等多个方面。以下是对这一问题的详细分析&#xff1a; 一、设备使用问题 1. 设备损坏风险 学生随意登录可能导致多媒体电脑设备过度使用&#xff0c;增加设备损坏的风险。不当…

Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Gitlab 数据备份全攻略:命令、方法与注意事项

文章目录 1、备份命令2、备份目录名称说明3、手工备份配置文件3.1 备份配置文件3.2 备份ssh文件 4、备份注意事项4.1 停止puma和sicdekiq组件4.2 copy策略需要更多磁盘空间 5、数据备份方法5.1 docker命令备份5.2 kubectl命令备份5.3 参数说明5.4、选择性备份5.5、非tar备份5.6…

设计模式12:状态模式

系列总链接&#xff1a;《大话设计模式》学习记录_net 大话设计-CSDN博客 参考&#xff1a;设计模式之状态模式 (C 实现)_设计模式的状态模式实现-CSDN博客 1.概述 状态模式允许一个对象在其内部状态改变时改变其行为。对象看起来像是改变了其类。使用状态模式可以将状态的相…

如何使用 Wireshark:从入门到进阶的网络分析工具

简述 Wireshark 是全球最受欢迎的网络协议分析工具&#xff0c;它帮助用户捕获和分析网络流量&#xff0c;诊断网络问题&#xff0c;排查安全漏洞&#xff0c;甚至恢复丢失的数据文件。作为一名网络工程师、安全专家、甚至是开发者&#xff0c;Wireshark 都是你必须掌握的工具…

100个问题学langchain入门(2/10)

问题 11 在 LangChain 中&#xff0c;如何将文档转化为向量以存储到 Vectorstore 中&#xff1f;具体使用了哪些技术或工具&#xff1f; 在 LangChain 中&#xff0c;将文档转化为向量以存储到 Vectorstore 中&#xff0c;主要通过以下步骤和技术完成&#xff1a; 转化流程&a…

C#winform引入DLL,DLL嵌入exe

C#winform将DLL嵌入exe 1 项目引入DLL1.1 项目-鼠标右击-点击添加引用&#xff1b;1.2 点击“浏览”&#xff1b;1.3 添加选中DLL1.4 勾选引入的DLL&#xff0c;点击“确定”1.5 添加成功后 2 DLL嵌入exe2.1 打开引入DLL属性窗口2.2 将“复制本地”项设为“false”2.3 双击打开…

828华为云征文 | 华为云Flexus云服务器X实例搭建企业内部VPN私有隧道,以实现安全远程办公

VPN虚拟专用网络适用于企业内部人员流动频繁和远程办公的情况&#xff0c;出差员工或在家办公的员工利用当地ISP就可以和企业的VPN网关建立私有的隧道连接。 通过拨入当地的ISP进入Internet再连接企业的VPN网关&#xff0c;在用户和VPN网关之间建立一个安全的“隧道”&#xff…

wxpyton+wxFormBuilder加法运算示例

wxpythonwxFormBuilder加法运算示例 在wxFormBuilder里设计一个窗体&#xff0c;生成如下代码&#xff1a;calc_From.py 放在lib文件夹下面 import gettext import wx import wx.xrc _ gettext.gettext class MyFrame1(wx.Frame):def __init__(self, parent):wx.Frame.__init…

【AI驱动的数据结构:包装类的艺术与科学】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object&#xff0c;为了…

springBoot Maven 剔除无用的jar引用

目录 Used undeclared dependencies found Unused declared dependencies found 当项目经过一段时间的开发和维护后&#xff0c;经常会遇到项目打包速度变慢的问题。这通常与项目中包含大量的jar依赖有关&#xff0c;这些依赖之间的关系错综复杂。这种情况在项目维护过程中是…

电脑玩《刺客信条》时中,遇到找不到d3dx9_42.dll的问题是什么原因?缺失d3dx9_42.dll应该怎么解决呢?下面一起来看看吧!

电脑玩《刺客信条》时&#xff0c;找不到d3dx9_42.dll的原因及解决办法 对于许多热爱《刺客信条》这款游戏的玩家来说&#xff0c;在游戏中遇到找不到d3dx9_42.dll的问题无疑是非常令人头疼的。这一错误不仅会导致游戏无法启动&#xff0c;还可能引发运行过程中的图形错误、卡…

【CSS in Depth 2 精译_083】13.3:CSS 混合模式的用法及相关注意事项 + 13.4:本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 13.1.1 使用多个颜色节点&#xff08;上&#xff09;13.1.2 颜色插值方法&#xff08;中&#xff09;13.1.3 径向渐变…

环境变量的知识

目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下&#xff0c;也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…

Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon

文章目录 Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon什么是 Swap&#xff1f;主要命令介绍1. mkswap2. mkfs.swap3. swapon 创建和管理 Swap 的步骤1. 创建 Swap 分区2. 初始化 Swap3. 激活 Swap4. 持久化配置5. 查看 Swap 状态 删除 Swap 分区或文件1. 停用 Swap2. 删…