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实例并启动应用程序。
-
创建
版权声明:本文标题:PyQt5创建一个combox用于选择插入的优盘,怎么在线程中实时更新combox显示插入了哪些U盘_pyqt 动态combox 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1773968571a3567797.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论