pyqt 万能简易模板(四)

2023-11-15

本文将介绍一些pyqt5基本使用技巧,不借助Qtdesigner,而是全部用代码编写,将实现页面布局、窗口自适应、字体自适应等功能。一般的简易工程均可使用,简单高效。对于pyqt5的一些基本技巧,本文内容基本够用,可以快速实现自己想要的界面。 

Demo

import sys
import time
import cv2
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QTextEdit, QPushButton, QFileDialog
from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout, QGridLayout
from PyQt5.QtGui import QTextOption, QImage, QPixmap

class QtDemo(QWidget):
    def __init__(self):
        super(QtDemo, self).__init__()
        
        self.desktop = QApplication.desktop()
 
        #获取显示器分辨率大小
        self.screenRect = self.desktop.screenGeometry()
        self.height = self.screenRect.height()
        self.width = self.screenRect.width()
        #获取不同分辨率下需要缩放的比例,2560为参考尺寸
        self.scale_ratio = self.width / 2560
       
        # self.resize(900, 400)
        #根据显示器分辨率自动设置窗口大小
        self.setGeometry(50, 50, 50 + int(900 * self.scale_ratio), 50 + int(400 * self.scale_ratio))
        #设置窗口名称与标题
        self.setWindowTitle("QtDemo")
       
        self.label1 = QLabel(self)
        self.label1.setText('标题一')
        self.label1.setWordWrap(True)
        self.label1.setStyleSheet("QLabel{qproperty-alignment: AlignCenter;font-size:30px;font-weight:bold;font-family:宋体;}")
        self.label2 = QLabel(self)
        self.label2.setText('标题2')
        self.label2.setWordWrap(True)
        self.label2.setStyleSheet("QLabel{qproperty-alignment: AlignCenter;font-size:30px;font-weight:bold;font-family:宋体;}")
        self.label3 = QLabel(self)
        self.label3.setText('标题3')
        self.label3.setWordWrap(True)
        self.label3.setStyleSheet("QLabel{qproperty-alignment: AlignCenter;font-size:30px;font-weight:bold;font-family:宋体;}")
        
        self.label11 = QLabel(self)
        self.label11.setText("Label11")
        self.label11.resize(320, 320)
        #设置label样式
        self.label11.setStyleSheet("QLabel{background:#FFFFFF;}"
                                 "QLabel{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:15px;font-weight:bold;font-family:宋体;}")
        self.label12 = QLabel(self)
        self.label12.setText("Label12")
        self.label12.resize(320, 320)
        self.label12.setStyleSheet("QLabel{background:#FFFFFF;}"
                                 "QLabel{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:15px;font-weight:bold;font-family:宋体;}")
        
        self.text1 = QTextEdit(self)
        self.text1.setWordWrapMode(QTextOption.NoWrap)
        self.text1.setText("Text1")
        self.text1.setFixedSize(200, 320)
        self.text1.setStyleSheet("QTextEdit{background:#FFFFFF;}"
                                 "QTextEdit{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:15px;font-weight:bold;font-family:宋体;}")

        self.btn1 = QPushButton(self)
        self.btn1.setText("按钮一")
        self.btn1.clicked.connect(self.fun1)
        self.btn1.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")
        self.btn2 = QPushButton(self)
        self.btn2.setText("按钮二")
        self.btn2.clicked.connect(self.fun2)
        self.btn2.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")
        self.btn3 = QPushButton(self)
        self.btn3.setText("按钮三")
        self.btn3.clicked.connect(self.fun3)
        self.btn3.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")
        self.btn4 = QPushButton(self)
        self.btn4.setText("按钮四")
        self.btn4.clicked.connect(self.fun4)
        self.btn4.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")  
        self.btn5 = QPushButton(self)
        self.btn5.setText("按钮五")
        self.btn5.clicked.connect(self.fun5)
        self.btn5.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")
        
        grid1 = QGridLayout()
        grid1.addWidget(self.label1, 1, 1)
        grid1.addWidget(self.label2, 1, 2)
        grid1.addWidget(self.label3, 1, 3)
        grid1.addWidget(self.label11, 2, 1)
        grid1.addWidget(self.label12, 2, 2)
        grid1.addWidget(self.text1, 2, 3)
        
        grid2 = QGridLayout()
        grid2.addWidget(self.btn1, 1, 1)
        grid2.addWidget(self.btn2, 1, 2)
        
        grid3 = QGridLayout()
        grid3.addWidget(self.btn3, 1, 1)
        grid3.addWidget(self.btn4, 1, 2)
        grid3.addWidget(self.btn5, 1, 3)

        hbox = QHBoxLayout()
        hbox.addStretch(2)
        hbox.addLayout(grid2)
        hbox.addStretch(2)
        hbox.addLayout(grid3)
        hbox.addStretch(3)
        
        vbox = QVBoxLayout()
        vbox.addLayout(grid1)
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        vbox.addStretch(1)
        
        self.setLayout(vbox)    
        
    def closeEvent(self, event):
        import os
        os._exit(1)
        
    def resizeEvent(self, event):
        #900为窗口初始尺寸
        font_size = event.size().width() * 30 // int(900 * self.scale_ratio)
        config = "QLabel{font-size:"+str(font_size)+"px;font-weight:bold;font-family:宋体;}"
        self.label1.setStyleSheet(config)
        self.label2.setStyleSheet(config)
        self.label3.setStyleSheet(config)
        
        w  = event.size().width()  * 320 // 900
        h = event.size().height() * 320 // 400
        self.label11.resize(w, h)
        self.label12.resize(w, h)
        self.text1.setFixedSize(w*200//320, h)
        
        btn_font_size = event.size().width() * 25 // int(900 * self.scale_ratio)
        config = "QPushButton{font-size:"+str(btn_font_size)+"px;font-weight:bold;font-family:宋体;}"
        self.btn1.setStyleSheet(config)
        self.btn2.setStyleSheet(config)
        self.btn3.setStyleSheet(config)
        self.btn4.setStyleSheet(config)
        self.btn5.setStyleSheet(config)
        
    def fun1(self):
        image_path, imgType = QFileDialog.getOpenFileName(self, "打开图片", "", "*.jpg;;*.png")
        img = cv2.imread(image_path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        # frame = QImage(image_path)
        frame = QImage(img, img.shape[1], img.shape[0], img.shape[1] * 3, QImage.Format_RGB888)
        picture = QPixmap.fromImage(frame).scaled(self.label11.width(), self.label12.height())
        self.label11.setPixmap(picture)
        
    def fun2(self):
        self.btn2.setEnabled(False)
        self.btn2.setText('处理中')
        self.label12.setText("Fun2运行中,请稍后...")
        self.label12.setStyleSheet("color:#FF0000;font-size:25px;}")
        QApplication.processEvents()
        time.sleep(3)
        self.btn2.setEnabled(True)
        self.btn2.setText('按钮二')
        self.label12.setText("Fun2运行结束")
           
    def fun3(self):
        pass
       
    def fun4(self):
        pass
        
    def fun5(self):
        pass

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QtDemo()
    win.show()
    sys.exit(app.exec_())
    sys.exit(0)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pyqt 万能简易模板(四) 的相关文章

随机推荐

  • Android酷炫实用的开源框架(UI框架)

    Android酷炫实用的开源框架 UI框架 前言 忙碌的工作终于可以停息一段时间了 最近突然有一个想法 就是自己写一个app 所以找了一些合适开源控件 这样更加省时 再此分享给大家 希望能对大家有帮助 此博文介绍的都是UI上面的框架 接下来
  • web初始

    个人学习开始 写的不好 请大佬指教
  • 机器学习实战——Kmeans聚类算法

    机器学习实战 Kmeans聚类算法 1 聚类算法介绍 1 1 K 均值聚类 1 2 聚类效果的评价 2 sklearn中的实现 1 聚类算法介绍 在无监督学习中 训练样本的标记是未知的 目标是通过对无标记训练样本的学习来揭示数据的内在性质及
  • 纷玩岛演唱会下单代码

    继大麦M端之后 再发现一个演唱会平台 纷玩岛 此平台不像大麦 猫眼那么火爆 相对来说比较容易研究 通过抓包软件发现下单很简单 就一个JWT登录后的头部token而已 下载地址 https download csdn net download
  • 结构体对函数指针的高级封装应用

    分层设计考虑 作用 降低对底层应用程序的高耦合度 示例 include mac h typedef struct phy t char channel char snd fail count char name char open flag
  • 软件测试用例覆盖率怎么算,如何计算增量测试覆盖率

    为了保证代码质量 一般会要求提交的源码要有测试用例覆盖 并对测试覆盖率有一定的要求 在实践中不仅会考核存量代码覆盖率 总体覆盖率 还会考核增量代码的覆盖率 或者说增量覆盖率更有实际意义 测试用例要随源码一并提交 实时保证源码的质量 而不是代
  • 进程和线程的区别,以及应用场景

    什么是线程 Linux下线程用进程PCB模拟描述 也叫轻量级进程 线程是进程内部的一个执行流 也就是线程在进程的地址空间内运行 一个进程内的所有线程共享进程资源 线程是CPU调度的基本单位 CPU调度是按照PCB进行调度的 创建 销毁一个线
  • Mule入门——DB、Rest、Soap接口开发

    一 DB查询接口开发 这里我用的mysql数据库 首先我们先查询下我们的数据库这里有很多数据 然后我们用AnypointStudio进行我们的接口开发 首先我们先新建一个Mule工程 File gt New gt Mule project
  • 计算机网络---传输层

    两个端的会话层之间提供建立 维护和取消传输连接的功能 这一层 数据传送的协议单元成为报文 网络层只是根据网络地址将源节点发出的数据包送到目的终点 而传输层负责将数据可靠的传送到相应的端口 传输层负责将上层数据分段提供端到端 可靠不可靠的传输
  • vue3-admin-template页面

    vue3 admin template 本人学习视频网址为 视频地址 源码 github 网页采用技术框架 本管理模板采用vue3开发 使用vue router来作为路由跳转 将登录成功后产生的菜单 token放入到vuex中存储 通过ax
  • 一般Python开发面试中可能会问到的大部分问题

    python语法以及其他基础部分 可变与不可变类型 浅拷贝与深拷贝的实现方式 区别 deepcopy如果你来设计 如何实现 new 与 init 的区别 你知道几种设计模式 编码和解码你了解过么 列表推导list comprehension
  • Linux嵌入式学习——c语言选择结构设计

    Linux嵌入式学习 c语言选择结构设计 一 if语句 1 1if语句的一般格式 1 2if语句常用的3种形式 1 3if语句的嵌套 二 关系运算符和关系表达式 2 1关系运算符及其优先次序 2 2关系表达式 三 逻辑运算符和逻辑表达式 3
  • @ControllerAdvice注解使用及原理探究

    最近在新项目的开发过程中 遇到了个问题 需要将一些异常的业务流程返回给前端 需要提供给前端不同的响应码 前端再在次基础上做提示语言的国际化适配 这些异常流程涉及业务层和控制层的各个地方 如果每个地方都写一些重复代码显得很冗余 然后查询解决方
  • PowerBI入门学习笔记

    下载安装 Win10系统 在微软商店里直接下载PowerBI desktop 打开即可 界面如下 接下来导入后面要用到的数据 我目前用的都是Excel文件 获取数据 选中后选择要导入的若干个工作表 点击 加载数据 就进入到power que
  • vue+element实现双向描点 反向联动

    前端项目里经常会有锚点得操作 以及反向联动的效果 就是一个菜单 点击会定位到一个块上 滚动的当前块的时候 菜单会出现定位的效果 差不多就是这种动起来的效果 由于不太懂之前的逻辑 今天又从重新看了下 上代码 html 滚动的区域
  • 关于Python中pip install 各种包下载不下来的问题解决办法

    你们有可能报安装不成功或者下面这个问题 已经安装了但并非在你的Python安装路径下 C Users xxx gt pip install ddt Requirement already satisfied ddt in e anacond
  • redis 实现乐观锁

    redis是单线程程序但是支持多进程同时访问同一个redis服务 这个时候就需要锁机制来处理一些并发问题 redis提供了watch指令来实现乐观锁 watch和事务配合使用 往往写在multi之前 用来监视一个key 比如watch mo
  • 实战wxPython:047 - Book控件(第一部分)

    在wxPython中 book控件允许用户在各种面板之间切换 最常见的例子是带有选项卡界面的浏览器和系统选项对话框 本文将向您介绍这些控件的创建和基本配置 wxPython目前内置了多个这样的控件 除文章 wxPython 高级控件之选项卡
  • 看完这篇 教你玩转渗透测试靶机Vulnhub——Grotesque:3.0.1

    Vulnhub靶机Grotesque 3 0 1渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 信息收集 漏洞发现 LFI漏洞利用 本地文件包含漏洞 SSH登入 提权 获取FLAG Vulnhub靶机渗
  • pyqt 万能简易模板(四)

    本文将介绍一些pyqt5基本使用技巧 不借助Qtdesigner 而是全部用代码编写 将实现页面布局 窗口自适应 字体自适应等功能 一般的简易工程均可使用 简单高效 对于pyqt5的一些基本技巧 本文内容基本够用 可以快速实现自己想要的界面