홈>
각각 동일한 데이터가있는 여러 드롭 다운 목록을 생성하려고하지만 다른 변수로 사용됩니다. 현재 내 코드는 모든 드롭 다운 목록을 생성합니다. 드롭 다운 목록에서 값을 변경하려고 할 때마다 값이 열린 위치가 아닌 마지막 드롭 다운 목록에 값이 할당됩니다.
목록을 사용하지 않고 시작한 다음 코드가 제대로 작동했지만 매우 비효율적이었습니다. 따라서 반복적 인 부분을 줄이고 일부 목록을 작성하고 싶었습니다. 나는 다른 "람다"진술을 가지고 놀았으며 결함이
btn[i].bind(on_release=lambda btn=btn[i]: dropdown[i].select(btn.text))
에 있다고 믿습니다.
코드 줄 (전적으로 잘못 될 수 있습니다). 내가 작성한 코드로 람다 함수를 올바르게 설정했는지 확실하지 않습니다.
first_row
Excel 파일의 데이터 목록입니다.
default_list
임의의 문자열 목록입니다
dropdown = [DropDown() for x in range (len(default_list))]
btn = [Button() for x in range (len(default_list))]
main_btn = [Button() for x in range (len(default_list))]
col_found = GridLayout(cols = 1)
## create buttons for dropdown lists with excel data
for index in range(0, len(first_row)):
for i in range (0, len(default_list)):
btn[i] = Button(text=str(first_row[index])+'%d'%i, size_hint_y=None, height=24, color = (1,1,1,1))
btn[i].bind(on_release=lambda btn=btn[i]: dropdown[i].select(btn.text))
dropdown[i].add_widget(btn[i])
## set up main buttons with dropdown lists and add them to the pop up
for i in range (0, len(default_list)):
main_btn[i] = Button(text = "default%d"%i, on_release=dropdown[i].open, color = (1,1,1,1))
dropdown[i].bind(on_select=lambda instance, x=dropdown[i]: setattr(main_btn[i], 'text', x))
col_found.add_widget(main_btn[i])
예상 : 드롭 다운에서 값을 선택할 때 해당 "버튼"에 값을 할당해야합니다
실제 결과 : 드롭 다운에서 값을 선택하면 가장 마지막 버튼에 값이 할당됩니다. 더 나은 그림을 보려면 다음 이미지를 참조하십시오. 모든 드롭 다운 목록 잘못된 장소에 할당- 답변 # 1
관련 자료
- multithreading - 동일한 유형을 동시에 처리하지 못하도록 MutEx를 사용하는 동안 다중 스레드 목록 반복
- python - fread ()를 사용할 때 문자 당 반복 루프
- html - FOR EACH를 사용하는 하나의 열로 동적 드롭 다운이있는 PHP ECHO 테이블
- lambda - Java 스트림 API를 사용하여 목록 목록에서 총 금액을 추가하는 방법은 무엇입니까?
- ruby - rspec을 사용하여 each 반복 블록 내부에있는 stdout을 테스트하는 방법은 무엇입니까?
- elixir - 단점 연산자 "|"사용 키워드 목록
- loops - __next__ python을 사용하여 두 목록을 dict로 반복하는 방법
- Sorting lists in list by length using bubble sort - 버블 정렬을 사용하여 목록의 목록을 길이별로 정렬 - haskell
- python - 목록 이해를 사용하여 목록을 값으로 사용하는 사전 빌드
- Python에서 이전 Macdonald 용 목록 및 루프 사용
관련 질문
- python : 특정 패키지를 설치하지 못하는 pip: 오류 1(kivy)
- python : ModuleNotFoundError: 'kivymd.uix.pickers'라는 모듈이 없습니까?
- Python kivy 위젯의 최대/최소 크기를 설정하는 방법
- python : 클래스 이름으로 앱을 작성하는 것은 무엇입니까?
- python : Kivy: 누를 때 TwoLineListItem 텍스트 변경
- python : Kivy에서 버튼의 바인딩이 혼동됨
- python : KivyMD 도구 모음에 right_action_items를 추가할 수 없습니다.
- python : {CRITICAL] [Window}가치 있는 Window 공급자를 찾을 수 없음
해결책은 메인 버튼을 만들고
main.py 출력on_release
를 바인딩하는 것입니다.DropDown
를 생성하고 채우고 여는 이벤트 목록.