Как отлаживать потоки PyQt5 в коде Visual Studio?Python

Программы на Python
Anonymous
Как отлаживать потоки PyQt5 в коде Visual Studio?

Сообщение Anonymous »

Я сейчас разрабатываю приложение PyQT5, использующее многопоточность, чтобы избежать зависания графического интерфейса. К сожалению, отладчик кода Visual Studio не останавливается на точках останова внутри исполняемого потока. Я попробовал все предложения со следующей страницы, но проблема не решена. https://github.com/microsoft/ptvsd/issues/428. Я думаю, что VS Code переключил отладчик с ptvsd на debugpy, поэтому все предложения больше не актуальны. Возможно, у кого-то есть идеи, как решить эту проблему.

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

import time
import sys

from PyQt5.QtCore import QObject, QThread, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QApplication, QPushButton, QTextEdit, QVBoxLayout, QWidget, QLabel

class Worker(QObject):
sig_msg = pyqtSignal(str)  # message to be shown to user

def __init__(self):
super().__init__()

@pyqtSlot()
def work(self):
self.sig_msg.emit('Hello from inside the thread!')

result = 1 + 1
result2 = 1 + 2

class MyWidget(QWidget):

def __init__(self):
super().__init__()

self.setWindowTitle("Thread Example")

form_layout = QVBoxLayout()

self.setLayout(form_layout)
self.resize(400, 200)

self.button_start_threads = QPushButton("Start")
self.button_start_threads.clicked.connect(self.start_threads)

self.label = QLabel()

form_layout.addWidget(self.label)
form_layout.addWidget(self.button_start_threads)

QThread.currentThread().setObjectName('main')

self.__threads = None

def start_threads(self):
self.__threads = []

worker = Worker()
thread = QThread()
thread.setObjectName('thread')
self.__threads.append((thread, worker))  # need to store worker too otherwise will be gc'd
worker.moveToThread(thread)

worker.sig_msg.connect(self.label.setText)

thread.started.connect(worker.work)
thread.start()

if __name__ == "__main__":
app = QApplication([])

form = MyWidget()
form.show()

sys.exit(app.exec_())
Вы можете воспроизвести ошибку, установив точку останова на self.sig_msg.emit('Привет изнутри thrad!') в моем случае отладчик не останавливается на этой позиции. Я использую VS Code версии 1.65.2. Код взят из упомянутого выше поста.

Подробнее здесь: https://stackoverflow.com/questions/718 ... tudio-code

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