PYQT Connect Method 버그로 사용하면 목록에서 위젯을 생성합니다.
문제
GUI 프로그램이 있습니다.
이름 목록에서 버튼을 자동 생성하고 함수에 연결하여 이름을 인쇄합니다.
하지만이 프로그램을 실행하면 모든 버튼을 누르고 있습니다.
그들은 모두 마지막 버튼의 이름을 반환합니다.
왜 이런 일이 일어나는지 궁금합니다. 아무도 도울 수 있습니까?
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import logging
logging.basicConfig(level=logging.DEBUG,)
class MainWindow(QWidget):
def init(self):
names = ('a','b','c')
lo = QHBoxLayout(self)
for name in names:
button = QPushButton(name,self)
lo.addWidget(button)
self.connect(button,SIGNAL("clicked()"),
lambda :logging.debug(name))
if __name__=="__main__":
app = QApplication(sys.argv)
m = MainWindow();m.init();m.show()
app.exec_()
같은 결과 :
python t.py
DEBUG:root:c
DEBUG:root:c
DEBUG:root:c
해결책
코드에 적어도 하나의 버그가 있습니다.
바꾸다:
lambda :logging.debug(name)
에 의해:
lambda name=name: logging.debug(name)
보다 MAP () 및 목록 이해력의 결과가 다른 이유는 무엇입니까? 자세한 내용은.
제휴하지 않습니다 StackOverflow