【发布时间】:2023-03-08 08:37:02
【问题描述】:
我正在拼命尝试使用 Spyder3 内置调试器来调试 pyqt5 应用程序。似乎只要 qt 应用程序运行,断点就不再被命中。我有一个类似的问题,在插槽内发生异常,默认情况下,这些异常会在到达控制台的过程中丢失。为此,有一种解决方法在大多数情况下都有效。但是,调试似乎完全不可能。
应该演示问题的代码:
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(240, 190, 75, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.pushButton.clicked.connect(MainWindow.clicked_slot)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
class main_app_class(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.show()
def clicked_slot(self):
"""Breakpoints in here are never hit"""
print("Hit me!")
if __name__ == "__main__":
if not QApplication.instance():
app = QApplication(sys.argv)
else:
app = QApplication.instance()
main_app = main_app_class()
main_app.show()
app.exec_()
非常感谢任何帮助或提示,
菲利克斯
【问题讨论】:
-
(这里是 Spyder 维护者) 请发布一个不进入断点的 Qt 应用程序的简单示例。
-
添加了应该演示行为的代码。主要使用 QT 设计器生成。
-
非常感谢。我将在下面发布答案。
标签: python debugging pyqt5 spyder