Python PyQt5-是否可以添加一个按钮在QTreeView中按下?

问题描述 投票:0回答:1

我想在以QPushButton结尾的树视图中添加.pdf,当我单击它时,我想返回为其指定索引的路径。

[Native QTreeView甚至可能无法实现,但是如果有人可以引导我朝正确的方向前进,那就太棒了!

总结一下,我想在红色方块下方显示QPushButton

view

“树形视图”的当前代码:

from PyQt5.QtMultimediaWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import *
import os, sys
class MainMenu(QWidget):
    def __init__(self, parent = None):
        super(MainMenu, self).__init__(parent)
        self.model = QFileSystemModel()
        self.model.setRootPath(QDir.rootPath())
        self.model.setFilter(QDir.NoDotAndDotDot | QDir.AllEntries | QDir.Dirs | QDir.Files)
        self.proxy_model = QSortFilterProxyModel(recursiveFilteringEnabled = True, filterRole = QFileSystemModel.FileNameRole)
        self.proxy_model.setSourceModel(self.model)
        self.model.setReadOnly(False)
        self.model.setNameFilterDisables(False)

        self.indexRoot = self.model.index(self.model.rootPath())

        self.treeView = QTreeView(self)
        self.treeView.setModel(self.proxy_model)

        self.treeView.setRootIndex(self.indexRoot)
        self.treeView.setAnimated(True)
        self.treeView.setIndentation(20)
        self.treeView.setSortingEnabled(True)
        self.treeView.setDragEnabled(False)
        self.treeView.setAcceptDrops(False)
        self.treeView.setDropIndicatorShown(True)
        self.treeView.setEditTriggers(QTreeView.NoEditTriggers)
        for i in range(1, self.treeView.model().columnCount()):
            self.treeView.header().hideSection(i)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = MainMenu()
    main.show()
    sys.exit(app.exec_())
python pyqt5 qtreeview qpushbutton
1个回答
0
投票

为此,您可能需要一个项目委托。

想法是,您将基本项目绘画留给基类paint()函数,然后在其上面绘制一个虚拟按钮。为此,对视图样式使用paint()(从QStyleOptionButton参数获得):创建一个样式选项,从视图中使用initQStyleOptionButton,它将应用基本矩形小部件,字体,调色板等),调整矩形以适合您的需求,最后对其进行绘制。

为了更好地实现绘图(鼠标悬停效果,也确保正确的绘画更新),您还需要将树视图的鼠标跟踪设置为True。除了代码中解释的其他检查之外,这还允许您绘制虚拟按钮,包括其悬停或按下状态。

最后,当释放按钮并且鼠标位于其边界内时,会以当前索引作为参数发出option信号。

option.widget

buttonClicked
© www.soinside.com 2019 - 2024. All rights reserved.