【问题标题】:PyQt: Adding children to TreeWidget dynamicallyPyQt:动态地将子级添加到 TreeWidget
【发布时间】:2016-08-26 00:19:58
【问题描述】:

我有一个带有一个或多个父级的 TreeWidget,每个父级都有可变数量的子级。最初填充树(例如,使用来自真实应用程序中的数据库的数据)。我希望用户能够为每个父母添加一个或多个孩子,以及编辑当前选择的孩子,但不知道如何做到这一点。

下面是我的示例代码,它构建了一个包含一个父节点和五个子节点的树。该表单拦截“Return”和“Ins”键并调用一个简单的数据输入对话框,以获取要作为新子项输入的文本或编辑当前选定的子项。这里我遇到了两个问题:第一,如何获取当前选中的孩子的文本进行编辑?其次,如何将输入文本作为新的孩子(在示例代码中,我只能在树的父级添加输入的文本)。

一如既往,我最诚挚地感谢您提供的任何帮助。

import sys
from PyQt4.QtCore import * 
from PyQt4.QtGui import *

class MyMainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.tree = QTreeWidget(self)
        insertKey = QShortcut(QKeySequence(Qt.Key_Insert), self.tree)
        self.connect(insertKey, SIGNAL("activated()"), self.itemInsert)
        editKey = QShortcut(QKeySequence(Qt.Key_Return), self.tree)
        self.connect(editKey, SIGNAL("activated()"), self.itemEdit)
        self.setCentralWidget(self.tree)
        self.tree.setHeaderLabel('Tree')
        i = QTreeWidgetItem(self.tree, ['Parent'])   
        self.tree.addTopLevelItem(i)
        for x in range(5):
            j = QTreeWidgetItem(i ,['Child {}'.format(x)])

    def itemInsert(self):
        text, ok = QInputDialog.getText(self, "Add Child", "Enter child name:")
        if ok and not text.isEmpty():
            child = QTreeWidgetItem(self.tree, [text])

    def itemEdit(self):
        pass

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = MyMainWindow()
    ui.show()
    sys.exit(app.exec_()) 

【问题讨论】:

    标签: python pyqt pyqt4 qtreewidget qtreewidgetitem


    【解决方案1】:

    我们使用{your QTreeWidget}.selectedItems()函数来获取选中的元素,该函数返回选中的元素。

    在您的情况下,选择应该是模式:SingleSelection

    import sys
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    
    
    class MyMainWindow(QMainWindow):
        def __init__(self, parent=None):
            super(MyMainWindow, self).__init__(parent)
            self.tree = QTreeWidget(self)
    
            self.tree.setSelectionMode(QAbstractItemView.SingleSelection)
    
            insertKey = QShortcut(QKeySequence(Qt.Key_Insert), self.tree)
            insertKey.activated.connect(self.itemInsert)
            editKey = QShortcut(QKeySequence(Qt.Key_Return), self.tree)
            editKey.activated.connect(self.itemEdit)
            self.setCentralWidget(self.tree)
            self.tree.setHeaderLabel('Tree')
            i = QTreeWidgetItem(self.tree, ['Parent'])
            self.tree.addTopLevelItem(i)
            for x in range(5):
                QTreeWidgetItem(i, ['Child {}'.format(x)])
    
        def itemInsert(self):
            text, ok = QInputDialog.getText(self, "Add Child", "Enter child name:")
            if ok and text != "":
                if len(self.tree.selectedItems()) > 0:
                    QTreeWidgetItem(self.tree.selectedItems()[0], [text])
                else:
                    QTreeWidgetItem(self.tree, [text])
    
        def itemEdit(self):
            if self.tree.selectedItems():
                item = self.tree.selectedItems()[0]
                text, ok = QInputDialog.getText(self, "Edit Child", "Modify name:", QLineEdit.Normal, item.text(0))
                if ok and text != "":
                    item.setText(0, text)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        ui = MyMainWindow()
        ui.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 2012-02-06
      • 1970-01-01
      • 2014-07-09
      • 2019-12-24
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      相关资源
      最近更新 更多