功能
- 实现输入完成后,按下回车键自动切换焦点,顺序 1->2->3->4
问题
editingFinished
会触发两次槽函数
这个问题特坑,再次遇到该问题 2022.11.28 导致多线程多次启动
原因
- 是因为响应enter键一次,以及焦点离开时又一次,不过两次进入时状态是不一样的,一次焦点还在QLineEdit上,一次已经不在了。
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)