• 2022-08-06


    1.实现了文件拖入自动读取功能,主要思路是给窗口类或者自定义类添加一个事件过滤器,并且在发生拖入事件时实现相关逻辑。

    1. def eventFilter(self, obj, event):
    2. """
    3. 处理窗体内出现的事件,如果有需要则自行添加if判断语句;
    4. 目前已经实现将拖到控件上文件的路径设置为控件的显示文本;
    5. """
    6. if event.type() == QtCore.QEvent.DragEnter:
    7. event.accept()
    8. if event.type() == QtCore.QEvent.Drop:
    9. print("enter")
    10. md = event.mimeData()
    11. if md.hasUrls():
    12. # 此处md.urls()的返回值为拖入文件的file路径列表,即支持多文件同时拖入;
    13. # 此处默认读取第一个文件的路径进行处理,可按照个人需求进行相应的修改
    14. url = md.urls()[0]
    15. self.f_list = []
    16. for url in md.urls():
    17. self.f_list.append(url.toLocalFile())
    18. obj.setText(",".join(self.f_list))
    19. self.load_data()
    20. return True
    21. return super().eventFilter(obj, event)

    相应的控件添加如下代码

    1. self.h1_text.setAcceptDrops(True)
    2. self.h1_text.installEventFilter(self)

    这两句代码意思是首先设置控件可以接收drop事件,然后指定事件过滤器的实例。

    2.把下拉列表改成可搜索模式,用了一个网上写好的扩展类,代码如下

    1. class ExtendedComboBox(QComboBox):
    2. def __init__(self, parent=None):
    3. super(ExtendedComboBox, self).__init__(parent)
    4. self.setFocusPolicy(Qt.StrongFocus)
    5. self.setEditable(True)
    6. # add a filter model to filter matching items
    7. self.pFilterModel = QSortFilterProxyModel(self)
    8. self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
    9. self.pFilterModel.setSourceModel(self.model())
    10. # add a completer, which uses the filter model
    11. self.completer = QCompleter(self.pFilterModel, self)
    12. # always show all (filtered) completions
    13. self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
    14. self.setCompleter(self.completer)
    15. # connect signals
    16. self.lineEdit().textEdited.connect(self.pFilterModel.setFilterFixedString)
    17. self.completer.activated.connect(self.on_completer_activated)
    18. # on selection of an item from the completer, select the corresponding item from combobox
    19. def on_completer_activated(self, text):
    20. if text:
    21. index = self.findText(text)
    22. self.setCurrentIndex(index)
    23. self.activated[str].emit(self.itemText(index))
    24. # on model change, update the models of the filter and completer as well
    25. def setModel(self, model):
    26. super(ExtendedComboBox, self).setModel(model)
    27. self.pFilterModel.setSourceModel(model)
    28. self.completer.setModel(self.pFilterModel)
    29. # on model column change, update the model column of the filter and completer as well
    30. def setModelColumn(self, column):
    31. self.completer.setCompletionColumn(column)
    32. self.pFilterModel.setFilterKeyColumn(column)
    33. super(ExtendedComboBox, self).setModelColumn(column)

    原来我写的代码不用做任何改变,直接把类名改下就行,可以说很方便了。

    3.添加了进度条。今天终于时把进度条弄明白了,可能我之前进度计算错了,导致一直是0,今天本来没想做进度条,而是做大文件读取时界面卡死问题,网上说是单独开个线程,这个之前也知道了,但是数据不知道怎么获取,今天试了下,跟普通信号没什么区别,建个dataframe的信号就行了,读完直接向主窗口发信号就行了,主窗口新写个接收信号的函数就行了。

  • 相关阅读:
    利用SD存储介质扩展MAXQ20000的非易失性数据存储空间
    python读取图像小工具
    ESP8266-Arduino编程实例-LM75温度传感器驱动
    Centos7原生hadoop环境,搭建Impala集群和负载均衡配置
    数据结构第四课 -----线性表之栈
    承载22倍于自身重量前行,垂直跳跃59厘米,用爆炸驱动的昆虫机器人来了
    介绍两个好用又好玩的大模型工具
    项目实战 Java读取Excel数据
    视频号助手后台数据不一致问题排查
    【阿里云】ssl证书到期更新
  • 原文地址:https://blog.csdn.net/zy1620454507/article/details/126191242