在用PyQt5制作界面时,如何创建一个创建一个进程实时监控USB盘的插入情况,并把盘符返回给界面

要使用 PyQt5 创建一个界面,实时监控 USB 盘的插入情况,并将盘符返回给界面,可以使用以下步骤:

  1. 多线程/多进程处理:由于设备检测是一个长期运行的任务,你需要将它放入一个独立的线程或进程中,以免阻塞 PyQt5 的主线程。使用 Python 的 QThread 类或者 multiprocessing 模块可以实现这一点。

  2. 监控 USB 插入:可以通过 psutil 库或 os 库来检测系统中的 USB 设备插入情况,psutil 提供了对磁盘信息的获取,可以用来监控 USB 盘的插拔。

  3. 将结果返回到界面:可以通过 PyQt 的信号槽机制,将盘符插入信息传递回主界面,动态更新。

    import sys
    import psutil
    import time
    from PyQt5.QtCore import QThread, pyqtSignal
    from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel
    
    class UsbMonitorThread(QThread):
        # 定义一个信号,用来发送检测到的盘符
        new_usb_detected = pyqtSignal(str)
    
        def __init__(self):
            super().__init__()
            self.existing_drives = self.get_usb_drives()
    
        def get_usb_drives(self):
            """ 获取当前插入的 USB 驱动器 """
            drives = []
            partitions = psutil.disk_partitions()
            for partition in partitions:
                if 'removable' in partition.opts:
                    drives.append(partition.device)
            return drives
    
        def run(self):
            """ 线程运行,实时监控 USB 插入 """
            while True:
                current_drives = self.get_usb_drives()
                # 检查是否有新插入的 USB 设备
                new_drives = [drive for drive in current_drives if drive not in self.existing_drives]
                if new_drives:
                    for drive in new_drives:
                        # 发送新检测到的盘符信号
                        self.new_usb_detected.emit(drive)
                    self.existing_drives = current_drives
                time.sleep(1)  # 每秒检测一次
    
    class UsbMonitorApp(QWidget):
        def __init__(self):
            super().__init__()
    
            self.init_ui()
    
            # 启动 USB 监控线程
            self.usb_monitor_thread = UsbMonitorThread()
            self.usb_monitor_thread.new_usb_detected.connect(self.update_usb_label)
            self.usb_monitor_thread.start()
    
        def init_ui(self):
            """ 初始化界面 """
            self.layout = QVBoxLayout()
            
            self.label = QLabel("等待USB设备插入...")
            self.layout.addWidget(self.label)
    
            self.setLayout(self.layout)
            self.setWindowTitle('USB监控器')
    
        def update_usb_label(self, drive):
            """ 更新界面显示的 USB 插入信息 """
            self.label.setText(f"检测到USB盘符: {drive}")
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = UsbMonitorApp()
        window.show()
        sys.exit(app.exec_())
    

  4. UsbMonitorThread

    • 这是一个独立的线程类,继承自 QThread,用于在后台监控 USB 盘插入情况。
    • new_usb_detected 信号用于将新检测到的 USB 盘符发送给主界面。
    • get_usb_drives 函数会遍历当前系统中所有的分区,并检查是否是可移动设备(removable),如果是则返回设备盘符。
    • run 函数是线程的核心部分,它会在一个无限循环中每秒检查一次 USB 设备的插入情况。
  5. UsbMonitorApp

    • 这是 PyQt5 的主界面类,它在启动时会创建并启动 USB 监控线程。
    • 当检测到新的 USB 盘符时,界面会通过 update_usb_label 函数动态更新界面上的标签内容,显示新插入的盘符。
  6. 信号和槽机制

    • new_usb_detected 是自定义的信号,用于在线程检测到新的 USB 设备时将消息发送到主线程,从而更新界面。
  7. 实时监控

    • 通过每秒调用 psutil.disk_partitions() 函数检测是否有新的可移动设备插入。如果检测到新的盘符,发出信号更新界面。
  • 监控频率time.sleep(1) 设置为每秒检查一次设备,你可以根据实际需求调整检测频率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值