"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Lambda 표현식 및 PYQT 슬롯 기능을 사용하는 이유는 예상치 못한 동작을 일으키는 이유는 무엇입니까?

Lambda 표현식 및 PYQT 슬롯 기능을 사용하는 이유는 예상치 못한 동작을 일으키는 이유는 무엇입니까?

2025-04-16에 게시되었습니다
검색:573

Why Does Using Lambda Expressions With PyQt Slots Lead to Unexpected Behavior? 
다음 코드를 고려하십시오.

Class MainWindow (qtgui.qwidget) : def __init __ (self) : ... self.buttons = [] [3, 4]의 IDX의 경우 : button = qtgui.qpushbutton ( 'button {} auto'.format (idx), self) button.clicked.connect (lambda x = idx : self.button_pushed (x)) self.buttons.append (버튼) main_layout.addwidget (button)

버튼을 클릭하면 3과 4의 예상 값을 수신하는 대신 button_pushed 메소드가 거짓을받습니다. 슬롯에 Lambda 표현식을 사용하는 경우,이 문제를 해결하기 위해 배정 된 값 (이 경우 x = idx와 같은 x = idx와 같은)은이 문제를 해결하기 위해 배출 된 값을 덮어 씁니다. Lambda 표현식은 버튼 상태를 무시하고

button.clicked.connect를 사용해야합니다. self.button_pushed (x))

class MainWindow(QtGui.QWidget):
    def __init__(self):
        ...
        self.buttons = []
        for idx in [3, 4]:
            button = QtGui.QPushButton('Button {} auto'.format(idx), self)
            button.clicked.connect(lambda x=idx: self.button_pushed(x))
            self.buttons.append(button)
            main_layout.addWidget(button)
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3