我试图在Pyside2
中的QTreeWidget
内创建一个列表(如QComboBox
)。每当我在单元格内单击以调用此列表时,它都会抛出错误
Traceback (most recent call last):
File "customQT.py", line 1489, in event
self.popup.move(Globpos)
RuntimeError: Internal C++ object (PySide2.QtWidgets.QListView) already deleted.
“trial\u justifier\u gui”是gui的.py文件的名称
from PySide2.QtWidgets import QWidget
from trial_justifier_gui import Ui_MainWindow
import os
import sys
from sys import argv
from os import path,listdir,remove,startfile,mkdir
from customQT import MyLineXML,MyComboXML,MyMeasureXML
from PySide2.QtCore import *
from Mylogger import *
from shutil import copy2
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import SubElement, Element
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *
class justifier(QtWidgets.QMainWindow):
def __init__(self,PathProject):
#super(justifier, self).__init__()
listbaseline = ['']
QtWidgets.QMainWindow.__init__(self, parent=None)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.btnCreateBaselineNew.clicked.connect(self.analysispath)
def analysispath(self):
self.ReqTree = QtWidgets.QTreeWidget(self.ui.tab_2)
self.ReqTree.clear()
self.ReqTree.setColumnCount(6)
self.ReqTree.setHeaderLabels(["File", "Line", "Item", "Message","Justification ","Status"])
self.ReqTree.header().setDefaultAlignment(Qt.AlignVCenter)
self.ReqTree.setWordWrap(True)
Line2 = MyComboXML(statusElem,["NEW","OK","KO","DELETED"],True)
Line2.modified.connect(self.modif)
self.ReqTree.setItemWidget(childBisPN,1,Line2)
用于创建列表和填充状态的MyComboXML类是:
调用此类的代码段是:
class MyComboXML(QLineEdit):
modified = Signal()
def __init__(self,elem,text,editable):
QLineEdit.__init__(self)
self.liste = text
self.filter = ""
self.elem = elem
self.editable = editable
self.listPopup = None
self.listTooltip = None
self.setText(elem.text)
self.setMouseTracking(True)
self.createModel()
# connect signals
self.textEdited.connect(self.pFilterModel.setFilterFixedString)
self.textChanged.connect(self.modifyText)
# self.completer.activated.connect(self.on_completer_activated)
self.isVisible = False
if not self.editable :
self.readOnly()
def createModel(self):
self.model = QStandardItemModel()
self.model.setRowCount(len(self.liste))
self.model.setColumnCount(1)
row = 0
for item in self.liste:
itemModel = QStandardItem()
# itemModel.setToolTip(item)
itemModel.setText(item)
self.model.setItem(row, 0, itemModel)
row = row + 1
# self.popup.setModel(self.model)
self.pFilterModel = QSortFilterProxyModel(self.model)
self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
self.pFilterModel.setSourceModel(self.model)
# add a completer, which uses the filter model
self.completer = QCompleter(self.pFilterModel, self)
# always show all (filtered) completions
self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
self.popup =self.completer.popup()
self.setCompleter(self.completer)
def event(self,e):
#print(e.type())
if (e.type() == QEvent.MouseButtonPress):
if self.editable:
#popup =self.completer.popup()
Globpos = self.parent().mapToGlobal(self.pos())
Globpos.setY(Globpos.y()+self.height()-2)
**self.popup.move(Globpos)**
if self.isVisible:
self.popup.hide()
self.isVisible = False
else:
self.popup.show()
self.isVisible = True
return QLineEdit.event(self,e)
我通过以下方式运行justifier类:
if __name__ == '__main__':
app=0
app = QtWidgets.QApplication(sys.argv)
mainWin = justifier(current_directory)
app.processEvents()
try:
sys.exit(app.exec_())
except:
print("Exiting")
GUI文件的代码如下所示:
from PySide2.QtCore import (QCoreApplication, QDate, QDateTime, QMetaObject,
QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter,
QPixmap, QRadialGradient)
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(1200, 700)
MainWindow.setMinimumSize(QSize(1200, 700))
MainWindow.setFocusPolicy(Qt.StrongFocus)
MainWindow.setStyleSheet(u"background-color: rgb(230, 242, 255);")
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.verticalLayoutWidget = QWidget(self.centralwidget)
self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget")
self.verticalLayoutWidget.setGeometry(QRect(110, 300, 1000, 400))
self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setObjectName(u"verticalLayout")
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.tabWidget = QTabWidget(self.verticalLayoutWidget)
self.tabWidget.setObjectName(u"tabWidget")
self.tab = QWidget()
self.tab.setObjectName(u"tab")
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QWidget()
self.tab_2.setObjectName(u"tab_2")
self.tabWidget.addTab(self.tab_2, "")
self.verticalLayout.addWidget(self.tabWidget)
MainWindow.setCentralWidget(self.centralwidget)
每当弹出窗口的代码被调用时,我就会得到错误,应用程序就会退出。这是我能提供的最小可重复性示例,因为我在代码中只包含了必要的模块
目前没有回答
相关问题 更多 >
编程相关推荐