首页 > 其他分享 >如何用PyQt5创建多个窗口,同时获取多个U盘内的文件的名称,并分别在对应窗口打印文件名,要利用到QThread

如何用PyQt5创建多个窗口,同时获取多个U盘内的文件的名称,并分别在对应窗口打印文件名,要利用到QThread

时间:2024-10-11 10:19:28浏览次数:11  
标签:__ 窗口 打印文件 多个 self drive names file path

在PyQt5中,你可以使用 QThread 创建多个线程来并行处理每个 U 盘的文件名获取任务。每个线程负责扫描一个 U 盘的文件,同时在主窗口显示结果。以下是一个示例代码,用来创建多个窗口,同时在每个窗口中显示各自的 U 盘文件名:

  1. 每个窗口使用 QWidget
  2. 使用 QThread 创建后台线程获取 U 盘的文件名,避免主线程卡顿。
  3. 每个线程负责一个 U 盘,在线程完成时将结果传递回主线程并更新对应窗口。
    import sys
    import os
    from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QLabel, QPushButton)
    from PyQt5.QtCore import QThread, pyqtSignal
    
    class FileScanThread(QThread):
        # 定义信号,在线程任务完成时发送文件名列表到主线程
        file_names_signal = pyqtSignal(list)
    
        def __init__(self, drive_path):
            super().__init__()
            self.drive_path = drive_path  # U 盘路径
    
        def run(self):
            # 获取 U 盘中的文件名列表
            file_names = []
            try:
                for root, dirs, files in os.walk(self.drive_path):
                    for file in files:
                        file_names.append(file)
            except Exception as e:
                file_names.append(f"Error: {e}")
            
            # 发出信号,传递文件名列表
            self.file_names_signal.emit(file_names)
    
    class FileWindow(QWidget):
        def __init__(self, drive_path):
            super().__init__()
            self.setWindowTitle(f"U盘文件列表 - {drive_path}")
            self.setGeometry(300, 300, 400, 300)
    
            # 布局和控件
            self.layout = QVBoxLayout()
            self.label = QLabel("文件名加载中...")
            self.layout.addWidget(self.label)
            self.setLayout(self.layout)
    
            # 启动文件扫描线程
            self.scan_thread = FileScanThread(drive_path)
            self.scan_thread.file_names_signal.connect(self.update_file_names)
            self.scan_thread.start()
    
        def update_file_names(self, file_names):
            # 更新窗口中的文件名列表
            self.label.setText("\n".join(file_names))
    
    class MainApp(QApplication):
        def __init__(self, usb_drives):
            super().__init__(sys.argv)
            self.usb_drives = usb_drives
            self.windows = []
    
        def create_windows(self):
            # 为每个 U 盘创建一个窗口
            for drive in self.usb_drives:
                window = FileWindow(drive)
                window.show()
                self.windows.append(window)
    
    if __name__ == "__main__":
        # 假设这里有几个 U 盘的挂载路径
        usb_drives = ["/path/to/usb1", "/path/to/usb2"]
    
        app = MainApp(usb_drives)
        app.create_windows()
        sys.exit(app.exec_())
    

  4. FileScanThread:继承自 QThread,负责在后台扫描指定 U 盘路径中的文件名,并通过 file_names_signal 信号将结果传递回主线程。

  5. FileWindow:每个窗口负责显示一个 U 盘的文件名列表。窗口会启动一个后台线程 FileScanThread,线程完成后会调用 update_file_names 函数更新界面上的文件名。

  6. MainApp:负责管理多个窗口的创建。传入多个 U 盘路径后,每个 U 盘路径对应一个 FileWindow

标签:__,窗口,打印文件,多个,self,drive,names,file,path
From: https://blog.csdn.net/kuixiang_yin/article/details/142847163

相关文章

  • 【教程】0x04 绘制记牌器窗口及插件打包 —— 通过MYScrcpy学python系列
    前言MYScrcpyGithub/Gitee从1.6.4版本开始,MYScrcpy为童鞋们提供了一个开放的插件开发环境(Extensions)。童鞋们可以根据需要自行开发插件。本章主要讲解如何通过面向对象的思想,借助Dearpygui绘制一个记牌器面板,同时如何打包插件进行共享。注意插件用于功能测试及......
  • Arduino UNO R3自学笔记24 之 Arduino如何使用MAX7219控制多个数码管?
    注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。前言:前面学习了单个数码管的控制,但是在大多场合一个数码管是满足不了使用场景的,因此对于数码管的学习,应该学会用尽可能少的端口去驱动更多的数码管,在此情况下,MAX7219比较适合我们使用。1.MAX7219引脚及功能介绍......
  • 代码随想录算法训练营day11|150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K
    学习资料:https://programmercarl.com/0150.逆波兰表达式求值.html#算法公开课栈、队列、堆学习记录:150.逆波兰表达式求值(中序表达式转换为后序表达式,用栈实现;遇到符号就从栈中取前两个元素进行运算,再放回去)点击查看代码fromoperatorimportadd,sub,muldefdiv(x,y):......
  • 亚马逊联盟营销:有效管理多个联盟账户?
    亚马逊联盟计划(AmazonAssociatesProgram),是亚马逊提供的一种在线营销计划。通过这个计划,网站主、博主、社交媒体影响者以及其他在线内容创作者可以通过推广亚马逊上的商品来赚取佣金。增加产品销量最简单的方法就是创建有诱惑力的内容,但是怎么做呢?这其中还是有学问研究,下面M......
  • 我整理了 50 多个简历致命问题,知道为什么投简历没回复了!
    大家好,我是程序员鱼皮。做知识分享这些年来,我看过太多简历、也帮忙修改过很多的简历,发现很多同学是完全不会写简历的、会犯很多常见的问题,不能把自己的优势充分展示出来,导致措施了很多面试机会,实在是很可惜。为此,我写了一份《程序员写简历指南(保姆级)》专栏,多达几万字,帮大家了解:......
  • 窗口传值方法
    网络上有几种方法,先总结如下:调用窗体(父):FormFather,被调用窗体(子):FormSub方法1:所有权法//FormFather://需要有一个公共的刷新方法publicvoidRefresh_Method(){//...}//在调用FormSub时,要把FormSub的所有......
  • [问题记录]SQLserver数据库是否可以新建多个.mdf文件?
    结论:1.可以,但只有第一个(.mdf)为当前数据库主文件。2.当有多个(.mdf)文件时,语句不会出现错误,但不符合命名约定,即命名约定不正确。3.数据库扩展名可以任意,官方文档中推荐主数据文件使用(.mdf),辅数据文件使用(.ndf),但如果使用例如:(.abc)作为文件后缀名,也是正确的。(具体官方文件截......
  • APP应用分发多个步骤和策略过程,如何进行app应用分发?
     进行APP应用分发是一个涉及多个步骤和策略的过程,以下是对该过程的详细解析:一、前期准备应用程序准备:开发人员需要确保应用程序已经经过完整的测试和质量保证,包括功能测试、用户体验测试、性能测试等,以确保其稳定性和可靠性。打包应用程序,将开发完成的APP进行编译、打包......
  • 自动化测试 | 窗口截图
    driver.get_screenshot_as_file 是SeleniumWebDriver的一个方法,它允许你将当前浏览器窗口(或标签页)的截图保存为文件。这个方法对于自动化测试中的截图验证非常有用,因为它可以帮助你捕获测试执行过程中的页面状态。以下是一些关于 driver.get_screenshot_as_file 方法的......
  • 1:1仿PG电子PP电子 后台可控 多个模板选择源码全开源 像项目展示
    前端首页页面前端登录界面前端支持多套UI支持多种语言效果后端游戏控制界面后端游戏添加界面后端模板切换页面仅供参考!......