簡體   English   中英

PyQt5如何自定義Qtreewidget項目編輯器?

[英]How to customize Qtreewidget item editor in PyQt5?

我正在制作一個帶有可編輯項目的 QtreeWidget,但問題出在項目編輯器或 QAbstractItemDelegate(可能這樣稱呼,不確定)。我無法更改樣式表,實際上我不知道該怎么做。而且我想要選定的行(編輯器中的藍色)應該根據我的意願。如下圖所示在此處輸入圖像描述

在這里,我希望藍色選定的行最多為“.jpg”,這樣任何人都無法更改該“.jpg”。 只是,一個人可以改變到這個.jpg"

這是我的代碼:

import sys
from PyQt5 import QtCore, QtWidgets

class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.button = QtWidgets.QPushButton('Edit')
        self.button.clicked.connect(self.edittreeitem)
        self.tree = QtWidgets.QTreeWidget()
        self.tree.setStyleSheet('background:#333333;color:grey')
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.tree)
        layout.addWidget(self.button)
        columns = 'ABCDE'
        self.tree.setColumnCount(len(columns))
        for index in range(50):
            item=QtWidgets.QTreeWidgetItem(
                self.tree, [f'{char}{index:02}.jpg' for char in columns])
            item.setFlags(item.flags()|QtCore.Qt.ItemIsEditable)
    def edittreeitem(self):
        getSelected = self.tree.selectedItems()
        self.tree.editItem(getSelected[0],0)  

if __name__ == '__main__':
    
    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setWindowTitle('Test')
    window.setGeometry(800, 100, 540, 300)
    window.show()
    sys.exit(app.exec_())

您可以創建自己的委托,只考慮基本名稱而不考慮擴展名,然后使用現有擴展名設置數據。

class BaseNameDelegate(QtWidgets.QStyledItemDelegate):
    def setEditorData(self, editor, index):
        editor.setText(QtCore.QFileInfo(index.data()).completeBaseName())

    def setModelData(self, editor, model, index):
        name = editor.text()
        if not name:
            return
        suffix = QtCore.QFileInfo(index.data()).suffix()
        model.setData(index, '{}.{}'.format(name, suffix))


class Window(QtWidgets.QWidget):
    def __init__(self):
        # ...
        self.tree.setItemDelegate(BaseNameDelegate(self.tree))

這樣做的唯一缺點是擴展在編輯期間不可見,但這需要比這更復雜的實現,因為 QLineEdit(委托字符串值的默認編輯器)不提供這種行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM