У меня возникли проблемы при попытке использовать слот/сигналы в пользовательском классе.PyQt5: self is NoneType при использовании слотов/сигналов
Класс выглядит следующим образом:
import sys
from PyQt5 import QtCore
from PyQt5.QtGui import QGuiApplication, QPixmap
class Screenshot(QtCore.QObject):
newScreenshotTaken = QtCore.pyqtSignal(QPixmap)
timer = QtCore.QTimer()
captureInterval = 5 * 60
def __init__(self):
super(Screenshot, self).__init__()
def startCapture(self):
self.capture()
def stopCapture(self):
self.timer.stop()
def on_userStartedCapture(self):
self.startCapture()
def on_userStoppedCapture(self):
self.stopCapture()
def capture(self):
print("capture!")
ошибка происходит в on_userStartedCapture (Я):
File "/Volumes/HD2/test/screenshot.py", line 23, in on_userStartedCapture
self.startCapture()
AttributeError: 'NoneType' object has no attribute 'startCapture'
Испустите вызывается из другого класса:
self.userStartedCapture.emit()
И Соединим осуществляется по адресу main.py:
screenshot = Screenshot()
mainWindow = MainWindow()
mainWindow.userStartedCapture.connect(screenshot.on_userStartedCapture)
Странная вещь, что сам работает на всех слотах/сигналах в моем приложении. Но я не могу понять, почему этот конкретный провал.
Любые идеи о том, что может произойти?
Ошибка возникает, потому что 'self' является' None' в момент отправки сигнала. То есть экземпляр «Скриншот», к которому подключен сигнал, был удален (или находится в процессе удаления). Очевидно, что трудно быть более точным, чем это, поскольку вы опустили соответствующие части своего кода. – ekhumoro
@ekhumoro это имеет смысл. Создание экземпляра экрана было сделано в __init__ класса AppWindow, который расширяет QtWidgets.QWidget. Каков надлежащий способ сохранить его в течение всего выполнения приложения? – Fernando
@ekhumoro Спасибо! Я просто изменил экземпляр скриншота на свойство класса вместо локальной переменной в __init__, и он сработал. Не могли бы вы добавить свой комментарий в качестве ответа, чтобы я мог его принять? – Fernando