我拼命地尝试使用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 maintainer here)要在PyQt插槽中使用Spyder进行调试,您需要做两件事:
使图形应用程序在运行时阻止控制台。你需要去那里
Tools > Preferences > IPython Console > Graphics
并停用名为
Activate support
的选项。您需要像这样修改您的
clicked_slot
方法语句
import pdb; pdb.set_trace()
是进入调试的编程方式。因此,一旦Python遇到该指令,它就会自动进入调试。在你的例子中,当你按下Push button
{{cd7}而不需要运行{cd7}和
注意:这种方法有两个重要的局限性:
相关问题 更多 >
编程相关推荐