Почему использование logging.Formatter предотвращает удаление виджета?Python

Программы на Python
Ответить
Anonymous
 Почему использование logging.Formatter предотвращает удаление виджета?

Сообщение Anonymous »

Вот MCVE, очень простой фрагмент кода, создающий QMainWindow с пустым центральным QWidget:

Код: Выделить всё

import sys

from PyQt5.QtWidgets import QWidget

class MyWidget(QWidget):
"""QWidget based class to configure a Simulator object."""

def __init__(self,parent : QWidget):
"""
Construct a new object.

param: parent : QWidget
Parent class
"""
super().__init__(parent)

print("Created GUI")

def __del__(self):
print("Deleting GUI")

if __name__ == '__main__':

from PyQt5.QtWidgets import QMainWindow, QApplication

import logging

class CustomFormatter(logging.Formatter):

def format(self, record):
formatter = logging.Formatter("%(message)s")
return formatter.format(record)

logger = logging.getLogger("my_logger")
logger.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
#ch.setFormatter(CustomFormatter())
logger.addHandler(ch)

app = QApplication(sys.argv)

wnd = QMainWindow()
widget = MyWidget(wnd)

wnd.setCentralWidget( widget )
wnd.show()

sys.exit(app.exec())
Выполните его, откроется графический интерфейс, нажмите кнопку закрытия, графический интерфейс закроется, и затем будет вывод:

Код: Выделить всё

Created GUI
Deleting GUI
Теперь раскомментируйте ch.setFormatter(CustomFormatter()), повторите.
Теперь выходные данные не отображаются. Удаление графического интерфейса >. Я попытался добавить сюда утверждение, код не утверждает. Почему MyWidget.__del__ не вызывается при использовании специального средства форматирования?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-deleted
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»