File: tree_widget.py
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.main_player_list_treeWidget = QtWidgets.QTreeWidget(self.centralwidget)
self.main_player_list_treeWidget.setFocusPolicy(QtCore.Qt.NoFocus)
self.main_player_list_treeWidget.setAcceptDrops(True)
self.main_player_list_treeWidget.setStyleSheet("")
self.main_player_list_treeWidget.setDragEnabled(True)
self.main_player_list_treeWidget.setDragDropOverwriteMode(False)
self.main_player_list_treeWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
self.main_player_list_treeWidget.setDefaultDropAction(QtCore.Qt.MoveAction)
self.main_player_list_treeWidget.setAlternatingRowColors(False)
self.main_player_list_treeWidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.main_player_list_treeWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.main_player_list_treeWidget.setAnimated(True)
self.main_player_list_treeWidget.setExpandsOnDoubleClick(False)
self.main_player_list_treeWidget.setObjectName("main_player_list_treeWidget")
self.main_player_list_treeWidget.header().setCascadingSectionResizes(False)
self.gridLayout.addWidget(self.main_player_list_treeWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.main_player_list_treeWidget.setStatusTip(_translate("MainWindow", "Δενδρική λίστα με τα περιεχόμενα της κεντρικής λίστας αναπαραγωγής"))
self.main_player_list_treeWidget.headerItem().setText(0, _translate("MainWindow", "Α/Α"))
self.main_player_list_treeWidget.headerItem().setText(1, _translate("MainWindow", "Είδος"))
self.main_player_list_treeWidget.headerItem().setText(2, _translate("MainWindow", "Τίτλος"))
self.main_player_list_treeWidget.headerItem().setText(3, _translate("MainWindow", "Διάρκεια"))
self.main_player_list_treeWidget.headerItem().setText(4, _translate("MainWindow", "Πλήθος επαναλήψεων"))
self.main_player_list_treeWidget.headerItem().setText(5, _translate("MainWindow", "Υπόλοιπο επαναλήψεων"))
File: main.py
from PyQt5 import QtWidgets, QtGui, QtCore
from tree_widget import Ui_MainWindow
import sys
class Example:
def __init__(self):
self.app = QtWidgets.QApplication(sys.argv)
self.MainWindow = QtWidgets.QMainWindow()
self.ui = Ui_MainWindow()
self.ui.setupUi(self.MainWindow)
self.MainWindow.show()
self.fill_tree_widget()
sys.exit(self.app.exec_())
def fill_tree_widget(self):
parent = self.ui.main_player_list_treeWidget
self.ui.main_player_list_treeWidget.setStyleSheet("QTreeWidget::item{background-color: white;}QTreeWidget::branch::!has-children:selected,QTreeWidget::item:selected {background-color: rgb(17, 130, 220);}")
self.tree_items = []
self.ui.main_player_list_treeWidget.clear()
position = 0
for i in range(0,400):
position += 1
self.tree_items.append(QtWidgets.QTreeWidgetItem(parent))
item = self.tree_items[-1]
related_data = QtCore.QVariant((item, str(position)))
item.setData(0, QtCore.Qt.UserRole, related_data)
self.tree_items[-1].setText(0,str(i+1))
self.tree_items[-1].setText(1,str("fddfs"))
self.tree_items[-1].setText(2,str("fddfs"))
self.tree_items[-1].setText(3,str("fddfs"))
self.tree_items[-1].setText(4,str("fddfs"))
self.tree_items[-1].setText(5,str("fddfs"))
if __name__ == "__main__":
program = Example()
Try to comment this two lines in main.py and drag and drop works.
related_data = QtCore.QVariant((item, str(position)))
item.setData(0, QtCore.Qt.UserRole, related_data)
With this two lines this error appear while drag and drop:
TypeError: cannot pickle 'QTreeWidgetItem' object