얼마나 변수를 전달하는 기능으로 연결된 버튼을 pyqt5python[마감]

0

질문

def open_browser(i):
            print("open")

 for i in range(5):
     new_name_label = 'name_label'+str(i)
     list_names.append(new_name_label)
     setattr(self, list_names[i], QPushButton(str(ordered_names[i]),self))
     exec(f'self.name_label{i}.setGeometry(250,{y_axis_name},340,110)')
     exec(f'self.name_label{i}.clicked.connect(open_browser({i}))')
     y_axis_name= y_axis_name + 110

"i"는 변수를 못 찾을 수 있는 방법 버튼을 클릭하여 자체입니다.name_label 고 연결하는 기능을 전달 변수는"i". 때도 그것을 실행하는 오류를 얻을 수

image of error

그것 보다는 변수는"i"지에 의해 대체되는 하나의 번호를 범위로 표시되는"내가"대신 내가 편지하려고 전달됩니다.

pyqt5 python
2021-11-22 17:19:19
1

최고의 응답

1

지정하려면 기능과 함께 인수할 수 있습니다 다음 사용 lambda 을 만들지 않고 함수 인자

connect( lambda:open_browser(i) )

그러나 당신이 그것을 실행하는 경우에 반복해야 할 수 있습도 값을 복사 i 새로운 변수입니다.

connect( lambda x=i:open_browser(x) )

당신이 사용하는 경우 직접 i 모든 버튼 사용 참조하여 변수 i지에서 값 i -마지막으로 모든 버튼을 것 같은 값을 얻-마지막 값을 할당 i 에서 반복입니다.


코드 connect(open_browser(i)) 작품으로

result = open_browser(i) 
connect(result)

def open_browser() 을 사용하지 않는 return 그래서 그것은 자동으로 실행 return None 과 당신의 코드와 같은 작품

result = None
connect(result)

당신

connect(None)

나중에 오류를 보여줍 Unexpected type "NoneType"


BTW:

당신이 사용하는 경우 for루프를 만드는 개체 다음 더 나은 사용 list 을 계속 이러한 객체입니다. 그것은 필요가 없 exec() 고 그것이 될 수 있습니다 더 유용 후기 때문에 사용할 수 있습니다 다시 for루프를 확인하는 모든 개체로서 목록.

그것외에는 매우 이상한 누군가가 필요합 exec() 을 만드는 코드입니다.

self.buttons = []

for i in range(5):
     b = QPushButton(str(ordered_names[i]), self)
     b.setGeometry(250, y_axis_name, 340, 110)
     b.clicked.connect( lambda x=i:open_browser(x) )

     self.buttons.append( b )

     y_axis_name += 110     
2021-11-22 21:28:58

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................