2014-04-20 3 views
0

나는 뭔가 문제가있어, 어떻게 할 수 있을지 모르겠다.발전기/목록 내력과 함께이 출력을 얻으시겠습니까?

글쎄, 얼마나 많은 파일 (이 경우 영화)이 디렉토리에 있는지에 맞춰진 버튼이있는 동적 인 형태를 만들고 있습니다.

내가 지금까지 가지고있다 :

my_form = form.Form(
    form.Button("btn", id="btnA", value="A", html="Movie1", class_="btnA") 
    form.Button("btn", id="btnB", value="B", html="Movie2", class_="btnB") 
) 

당신은 영화 대신 볼 수 있듯이 :

path="C:\\Users\\User\\Desktop\\test\\" # insert the path to the directory of interest 
movies = [] 
dirList=os.listdir(path) 

for fname in dirList: # loops through directory specified 
    print fname # prints file name 
    movies.append(fname) # adds the file name to list 

my_form = form.Form([form.Button("btn", id="btn" + movies[i], value = i, html=movies[i], class_="btn" +movies[i]) for i in range(len(movies))]) 

는 그러나, 나는이 목록의 이해/발전기는이 같은 my_form 보이는 무언가를 만들고 싶어 이름이 ID 인 경우 btnA 또는 btnB입니다.

그러면 어떻게 출력을 생성 할 수 있습니까?

from string import ascii_uppercase 

buttons = [form.Button("btn", id="btn{0}".format(char), value=char, 
         html=movie, class_="btn{0}".format(char)) 
      for char, movie in zip(ascii_uppercase, movies)] 

my_form = form.Form(buttons) 

movies의 각 항목에 레이블을 string.ascii_uppercase에서 문자를 사용

+1

당신의 들여 쓰기를 검토하십시오. – jonrsharpe

+0

코드를 편집했습니다. – rtharper

답변

1

난 당신이 그런 짓을 할 생각합니다.

+0

이것은 완벽하게 작동했습니다. 고맙습니다! – rtharper

+0

문제 없습니다. 26 개 이상의 동영상이있는 경우,'zip'은 자동으로 처음 26 개만 제공합니다. 이 경우를 고려하고 적절히 업데이트 할 수 있습니다. – jonrsharpe

1

정확하게 이해하면 동영상 색인에 따라 ID를 btn + 문자로 지정 하시겠습니까?

def letterForIndex(idx): 
    return chr(ord('A')+idx) 

그래서 당신이 할 것 :

이 코드를 사용할 수 있습니다

my_form = form.Form([form.Button("btn", id="btn" + letterForIndex(i), 
value = letterForIndex(i), html=movies[i], class_="btn" +letterForIndex(i)) for i in range(len(movies))])