PyQt Tree Widget在点击时崩溃

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

单击树小部件中的一项后,将导致内存泄漏和窗口无响应。我的工作环境是

  • python 3.6.9
  • PyQt5 5.13.0
  • PyQt5-sip 4.19.18

这是gui/main_window.py,它仅显示主窗口和树小部件。

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(948, 677)
        MainWindow.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.dataTreeWidget = QtWidgets.QTreeWidget(self.centralwidget)
        self.dataTreeWidget.setGeometry(QtCore.QRect(110, 60, 256, 192))
        self.dataTreeWidget.setObjectName("dataTreeWidget")
        self.dataTreeWidget.headerItem().setText(0, "1")
        self.dataTreeWidget.setFocusPolicy(QtCore.Qt.StrongFocus)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 948, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "treeTest"))

这是gui/main.py,仅用于显示树数据。主要代码来自here

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
from gui.main_window import *


class MotionMainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MotionMainWindow, self).__init__()
        self.setupUi(self)
        self.displayTree()

    def displayTree(self):
        for i in range(2):
            print(i)
            parent = QTreeWidgetItem(self.dataTreeWidget)
            parent.setText(0, "Parent {}".format(i))
            parent.setFlags(parent.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
            for x in range(5):
                child = QTreeWidgetItem(parent)
                child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
                child.setText(0, "Child {}".format(x))
                child.setCheckState(0, Qt.Unchecked)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle('Fusion')
    mWin = MotionMainWindow()
    mWin.show()
    sys.exit(app.exec_())

enter image description here

pyqt5 qtreewidget
1个回答
0
投票

这是由于Youdao Dictionary,这是一个支持翻译屏幕上显示的任何单词的词典软件。因此,它尝试翻译树小部件的名称并导致崩溃。

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