PyQt5 QStackedWidget дает "python3: двойное освобождение или повреждение (! Prev)" - PullRequest
0 голосов
/ 28 января 2019

Я написал скрипт, который переключается между виджетами каждые 10 секунд.Эта программа предназначена для запуска день / ночь без каких-либо взаимодействий.Программа работает на Raspberry Pi 3 Model B. Код выполняется очень хорошо и переворачивается между виджетами, однако через некоторое время он останавливается и выдает ошибку «python3: double free или коррупция (! Prev)»

Я использовал GDB, чтобы отследить проблему.однако я получаю следующую ошибку: «Обратный ход остановлен: предыдущий кадр идентичен этому кадру (поврежденный стек?)»

Я добавил операторы печати во всем своем коде, и я смог добавить ошибку в следующий вызов метода,Отрезано ниже

Чтобы убедиться, что код не работает в методе setCurrentIndex (ключ), как показано ниже, я прокомментировал отсканированный и запустил программу.программа не выдала ошибку, но я не смог переключаться между виджетами.

def __init__(self):
    self.labels = dict()
    self.groups = dict()
    self.frame = ""
    self.widgets= QtWidgets.QStackedWidget()
    self.setup_ui()
    self.size = 0

def setup_ui(self, frame):
    self.init_groups() # This method creates all the widgets and adds it to self.widgets
    self.widgets.setCurrentIndex(0)
    layout = QtWidgets.QVBoxLayout()
    layout.addWidget(self.widgets)
    self.setLayout(layout)

def flip_widget(self, key):
    print("\tflip_start")
    self.window.setCurrentIndex(key) # PROBLEM COMES FROM HERE
    print("\tflip_done")

Ожидаемый результат - другой виджет каждые 10 секунд. Фактические результаты изменяются через 2-8 часов в коде.Изначально код работает нормально и корректно меняет виджеты.Однако через некоторое время он существует, и я получаю следующую ошибку: «python3: двойное освобождение или повреждение (! Prev)»

Может кто-нибудь подсказать мне, как решить проблему, или найти альтернативный способ переключения между виджетами,Ожидается, что виджеты будут повторяться после цикла

...