admin 管理员组

文章数量: 1184232

在PyQt5中,可以使用 QComboBox 来显示插入的U盘列表,并使用一个后台线程来实时检测系统中U盘的变化情况。我们可以通过 QThread 创建一个线程来监测U盘的插入和拔出,并动态更新 QComboBox 的显示。

下面的示例代码展示如何实现这一功能:

import sys
import time
import psutil  # 用于检测U盘的插入和拔出
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QComboBox
class USBMonitorThread(QThread):
    # 定义一个信号,用于将U盘列表发送到主线程
    update_signal = pyqtSignal(list)
    def run(self):
        previous_devices = set()
        while True:
            # 检测当前连接的U盘设备
            current_devices = {p.device for p in psutil.disk_partitions() if 'removable' in p.opts}
            # 如果检测到变化,发送信号更新UI
            if current_devices != previous_devices:
                self.update_signal.emit(list(current_devices))
                previous_devices = current_devices
            # 每秒检测一次
            time.sleep(1)
class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("USB Monitor Example")
        self.setGeometry(100, 100, 400, 200)
        # 创建一个QComboBox,用于显示U盘列表
        self.combo_box = QComboBox(self)
        # 设置布局
        layout = QVBoxLayout()
        layout.addWidget(self.combo_box)
        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)
        # 创建并启动USB监测线程
        self.thread = USBMonitorThread()
        self.thread.update_signal.connect(self.update_combo_box)
        self.thread.start()
    def update_combo_box(self, devices):
        # 更新QComboBox中的选项
        self.combo_box.clear()
        self.combo_box.addItems(devices)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())
  • USB监测线程类 USBMonitorThread

    • 继承自 QThread ,重写了 run() 方法,用于检测U盘设备的插入和拔出。
    • 使用 psutil.disk_partitions() 来获取当前连接的磁盘分区,并过滤出可移动设备(U盘)。
    • 当检测到设备列表变化时,发送信号 update_signal ,将新的设备列表传递到主线程。
  • 主窗口类 MyWindow

    • 创建 QComboBox 用于显示U盘列表,并设置主窗口的布局。
    • 启动 USBMonitorThread ,并连接线程的 update_signal 信号到 update_combo_box() 方法。
    • update_combo_box() 方法根据接收到的U盘列表更新 QComboBox 中的选项。
  • 使用 psutil 进行设备检测

    • 通过 psutil 库获取系统中可移动设备的信息,以检测U盘的插入和拔出。
  • 运行应用程序

    • 创建 QApplication 实例并启动应用程序。

本文标签: 创建一个 盘列表 更新