Невозможно добавить QTextEdit внутри QTreeWidget - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь добавить параметр для QTreeWidget, чтобы иметь многострочное редактирование, которое, как я предполагаю, потребует QTextEdit. Проблема в том, что примеры, которые я нашел в Интернете, просто не работают.

Ответы Я найдено все указали на использование tree.setItemWidget(item, column, widget), но если я добавлю эту строку, окно просто не появляется вообще. Что я делаю не так в этом случае?

Вот мой пример кода, который имеет проблему:

import sys
from Qt import QtWidgets, QtCore

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None, **kwargs):
        super(MainWindow, self).__init__(parent, **kwargs)

        #Add tree widget to window
        tree = QtWidgets.QTreeWidget()
        tree.setHeaderItem(QtWidgets.QTreeWidgetItem(['col1', 'col2']))
        self.setCentralWidget(tree)

        #Create items
        topLevelButton = QtWidgets.QPushButton('button')
        topLevelItem = QtWidgets.QTreeWidgetItem(['test button', 'line edit'])
        topLevelItem.setFlags(topLevelItem.flags() | QtCore.Qt.ItemIsEditable)

        #Add items to tree widget
        tree.addTopLevelItem(topLevelItem)
        tree.setItemWidget(topLevelItem, 0, topLevelButton)   #the window will not load if this line is not commented out


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    app.setActiveWindow(window) 
    window.show()
    sys.exit(app.exec_())

Я пробовал это в PySide (2.7) и PySide2 (3.7).

Редактировать: По крайней мере, для Python 3 это было проблемой с PySide2, где форсирование PyQt5 каким-то образом исправляло то, что было. Я все еще не могу запустить Python 2, так как не могу установить PyQt4.

Редактировать 2: Это на самом деле вызывает сбой, если вы используете его в программе, такой как Nuke, которая использует PySide, возможно, мне придется задать более конкретный вопрос, если я не могу понять это из этого.

1 Ответ

0 голосов
/ 14 января 2019

Извините, PyQt5 работает.

import sys
#from Qt   import QtWidgets, QtCore
from PyQt5 import QtWidgets, QtCore               # <---

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None, **kwargs):
        super(MainWindow, self).__init__(parent, **kwargs)

        # Add tree widget to window
        tree = QtWidgets.QTreeWidget()
        tree.setHeaderItem(QtWidgets.QTreeWidgetItem(['col1', 'col2']))
        self.setCentralWidget(tree)

        # Create items
        topLevelButton = QtWidgets.QPushButton('button')
        topLevelItem   = QtWidgets.QTreeWidgetItem(['test button', 'line edit'])
        topLevelItem.setFlags(topLevelItem.flags() | QtCore.Qt.ItemIsEditable)

        # Add items to tree widget
        tree.addTopLevelItem(topLevelItem)

        tree.setItemWidget(topLevelItem, 0, topLevelButton)   # ??? the window will not load if this line is not commented out

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    app.setActiveWindow(window)    # ???
    window.show()
    sys.exit(app.exec_())

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...