2013-05-01 3 views
1

저는 Python과 Tkinter에서 초보자입니다. 왼쪽 위 구석에 ​​이미지를 넣으려고하고 있지만 그럴 수는 없습니다. 나는 "정당화 (justify)"와 "앵커 (anchor)"속성으로 시도되었습니다. 여기 내 코드는 다음과 같습니다.Tkinter의 한 구석에 이미지로드

logo_upb = PhotoImage(file="upb.gif") 
label = Label(root, image=logo_upb, justify=LEFT) 
label.image = logo_upb 
label.place(bordermode=INSIDE, x=0, y=0) 
label.pack() 

나는 모든 해결책에 감사 할 것입니다.

답변

3

그리드 형상 관리자를 사용해 보셨습니까?

그리드 형상 관리자는 위젯을 2 차원 테이블에 배치합니다. 패커 대신 그리드 관리자를 사용하는 것이 훨씬 쉽다는 사실에 놀랄 것입니다.

그리드가 수행 할 수있는 것을 보여주기 위해이 예를 사용하십시오. 팩 관리자를 사용하여이 레이아웃을 만들 수도 있지만 추가 프레임 위젯이 많이 필요합니다.

tkinter grid example

그러나 그리드 형상 매니저와 당신은 또한 위젯은 하나 개 이상의 셀에 걸쳐 수 있습니다. columnspan 옵션을 사용하면 widget이 두 개 이상의 열을 포함하도록 할 수 있습니다. < checkbutton> 및 < image> 및 rowspan 옵션을 사용하면 이미지가 두 개 이상의 행에 걸쳐 나타날 수 있습니다. <>.

다음 코드는 표시 레이아웃을 생성 :

label1.grid(sticky=E) 
label2.grid(sticky=E) 

entry1.grid(row=0, column=1) 
entry2.grid(row=1, column=1) 

checkbutton.grid(columnspan=2, sticky=W) 

image.grid(row=0, column=2, columnspan=2, rowspan=2, 
      sticky=W+E+N+S, padx=5, pady=5) 

button1.grid(row=2, column=2) 
button2.grid(row=2, column=3) 

그래서 당신의 대답은 row = 0column = 1 것 즉 그리드 < 라벨 1>의 위치에 동일합니다. Tkinter는 GIF를 기본적으로 지원하므로 추가 라이브러리가 필요하지 않습니다.

import Tkinter as tk 

root = tk.Tk() 
img = tk.PhotoImage(file ="somefile.gif") 
panel = tk.Label(root, image = img) 
panel.grid(row=0,column=1) 
root.mainloop() 

내 개인적인 추천은 파이썬 이미징 라이브러리 (PIL) 링크를 사용 : http://www.pythonware.com/products/pil/ 게임에 더 많은 지원되는 파일 형식을 추가. 지원되는 파일 형식 목록 : http://infohost.nmt.edu/tcc/help/pubs/pil/formats.html

이 예제에서는 tkinter에서 기본적으로 지원되지 않는 .jpg 파일 형식을 사용했으며 PIL을 사용하기 때문에 완벽하게 작동합니다.

import Tkinter as tk 
from PIL import ImageTk,Image 

root = tk.Tk() 
img = ImageTk.PhotoImage(Image.open("somefile.jpg")) 
panel = tk.Label(root, image = img) 
panel.grid(row=0,column=1) 
root.mainloop() 

경고 : 그리드를 혼합하지 않고 동일한 마스터 창에 팩 마십시오. Tkinter는 평생토록 행복하게 두 관리자가 만족하는 솔루션을 협상하려고 노력할 것입니다. 기다리는 대신 응용 프로그램을 종료하고 코드를 다시 살펴보십시오. 일반적인 실수는 일부 위젯에 잘못된 부모를 사용하는 것입니다.

LINK : http://effbot.org/tkinterbook/grid.htm

+0

예제에서 GIF를 표시하는 경우 PIL이 필요하지 않습니다. TKinter는 GIF를 기본적으로 지원합니다. 그렇지 않으면 우수 답변! –

+0

Personaly 필자는 항상 PIL (btw. 훌륭한 라이브러리)을 사용합니다. 예를 들어 "somefile.jpg"또는 "somefile.png"등이있을 수 있으며, 지원되는 파일 형식의 해상도를 정의하는 데 완벽하게 작동합니다. [link ] (http://infohost.nmt.edu/tcc/help/pubs/pil/formats.html)이 예제를 더 잘 이해하기 위해 내 대답을 편집 할 것입니다 ... –

0

문제에 대한 구체적인 이유는 당신이 pack()를 호출 할 때 멀리 모든 배치를 던져 후, 다소간 제대로 자리를 사용하는 것입니다. place, packgrid은 무료가 아닙니다. 특정 위젯을 관리하는 데 하나만 사용해야합니다.

+0

당신의 대답은 thx입니다. 나는 내 실수를 이해했다. –