**PyQt QLineEdit的editingFinished按下回车触发两次问题

功能

  • 实现输入完成后,按下回车键自动切换焦点,顺序 1->2->3->4

问题

editingFinished会触发两次槽函数
这个问题特坑,再次遇到该问题 2022.11.28 导致多线程多次启动

原因

  • 是因为响应enter键一次,以及焦点离开时又一次,不过两次进入时状态是不一样的,一次焦点还在QLineEdit上,一次已经不在了。

**PyQt QLineEdit的editingFinished按下回车触发两次问题_第1张图片

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.add_signal()

    def add_signal(self):
        edit_list = ['lineEdit', 'lineEdit_2', 'lineEdit_3', 'lineEdit_4']
        for edit in edit_list:
            obj = getattr(self, edit)
            obj.editingFinished.connect(partial(switch_focus, obj, edit)) # 此处不能使用lambda 表达式,会出问题

utils.py

from pykeyboard import PyKeyboard

def switch_focus(obj, name):
    if not obj.hasFocus():		# 通过焦点,避免重复触发函数
        return
    k = PyKeyboard()
    k.press_key(k.tab_key)

参考

你可能感兴趣的:(pyqt,qt)