• python学习:pyqt5


    1、安装所需库

    1. pip install pyqt5
    2. pip install pyqt5 -tools

    2、导入所需库

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

    3、多线程举例

    1. # 定义一个继承自QThread的Worker类,用于在后台执行计数任务
    2. class Worker(QThread):
    3. # 定义一个信号,用于将计数值发送到主线程
    4. update_label = pyqtSignal(str)
    5. def run(self):
    6. # 在run方法中执行计数任务
    7. for i in range(10):
    8. # 发射信号,将计数值发送到主线程
    9. self.update_label.emit(f"计数: {i}")
    10. # 暂停1秒
    11. self.sleep(1)

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

    1. class MainWindow(QMainWindow):
    2. def __init__(self):
    3. super().__init__()

    5、初始化UI

    self.initUI()

    6、基本窗口模块

    1. def initUI(self):
    2. # 设置窗口标题
    3. self.setWindowTitle('PyQt5示例')
    4. # 创建一个垂直布局
    5. layout = QVBoxLayout()
    6. # 创建一个标签,显示欢迎信息
    7. self.label = QLabel('不吃橘子的橘猫')
    8. layout.addWidget(self.label) # 确保将标签添加到布局中
    9. # 创建一个容器,将布局添加到容器中
    10. container = QWidget()
    11. container.setLayout(layout)
    12. # 将容器设置为窗口的中心部件
    13. self.setCentralWidget(container)
    14. # 创建一个Worker实例
    15. self.worker = Worker()
    16. # 将Worker的信号连接到主线程的槽函数
    17. self.worker.update_label.connect(self.update_label_text)
    18. # 启动Worker线程
    19. self.worker.start()
    20. # 定义一个槽函数,用于更新标签的文本
    21. def update_label_text(self, text):
    22. if self.first_update: # 如果是第一次更新,则显示欢迎消息
    23. self.first_update = False
    24. return
    25. self.label.setText(text)

    7、程序入口

    1. if __name__ == '__main__':
    2. # 创建应用程序实例
    3. app = QApplication(sys.argv)
    4. # 创建主窗口实例
    5. mainWin = MainWindow()
    6. # 显示主窗口
    7. mainWin.show()
    8. # 运行应用程序
    9. sys.exit(app.exec_())

    8、多线程完整示例1

    1. import sys
    2. from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget
    3. from PyQt5.QtCore import QThread, pyqtSignal
    4. class Worker(QThread):
    5. update_label = pyqtSignal(str)
    6. def run(self):
    7. for i in range(10):
    8. self.update_label.emit(f"计数: {i}")
    9. self.sleep(1)
    10. class MainWindow(QMainWindow):
    11. def __init__(self):
    12. super().__init__()
    13. self.initUI()
    14. self.first_update = True # 添加一个变量来检查是否是第一次更新
    15. def initUI(self):
    16. # 设置窗口标题
    17. self.setWindowTitle('PyQt5示例')
    18. # 创建一个垂直布局
    19. layout = QVBoxLayout()
    20. # 创建一个标签,显示欢迎信息
    21. self.label = QLabel('不吃橘子的橘猫')
    22. layout.addWidget(self.label) # 确保将标签添加到布局中
    23. # 创建一个容器,将布局添加到容器中
    24. container = QWidget()
    25. container.setLayout(layout)
    26. # 将容器设置为窗口的中心部件
    27. self.setCentralWidget(container)
    28. # 创建一个Worker实例
    29. self.worker = Worker()
    30. # 将Worker的信号连接到主线程的槽函数
    31. self.worker.update_label.connect(self.update_label_text)
    32. # 启动Worker线程
    33. self.worker.start()
    34. # 定义一个槽函数,用于更新标签的文本
    35. def update_label_text(self, text):
    36. if self.first_update: # 如果是第一次更新,则显示欢迎消息
    37. self.first_update = False
    38. return
    39. self.label.setText(text)
    40. if __name__ == '__main__':
    41. app = QApplication(sys.argv)
    42. mainWin = MainWindow()
    43. mainWin.show()
    44. sys.exit(app.exec_())

    9、画一个搜索框

    1. import sys
    2. from PyQt5.QtWidgets import QApplication, QPushButton, QLineEdit, QVBoxLayout, QWidget, QMainWindow
    3. from PyQt5.QtCore import Qt
    4. class MainWindow(QMainWindow):
    5. def __init__(self):
    6. super().__init__()
    7. self.initUI()
    8. def initUI(self):
    9. # 设置窗口属性
    10. self.setWindowTitle("搜索框")
    11. self.setGeometry(100, 100, 401, 301)
    12. # 创建按钮和搜索框
    13. self.search_button = QPushButton("搜索", self)
    14. self.search_button.clicked.connect(self.showSearchDialog)
    15. self.search_box = QLineEdit(self)
    16. self.search_box.hide()
    17. # 布局管理器
    18. layout = QVBoxLayout()
    19. layout.addWidget(self.search_button)
    20. layout.addWidget(self.search_box)
    21. # 创建主窗口的中央部件
    22. self.central_widget = QWidget(self)
    23. self.central_widget.setLayout(layout)
    24. self.setCentralWidget(self.central_widget)
    25. def showSearchDialog(self):
    26. self.search_box.show()
    27. if __name__ == "__main__":
    28. app = QApplication(sys.argv)
    29. window = MainWindow()
    30. window.show()
    31. sys.exit(app.exec_())

    10、页面例子

    1. import sys
    2. from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit, QVBoxLayout, QWidget
    3. class MainWindow(QMainWindow):
    4. def __init__(self):
    5. super().__init__()
    6. # 设置窗口标题
    7. self.setWindowTitle("页面例子")
    8. # 创建四个按钮
    9. self.start_button = QPushButton("开始", self)
    10. self.search_button = QPushButton("搜索", self)
    11. self.settings_button = QPushButton("设置", self)
    12. self.author_button = QPushButton("作者", self)
    13. # 创建搜索框
    14. self.search_box = QLineEdit(self)
    15. self.search_box.hide()
    16. # 设置布局
    17. layout = QVBoxLayout()
    18. layout.addWidget(self.start_button)
    19. layout.addWidget(self.search_button)
    20. layout.addWidget(self.settings_button)
    21. layout.addWidget(self.author_button)
    22. layout.addWidget(self.search_box)
    23. container = QWidget()
    24. container.setLayout(layout)
    25. self.setCentralWidget(container)
    26. # 连接信号和槽
    27. self.search_button.clicked.connect(self.show_search_box)
    28. def show_search_box(self):
    29. if self.search_box.isVisible():
    30. self.search_box.hide()
    31. else:
    32. self.search_box.show()
    33. if __name__ == "__main__":
    34. app = QApplication(sys.argv)
    35. window = MainWindow()
    36. window.show()
    37. sys.exit(app.exec_())

    11、与pyvisa联动:

    1. import sys
    2. from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
    3. from PyQt5.QtCore import QThread, pyqtSignal
    4. import pyvisa
    5. import time
    6. class ControlVoltageThread(QThread):
    7. finished = pyqtSignal()
    8. def __init__(self, function):
    9. super().__init__()
    10. self.function = function
    11. def run(self):
    12. self.function()
    13. self.finished.emit()
    14. def control_voltage_sequence1():
    15. rm = pyvisa.ResourceManager()
    16. instrument = rm.open_resource('USB0::0x2EC7::0x6700::802260084767510008::INSTR')
    17. # 逐渐增加电压值至10V
    18. for voltage in range(0, 11):
    19. instrument.write("VOLT {}".format(voltage))
    20. time.sleep(0.5) # 每0.5秒增加一个单位的电压
    21. # 维持电压值为10V两秒
    22. time.sleep(2)
    23. # 逐渐减少电压值至0V
    24. for voltage in range(10, -1, -1):
    25. instrument.write("VOLT {}".format(voltage))
    26. time.sleep(0.5) # 每0.5秒减少一个单位的电压
    27. # 维持电压值为0V五秒
    28. time.sleep(5)
    29. # 获取电压读数
    30. print(instrument.query("MEAS:VOLT?"))
    31. def control_voltage_sequence2():
    32. rm = pyvisa.ResourceManager()
    33. instrument = rm.open_resource('USB0::0x2EC7::0x6700::802260084767510008::INSTR')
    34. # 设置电压为5V,持续两秒
    35. instrument.write("VOLT 5")
    36. time.sleep(2)
    37. # 设置电压为10V,持续两秒
    38. instrument.write("VOLT 10")
    39. time.sleep(2)
    40. # 设置电压为15V,持续两秒
    41. instrument.write("VOLT 15")
    42. time.sleep(2)
    43. # 设置电压为10V,持续两秒
    44. instrument.write("VOLT 10")
    45. time.sleep(2)
    46. # 设置电压为5V,持续两秒
    47. instrument.write("VOLT 5")
    48. time.sleep(2)
    49. # 获取电压读数
    50. print(instrument.query("MEAS:VOLT?"))
    51. class MainWindow(QWidget):
    52. def __init__(self):
    53. super().__init__()
    54. self.initUI()
    55. def initUI(self):
    56. self.setWindowTitle('电压控制')
    57. self.start_button = QPushButton('启动', self)
    58. self.start_button.clicked.connect(self.on_start_button_clicked)
    59. self.start_button.resize(self.start_button.sizeHint())
    60. self.start_button.move(50, 50)
    61. self.setGeometry(300, 300, 200, 150)
    62. def on_start_button_clicked(self):
    63. self.thread1 = ControlVoltageThread(control_voltage_sequence1)
    64. self.thread1.finished.connect(self.on_thread1_finished)
    65. self.thread1.start()
    66. self.thread2 = ControlVoltageThread(control_voltage_sequence2)
    67. self.thread2.finished.connect(self.on_thread2_finished)
    68. self.thread2.start()
    69. def on_thread1_finished(self):
    70. print("线程1完成")
    71. def on_thread2_finished(self):
    72. print("线程2完成")
    73. if __name__ == '__main__':
    74. app = QApplication(sys.argv)
    75. mainWin = MainWindow()
    76. mainWin.show()
    77. 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

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

  • 相关阅读:
    SpringBoot SpringBoot 运维实用篇 4 日志 4.4 文件记录日志
    SORT追踪
    C指针
    YOLO V5源码详解
    Lit(五):事件
    汇编语言实验8:BIOS/DOS功能调用与宏指令程序设计
    qt 调用qt_material库后自定义进度条样式
    JVM之Class文件分析详解
    JavaScript中的一等公民: 函数(Function)
    MyBatis关系映射
  • 原文地址:https://blog.csdn.net/weixin_73011353/article/details/138051734