'qplaintextedit [RuntimeError: Internal C++ object (PySide2.QtWidgets.QPlainTextEdit) already deleted]
Fix the typo and code
I have designed code the following way, as I was planning to support multiple tab.but I am getting following error during closing the window. it like design issue into my code, any suggestion to fix this issue.
Error: if obj is self.plain_textedit.viewport() and event.type() == QEvent.MouseButtonPress:
RuntimeError: Internal C++ object (PySide2.QtWidgets.QPlainTextEdit) already deleted.
Created sample code to reproduce this error
#!/usr/bin/env python
import os
import sys
from PySide2.QtCore import QEvent, QSize
from PySide2.QtCore import Qt
from PySide2.QtWidgets import (QDesktopWidget, QMainWindow, QSizePolicy, QWidget, QVBoxLayout)
from PySide2.QtWidgets import (QPlainTextEdit, QApplication, QSplitter, QTabWidget)
class MainWindow(QWidget):
def __init__(self):
super().__init__()
pass
def create_widget(self):
self.create_violation_text()
main_window = QVBoxLayout()
main_layout = QSplitter(Qt.Vertical)
main_layout.addWidget(self.plain_textedit)
# creating widgeth object as main window does not
# add layout direct to own layout
main_window.addWidget(main_layout)
blk_window = QWidget()
blk_window.setLayout(main_window)
return blk_window
def create_violation_text(self):
"""
creating main violation window which contain all violations
"""
self.plain_textedit = QPlainTextEdit()
self.plain_textedit.setLineWrapMode(QPlainTextEdit.NoWrap)
self.plain_textedit.setStyleSheet(
"""QPlainTextEdit {font-size: 14pt;
font-family: Courier;}""")
self.plain_textedit.setReadOnly(True)
self.plain_textedit.setMouseTracking(True)
self.plain_textedit_format = self.plain_textedit.currentCharFormat()
self.plain_textedit.setCursorWidth(5)
self.plain_textedit.viewport().installEventFilter(self)
self.plain_textedit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
def eventFilter(self, obj, event):
print ("event", obj)
if obj is self.plain_textedit.viewport() and event.type() == QEvent.MouseButtonPress:
print ("text edit event")
return super().eventFilter(obj, event)
class FinWindow(QMainWindow):
def __init__(self):
super().__init__()
self.width = 1100
self.height = 700
self.set_main_window()
self.blk_obj = MainWindow()
def set_main_window(self):
"""
Setting main window position
"""
self.setWindowTitle("GUI %s" % (os.path.abspath(__file__)))
self.setFixedSize(QSize(self.width, self.height))
wid = QDesktopWidget()
screen_width = wid.screen().frameGeometry().width()
screen_height = wid.screen().frameGeometry().height()
self.setGeometry(screen_width / 2 - self.width / 2,
screen_height / 2 - self.height / 2,
self.width, self.height)
def create_window(self):
main_layout = QVBoxLayout()
self.tab_widget = QTabWidget()
self.tab_widget.tabBar().setObjectName("mainTab")
self.tab_widget.addTab(self.blk_obj.create_widget(), "test")
main_layout.addWidget(self.tab_widget)
self.window = QWidget()
self.window.setLayout(main_layout)
self.setCentralWidget(self.window)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = FinWindow()
window.create_window()
window.show()
app.exec_()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
