python学习:pyqt5

news2024/11/16 1:57:26

1、安装所需库

pip install pyqt5
pip install pyqt5 -tools

2、导入所需库

# 导入所需库
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget
from PyQt5.QtCore import QThread, pyqtSignal

3、多线程举例

# 定义一个继承自QThread的Worker类,用于在后台执行计数任务
class Worker(QThread):
    # 定义一个信号,用于将计数值发送到主线程
    update_label = pyqtSignal(str)

    def run(self):
        # 在run方法中执行计数任务
        for i in range(10):
            # 发射信号,将计数值发送到主线程
            self.update_label.emit(f"计数: {i}")
            # 暂停1秒
            self.sleep(1)

4、定义一个继承自QMainWindow的主窗口类

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

5、初始化UI

self.initUI()

6、基本窗口模块

    def initUI(self):
        # 设置窗口标题
        self.setWindowTitle('PyQt5示例')

        # 创建一个垂直布局
        layout = QVBoxLayout()

        # 创建一个标签,显示欢迎信息
        self.label = QLabel('不吃橘子的橘猫')
        layout.addWidget(self.label)  # 确保将标签添加到布局中

        # 创建一个容器,将布局添加到容器中
        container = QWidget()
        container.setLayout(layout)

        # 将容器设置为窗口的中心部件
        self.setCentralWidget(container)

        # 创建一个Worker实例
        self.worker = Worker()
        # 将Worker的信号连接到主线程的槽函数
        self.worker.update_label.connect(self.update_label_text)
        # 启动Worker线程
        self.worker.start()

     # 定义一个槽函数,用于更新标签的文本
    def update_label_text(self, text):
        if self.first_update:  # 如果是第一次更新,则显示欢迎消息
            self.first_update = False
            return
        self.label.setText(text)

7、程序入口

if __name__ == '__main__':
    # 创建应用程序实例
    app = QApplication(sys.argv)
    # 创建主窗口实例
    mainWin = MainWindow()
    # 显示主窗口
    mainWin.show()
    # 运行应用程序
    sys.exit(app.exec_())

8、多线程完整示例1

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget
from PyQt5.QtCore import QThread, pyqtSignal

class Worker(QThread):
    update_label = pyqtSignal(str)

    def run(self):
        for i in range(10):
            self.update_label.emit(f"计数: {i}")
            self.sleep(1)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()
        self.first_update = True  # 添加一个变量来检查是否是第一次更新

    def initUI(self):
        # 设置窗口标题
        self.setWindowTitle('PyQt5示例')

        # 创建一个垂直布局
        layout = QVBoxLayout()

        # 创建一个标签,显示欢迎信息
        self.label = QLabel('不吃橘子的橘猫')
        layout.addWidget(self.label)  # 确保将标签添加到布局中

        # 创建一个容器,将布局添加到容器中
        container = QWidget()
        container.setLayout(layout)

        # 将容器设置为窗口的中心部件
        self.setCentralWidget(container)

        # 创建一个Worker实例
        self.worker = Worker()
        # 将Worker的信号连接到主线程的槽函数
        self.worker.update_label.connect(self.update_label_text)
        # 启动Worker线程
        self.worker.start()

        # 定义一个槽函数,用于更新标签的文本

    def update_label_text(self, text):
        if self.first_update:  # 如果是第一次更新,则显示欢迎消息
            self.first_update = False
            return
        self.label.setText(text)

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

9、画一个搜索框

import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QLineEdit, QVBoxLayout, QWidget, QMainWindow
from PyQt5.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 设置窗口属性
        self.setWindowTitle("搜索框")
        self.setGeometry(100, 100, 401, 301)

        # 创建按钮和搜索框
        self.search_button = QPushButton("搜索", self)
        self.search_button.clicked.connect(self.showSearchDialog)
        self.search_box = QLineEdit(self)
        self.search_box.hide()

        # 布局管理器
        layout = QVBoxLayout()
        layout.addWidget(self.search_button)
        layout.addWidget(self.search_box)

        # 创建主窗口的中央部件
        self.central_widget = QWidget(self)
        self.central_widget.setLayout(layout)
        self.setCentralWidget(self.central_widget)

    def showSearchDialog(self):
        self.search_box.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

10、页面例子

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit, QVBoxLayout, QWidget

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 设置窗口标题
        self.setWindowTitle("页面例子")

        # 创建四个按钮
        self.start_button = QPushButton("开始", self)
        self.search_button = QPushButton("搜索", self)
        self.settings_button = QPushButton("设置", self)
        self.author_button = QPushButton("作者", self)

        # 创建搜索框
        self.search_box = QLineEdit(self)
        self.search_box.hide()

        # 设置布局
        layout = QVBoxLayout()
        layout.addWidget(self.start_button)
        layout.addWidget(self.search_button)
        layout.addWidget(self.settings_button)
        layout.addWidget(self.author_button)
        layout.addWidget(self.search_box)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

        # 连接信号和槽
        self.search_button.clicked.connect(self.show_search_box)

    def show_search_box(self):
        if self.search_box.isVisible():
            self.search_box.hide()
        else:
            self.search_box.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

11、与pyvisa联动:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtCore import QThread, pyqtSignal
import pyvisa
import time

class ControlVoltageThread(QThread):
    finished = pyqtSignal()

    def __init__(self, function):
        super().__init__()
        self.function = function

    def run(self):
        self.function()
        self.finished.emit()

def control_voltage_sequence1():
    rm = pyvisa.ResourceManager()
    instrument = rm.open_resource('USB0::0x2EC7::0x6700::802260084767510008::INSTR')

    # 逐渐增加电压值至10V
    for voltage in range(0, 11):
        instrument.write("VOLT {}".format(voltage))
        time.sleep(0.5)  # 每0.5秒增加一个单位的电压

    # 维持电压值为10V两秒
    time.sleep(2)

    # 逐渐减少电压值至0V
    for voltage in range(10, -1, -1):
        instrument.write("VOLT {}".format(voltage))
        time.sleep(0.5)  # 每0.5秒减少一个单位的电压

    # 维持电压值为0V五秒
    time.sleep(5)

    # 获取电压读数
    print(instrument.query("MEAS:VOLT?"))

def control_voltage_sequence2():
    rm = pyvisa.ResourceManager()
    instrument = rm.open_resource('USB0::0x2EC7::0x6700::802260084767510008::INSTR')

    # 设置电压为5V,持续两秒
    instrument.write("VOLT 5")
    time.sleep(2)

    # 设置电压为10V,持续两秒
    instrument.write("VOLT 10")
    time.sleep(2)

    # 设置电压为15V,持续两秒
    instrument.write("VOLT 15")
    time.sleep(2)

    # 设置电压为10V,持续两秒
    instrument.write("VOLT 10")
    time.sleep(2)

    # 设置电压为5V,持续两秒
    instrument.write("VOLT 5")
    time.sleep(2)

    # 获取电压读数
    print(instrument.query("MEAS:VOLT?"))

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle('电压控制')

        self.start_button = QPushButton('启动', self)
        self.start_button.clicked.connect(self.on_start_button_clicked)
        self.start_button.resize(self.start_button.sizeHint())
        self.start_button.move(50, 50)

        self.setGeometry(300, 300, 200, 150)

    def on_start_button_clicked(self):
        self.thread1 = ControlVoltageThread(control_voltage_sequence1)
        self.thread1.finished.connect(self.on_thread1_finished)
        self.thread1.start()

        self.thread2 = ControlVoltageThread(control_voltage_sequence2)
        self.thread2.finished.connect(self.on_thread2_finished)
        self.thread2.start()

    def on_thread1_finished(self):
        print("线程1完成")

    def on_thread2_finished(self):
        print("线程2完成")

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

上接(NIMAX及pyvisa):https://blog.csdn.net/weixin_73011353/article/details/137994653icon-default.png?t=N7T8https://blog.csdn.net/weixin_73011353/article/details/137994653

12、快捷键:

Ctrl + Space

代码自动补全

Ctrl + /

注释/取消注释

Ctrl + D

复制当前行或所选内容

Ctrl + Y

删除当前行

Ctrl + Z

撤销

Ctrl + Shift + Z

反撤销

Ctrl + N

快速打开类

Ctrl + Shift + N

快速打开文件

Ctrl + Alt + Left/Right

后退/前进

Ctrl + E

最近打开的文件列表

Shift + F6

重命名

Ctrl + Alt + M

提取方法

Ctrl + Alt + V

提取变量

Shift + F10

运行

Shift + F9

调试

Ctrl + Shift + F10

运行上次运行的配置

Ctrl + Shift + F

在路径中查找

Ctrl + Shift + R

在路径中替换

Ctrl + F

在当前文件中查找

Ctrl + R

在当前文件中替换

Alt + 9

打开版本控制工具窗口

Ctrl + K

提交代码

Ctrl + T

更新项目

Alt + Enter

显示上下文操作和快速修复

Ctrl + Shift + A

查找操作

Ctrl + Shift + F12

最大化编辑器(隐藏其他窗口)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

coreldraw2024精简版绿色版安装包免费下载

CorelDRAW 2024是一款矢量图形设计软件,于2024年3月5日正式在全球范围内发布。这款软件在多个方面进行了更新和改进,为用户提供了更多高效、灵活和便捷的设计工具。 首先,CorelDRAW 2024新增了绘画笔刷功能,这些笔刷不仅模拟了传…

Python爬虫入门指南--爬虫技术的由来、发展与未来--实战课程大赠送

爬虫,也称为网络爬虫或网络蜘蛛,是一种自动化程序,专门用于遍历互联网并收集数据。这种技术的起源、发展和未来都与互联网紧密相连,并在信息检索、数据挖掘等多个领域发挥着不可或缺的作用。 "免费IP池大放送!助…

dial tcp 192.168.0.190:443: connect: connection refused

1、场景 用nerdctl登录镜像仓库192.168.0.190(Harbor),报错 ERRO[0006] failed to call tryLoginWithRegHost error"failed to call rh.Client.Do: Get \"https://192.168.0.190/v2/\": dial tcp 192.168.0.190:…

JavaScript系列------2

1. JS 数据类型: 基本数据类型:number数字型,string字符串型,boolean布尔型,undefined未定义型,null空类型 引用数据类型:object对象 js 是弱数据类型的语言,只有当我们赋值了才知道是什么数据类型。 声明一个变量未赋值就是 un…

【FFmpeg】音视频录制 ② ( 使用 Screen Capturer Recorder 软件生成 ffmpeg 可录制的音视频设备 )

文章目录 一、使用 Screen Capturer Recorder 软件生成音视频设备1、设备查找问题 - 引入 Screen Capturer Recorder 软件2、下载安装 Screen Capturer Recorder 软件3、验证 Screen Capturer Recorder 生成的设备 一、使用 Screen Capturer Recorder 软件生成音视频设备 1、设…

对浅拷贝的理解

问题背景 我之前一直以为浅拷贝出来的新对象和旧对象的引用地址是相同的,但是通过Object和发现浅拷贝的新对象和旧对象的引用地址不同!! const obj1 { name: "Alice", test: { age: 12 } };const obj4 Object.assign({}, obj1);…

Kafka源码分析(四) - Server端-请求处理框架

系列文章目录 Kafka源码分析-目录 一. 总体结构 先给一张概览图: 服务端请求处理过程涉及到两个模块:kafka.network和kafka.server。 1.1 kafka.network 该包是kafka底层模块,提供了服务端NIO通信能力基础。 有4个核心类:…

spring的bean创建流程源码解析

文章目录 IOC 和 DIBeanFactoryApplicationContext实现的接口1、BeanFactory接口2、MessageSource 国际化接口3、ResourcePatternResolver,资源解析接口4、EnvironmentCapable接口,用于获取环境变量,配置信息5、ApplicationEventPublisher 事…

GAN详解,公式推导解读,详细到每一步的理论推导

在看这一篇文章之前,希望熟悉掌握熵的知识,可看我写的跟熵相关的一篇博客https://blog.csdn.net/m0_59156726/article/details/138128622 1. GAN 原始论文:https://arxiv.org/pdf/1406.2661.pdf 放一张GAN的结构,如下&#xff1…

索引超详细解析

目录 索引概述 无索引时: 索引: 索引结构 介绍: 二叉树: B-Tree(多路平衡查找树): 经典BTree MySQL中B树 Hash索引 hash索引的特点: 存储引擎支持: 为什么InnoDB存储选择使用BTree…

升级 jQuery:努力打造健康的 Web 生态

jQuery 对 Web 的影响始终是显而易见的。当 jQuery 在 2006 年首次推出时,几乎立即成为 Web 开发人员的基本工具。它简化了 JavaScript 编程,使操作 HTML 文档、处理事件、执行动画等变得更加容易。从那时起,它在 Web 标准和浏览器功能的演变…

深度学习基础:循环神经网络中的Dropout

深度学习基础:循环神经网络中的Dropout 在深度学习中,过拟合是一个常见的问题,特别是在循环神经网络(RNN)等复杂模型中。为了应对过拟合问题,研究者们提出了许多方法,其中一种被广泛应用的方法…

CSS渐变色理论与分类、文字渐变色方案、炸裂渐变色方案以及主流专业渐变色工具网站推荐

渐变色彩可以增加视觉层次感和动态效果,使网页界面更加生动有趣,吸引用户注意力。另外,相较于静态背景图片,CSS渐变无需额外的HTTP请求,减轻服务器负载,加快页面加载速度;同时CSS渐变能够根据容…

应用软件运维服务方案(word原件)

信息化项目运维服务方案(投标,实施运维,交付) 1.项目整体介绍 2.服务简述 3.资源提供 软件全过程性,标准型,规范性文档(全套资料包)获取:本文末个人名片直接获取&…

WPS二次开发系列:WPS SDK打开在线文档

作者持续关注WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 需求场景 效果展示 3、实现步骤 3.1 步骤一、申…

spring boot3单模块项目工程搭建-下(个人开发模板)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 常用依赖介绍以及整合 web组件 测试组件 样板代码生成 数据库连接器 常用工具包 面向切面编…

《QT实用小工具·三十九》仿 Windows10 画图3D 的颜色选择器, 但更加强大

1、概述 源码放在文章末尾 该项目实现了仿 Windows10 画图3D 的颜色选择器,功能更加丰富更加强大。 项目部分代码如下所示: import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import QtGraphicalEffects 1.15Item {id…

【踩坑】libtorch load 报错 No such file or directory

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,请不吝给个[点赞、收藏、关注]哦~ 目录 报错背景 报错原因 解决方法 方法一:把你的编译配置转为release版本 方法二:安装debug版本的libtorch 报错背景…

算法学习001-圆桌问题 中小学算法思维学习 信奥算法解析 c++实现

目录 算法学习001-圆桌问题 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 算法学习001-圆桌问题 一、题目要求 1、编程实现 圆桌边围坐着2n个人,其中n个人是好人&#xff0c…

Redis 安装及配置教程(Windows)【安装】

文章目录 一、简介一、 下载1. GitHub 下载2. 其它渠道 二、 安装1. ZIP2. MSI 软件 / 环境安装及配置目录 一、简介 Redis 官网地址:https://redis.io/   Redis 源码地址:https://github.com/redis/redis   Redis 官网安装地址(无Windo…