2013-06-13 7 views
0

스크롤 막대 프레임과 함께 매우 긴 레이블을 표시하려고합니다.Python Tkinter Double Scrollbar

어떤 이유로 든 각 레이블의 너비와 높이를 고정 된 값으로 설정해야합니다.

그러나이 경우 label textlabel widthlabel height을 초과하면 레이블의 일부가 표시되지 않습니다.

그래서 레이블 폭과 높이보다 긴 레이블 텍스트가있는 각 레이블에 다른 스크롤 막대를 추가하고 싶습니다. 여기에 내가 시도 것입니다 : 현재

from Tkinter import* 
def myfunction(event): 
     canvas1.configure(scrollregion=canvas1.bbox("all"),width=300,height=400) 
root=Tk() 
root.wm_geometry("%dx%d+%d+%d" % (500, 500, 5, 5)) 

data1="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 

frame1=Frame(root) 
frame1.place(x=20,y=20) 
canvas1=Canvas(frame1) 
frame2=Frame(canvas1,bg='white',relief=GROOVE,bd=0,width=1230,height=400) 
scrollbar1=Scrollbar(frame1,orient="vertical",command=canvas1.yview) 
canvas1.configure(yscrollcommand=scrollbar1.set) 
scrollbar1.pack(side="right",fill="y") 
canvas1.pack(side="left") 
canvas1.create_window((0,0),window=frame2,anchor='nw') 
frame2.bind("<Configure>",myfunction) 

for i in range(10): 
    Label(frame2,text=data1,width=30,height=4,bg='white',relief=GROOVE,bd=1,wraplength=200,anchor=NW,justify=LEFT).grid(row=i,column=1) 

root.mainloop() 

, 나는 레이블 무리가 부착 된 스크롤이있는 캔버스에 격자 방법을 사용하여 표시합니다. 보시다시피, "aaaa ..."데이터가 표시되지 않습니다. 어쨌든 각 라벨 상자에 스크롤바를 추가 할 수 있습니까? 레이블 상자의 크기를 변경하고 싶지 않습니다.

레이블 대신 Text box을 사용해야합니까?

--EDIT--

이 내가 시도 것입니다 :

from Tkinter import* 
def myfunction(event): 
     canvas1.configure(scrollregion=canvas1.bbox("all"),width=400,height=200) 
def myfunctionx(event): 
     canvas1x.configure(scrollregion=canvas1x.bbox("all"),width=100,height=50) 
root=Tk() 
root.wm_geometry("%dx%d+%d+%d" % (500, 500, 5, 5)) 

data1="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 

frame1=Frame(root) 
frame1.place(x=20,y=20) 
canvas1=Canvas(frame1) 
frame2=Frame(canvas1,bg='white',relief=GROOVE,bd=0,width=1230,height=400) 
scrollbar1=Scrollbar(frame1,orient="vertical",command=canvas1.yview) 
canvas1.configure(yscrollcommand=scrollbar1.set) 
scrollbar1.pack(side="right",fill="y") 
canvas1.pack(side="left") 
canvas1.create_window((0,0),window=frame2,anchor='nw') 
frame2.bind("<Configure>",myfunction) 

frame1x=Frame(frame1,bg='green',width=100,height=50,bd=1,relief=GROOVE) 
frame1x.place(x=10,y=20) 
canvas1x=Canvas(frame1x,bg='yellow',relief=GROOVE,bd=0,width=100,height=50) 
frame2x=Frame(canvas1x,bg='white',relief=GROOVE,bd=0,width=100,height=50) 
scrollbar1x=Scrollbar(frame1x,orient="vertical",command=canvas1x.yview) 
canvas1x.configure(yscrollcommand=scrollbar1x.set) 
scrollbar1x.pack(side="right",fill="y") 
canvas1x.pack(side="left") 
canvas1x.create_window((0,0),window=frame2x,anchor='nw') 
frame2x.bind("<Configure>",myfunctionx) 

for i in range(10): 
     Label(frame2x,text=data1,width=20,height=4,bg='white',relief=GROOVE,bd=1,wraplength=200,anchor=NW,justify=LEFT).grid(row=i,column=1) 


root.mainloop() 

하지만 그 대신 각 레이블에 스크롤 막대를 추가, 그것은 1 스크롤로 모든 라벨을 넣습니다. 각 라벨 상자에 대해 1 스크롤바를 가질 수있는 방법이 있습니까? (루프를 사용하여 여러 레이블 상자를 만드는 것으로 가정합니다.)

+0

Tkinter에서 제공하는 [스크롤 가능한 위젯] (http://effbot.org/zone/tkinter-scrollbar-patterns.htm) 중 각 레이블을 '목록 상자'로 만들 것을 제안합니다. 그러나 그것들은'wraplength' 옵션을 지원하지 않으므로 잠재적으로 당신은 각각에 수평 스크롤바와 수직 스크롤바를 부착해야합니다. – martineau

+0

또 다른 가능성은 스크롤 가능한 ['LabelFrame'] (http://stackoverflow.com/questions/7113937/how-do-you-create-a-labelframe-with-a-scrollbar-in-tkinter) 일 수 있습니다. – martineau

답변

0

레이블을 스크롤하는 데 스크롤 막대를 사용할 수 없습니다.

스크롤 할 수있는 텍스트가 필요한 경우 엔트리 또는 텍스트 위젯을 사용하십시오.

+0

감사합니다. Text 위젯 (state = DISABLED)을 사용하여 작동하도록했습니다. –