python - 如何防止 PyQt 行编辑和消息框陷入无限循环?
问题描述
在下面的代码中,在行编辑框中进行任何类型的编辑或完成后,都会调用修改函数。然后,程序会陷入死循环,导致QMessageBox不断弹窗和'modifying..'打印语句,最终导致程序崩溃。
我试过放在self.win.processEvents()
不同的地方,但它没有帮助。
from PyQt5 import QtWidgets
class Test:
def __init__(self):
self.app = QtWidgets.QApplication([])
self.win = QtWidgets.QMainWindow()
self.le_dwell_filter = QtWidgets.QLineEdit()
self.le_dwell_filter.editingFinished.connect(self.modify)
self.win.setCentralWidget(self.le_dwell_filter)
self.win.show()
def modify(self):
print('Modifying...')
msgbox = QtWidgets.QMessageBox()
msgbox.setText('modification done!')
msgbox.show()
def start(self):
self.app.exec()
if __name__ == '__main__':
my_test = Test()
my_test.start()
我原以为这会打印一个“正在修改...”,但不知何故 QMessageBox 不断弹出并且打印不断发生..我认为这与 PyQt 事件循环有关?
解决方案
你想要一个 QMessageBox 那么为什么要在 modify 方法中创建一个新的 QMessageBox 呢?你要做的就是重用:
class Test:
def __init__(self):
self.app = QtWidgets.QApplication([])
self.win = QtWidgets.QMainWindow()
self.le_dwell_filter = QtWidgets.QLineEdit()
self.le_dwell_filter.editingFinished.connect(self.modify)
self.win.setCentralWidget(self.le_dwell_filter)
self.win.show()
self.msgbox = QtWidgets.QMessageBox()
def modify(self):
print('Modifying...')
self.msgbox.setText('modification done!')
self.msgbox.show()
def start(self):
self.app.exec()
推荐阅读
- javascript - 如何动态更改 logoURL?
- python - 在python中对不同的列进行分组
- jquery - 如何通过下拉列表的变化根据数据属性对div进行排序
- qt - Qt QTreeView indexBelow 不起作用
- ios - 无法通过whatsapp分享pdf
- javascript - 为什么无论代码中的顺序如何,alert() 对话框都会首先显示?
- python - Django-,在模型表单中显示和过滤来自外键的特定字段
- python - 如何使用python对图像进行base64编码
- java - 通过意图向任何其他应用程序发送字符串
- autohotkey - Autohotkey 映射后返回空格键的常规功能