单击树小部件中的一项后,将导致内存泄漏和窗口无响应。我的工作环境是
这是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_())
这是由于Youdao Dictionary,这是一个支持翻译屏幕上显示的任何单词的词典软件。因此,它尝试翻译树小部件的名称并导致崩溃。