python学习:pyqt5

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

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

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃橘子的橘猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值