如何防止PyQt Line Edit和Message Box陷入无限循环?

问题描述 投票:1回答:1

在下面的代码中,在行编辑框中进行任何编辑或完成后,将调用修改函数。然后,程序将陷入无限循环,导致连续的QMessageBox弹出窗口和“修改...”打印语句,然后是程序的最终崩溃。

我试图把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事件循环有关?

python pyqt5 infinite-loop qlineedit qmessagebox
1个回答
1
投票

你想拥有一个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()
© www.soinside.com 2019 - 2024. All rights reserved.