2013-04-21 2 views
2

저는 프로그래밍에 익숙하지 않아서 새로운 질문을 던지기 쉽습니다. 제목에서 말한 것처럼 나는 특정 루프의 각 픽처에 대한 그림 단추 위젯을 만드는 for 루프를 프로그램에 적용하려고합니다. 이것은 내가 지금까지 가지고있는 것입니다 :Python-Tkinter, for-loop를 그림으로 만든 버튼으로 만들었습니다.

이제는 두 개의 위젯, 아무것도 표시하지 않는 레이블과 Hello를 표시하는 버튼이 있습니다. 셸에서는 drink1.gif라고 말합니다. 그게 표준 파이썬 폴더의 유일한 gif 파일이기 때문입니다 ...

무엇이 잘못 했습니까?

답변

3
  1. 경로에서 이미지를 만들려면 PhotoImage(file='path_to_file')을 사용하십시오.
  2. PhotoImage 개체가 파이썬에 의해 가비지 수집 될 때 레이블이 지워집니다. l1.image = drink : 당신은 어딘가에 drink 객체에 대한 참조를 저장 없어야합니다
    http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm
  3. widget.pack() 방법 반환 아무것도.

import tkinter 
from tkinter import ttk 
from tkinter import PhotoImage 
import os 

root = tkinter.Tk() 
list_files = os.listdir(".") 
for path in list_files: 
    if path.endswith(".gif"): 
     drink = PhotoImage(file=path) 
     b1 = ttk.Button(root, image=drink, text="Hello", compound="right") 
     b1.pack() 
     l1 = ttk.Label(root, image=drink) 
     l1.image = drink 
     l1.pack() 

root.mainloop() 
+0

나에게 새로웠다 감사합니다! 고맙습니다! 이 패널은 대단해 !! 텍스트를 그림과 함께 붙이고 표시하는 방법이 있습니까? 설명 같은 것? 아니면 그냥 표시 할 텍스트로 파일의 이름을 지정해야합니까? 가비지 수집에 대한 설명이 있습니까? 나는 그것을 충분히 얻었는지 확실하지 않다. 나는 그것이 중요하다고 생각한다;) – user2304540

+0

나는 이미지에 텍스트를 첨부하는 ** 일반적인 ** 방법을 모른다. 텍스트 파일에 설명을 저장할 수 있습니다 : my_image.gif와 my_image.txt. – kalgasnik

+0

가비지 수집 정보 : 루프에 5 개의 이미지를로드하면 (참조를 저장하지 않고) 마지막 이미지 만 표시됩니다. – kalgasnik

0

나는 Zetcode 자습서에 따라 self.pack을 실행해야한다고 생각합니다.

+0

당신이이 튜토리얼은 완벽하게 작동 – user2304540

2

PhotoImage(file) 이미지를 만들고 이름을 "drink1.gif"라고 지정하면 반환됩니다. 실제로 이미지에 파일을로드하려면 PhotoImage(file = file)이 필요합니다.