赞
踩
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/137994653https://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 | 最大化编辑器(隐藏其他窗口) |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。