LINUX.ORG.RU

Не завершается процес программы на pyqt5, что делать?

 , ,


0

1

В программе на PyQt5 используется PyQtGraph версии 0.11.1. Сначала вызывается диалог, затем остальная программа

class APP(QtWidgets.QMainWindow, Ui_MainWindow):
    fps = 50
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.viewer = gl.GLViewWidget()
        self.verticalLayout.insertWidget(1, self.viewer)
        self.viewer.setCameraPosition(distance=500)

        self.loadconfig()
        self.data = algoritm.mainalgoritm(self.configfile)

        self.timer = QtCore.QTimer(self)
        self.timer.setSingleShot(False)
        self.timer.timeout.connect(self.viewtimer)

        self.configButton.clicked.connect(self.loadconfig)
        self.timer.start(self.fps)


    def loadconfig(self):
        self.configfile, _ = QtWidgets.QFileDialog.getOpenFileName(
            parent=self,
            caption="Open JSON", 
            filter="JSON (*.json)")

    def viewtimer(self):
        if smth:
            ...
        else:
            self.showdata(self.i)

    def showdata(self, i):
        self.items.setData(pos=self.data[i])


После вызова self.close всё завершается, но при этом сам процесс остаётся. Что делать?

Файл майн стандартный, опущен, импорты тоже.

Вопосы про нефиг юзать PyQtGraph не принимаются, пока не сатли грузить конфиг всё было ок.


Собака была зарыта в QtWidgets.QFileDialog.DontUseNativeDialog, при включении этой опции всё заработало корректно.

И тут же возникает следующий вопрос: а я вот хочу нативный диалог. Как сделать так что бы он не глючил?



Последнее исправление: nikitalol (всего исправлений: 1)

Скорее всего у тебя где-то остается неприбитый тред. Если лень его искать попробуй в self.close добавить sys.exit

Aswed ★★★★★
()
Последнее исправление: Aswed (всего исправлений: 1)

Открой дебаггер, пошли sigint, тормозни прогу и посмотри список тредов

upcFrost ★★★★★
()
Ответ на: комментарий от Aswed

Да не скорее всего а точно Да, эта штука работает, и это похоже какой-то глюк либо нативного диалога, либо взаимодействия pyqt с нативным диалогом.

nikitalol
() автор топика

А вот не надо ничего опускать и код надо показать целиком, где здесь вызов self.close, после которого процесс не завершается?

Предполагаю, что в main’е что-то вроде такого


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = APP()
    
    sys.exit(app.exec())

Ты вызываешь self.loadconfig() в __init__ основного окна, т.е. ДО запуска основного event loop’а (app.exec()). Проверь этот момент

asaks
()
Последнее исправление: asaks (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.