2014-01-29 4 views
1

Tkinter를 사용하여 UI를 만들려고하는데 세 개를 넣는데 문제가 있습니다 ScrollbarsLabelFrames 안에 넣으십시오.Tkinter - 각 LabelFrame에 스크롤바 추가

나는 self.que_lt_ver = ['CARGA', 'MAQUINA', SOLTAR']이라는 이름을 가진 self.que_lt_ver이라는 배열을 가지고 있습니다. 나는 LabelFrames 3 개를 만들고 각각은 Scrollbar으로 만들고 싶습니다. 나는 그것을 위해 Canvas을 만들었습니다,하지만 마지막 윈도우 스크롤을 보여줍니다

enter image description here

그래서 내가 어떻게 각 LabelFrame에 대한 스크롤을 표시하는 코드를 수정할 수 있습니까? 사전에

def createBox(self, window): 
    for i in xrange(len(self.que_lt_ver)): 
     mybox = LabelFrame(window, padx=5, pady=4) 
     mybox.grid(row=i, column=0) 
     self.createWindow(mybox, self.que_lt_ver[i], i) 

def createWindow(self, box, lt_actual, i): 
    self.canvas = Canvas(box, borderwidth=0) 
    frame = Frame(self.canvas) 
    vsb = Scrollbar(box, orient="vertical", command=self.canvas.yview) 
    self.canvas.configure(yscrollcommand=vsb.set, width=1200, heigh=80)  

    vsb.pack(side="right", fill="y") 
    self.canvas.pack(side="left", fill="both", expand=True) 
    self.canvas.create_window((4,4), window=frame, anchor="nw", tags="frame") 

    frame.bind("<Configure>", self.OnFrameConfigure) 

    self.fillWindow(lt_actual, frame) 

def fillWindow(self, lt_ver, frame): 
    piezas = ['time: 39.41597 BT: 3025.5923', 'time: 21.637377 BT: 3025.5923', 'time: 52.185192 BT: 3025.5923', 'time: 57.804752 BT: 3025.5923', 'time: 47.700306 BT: 3025.5923', 'time: 21.1827 BT: 3025.5923', 'time: 35.244156 BT: 3025.5923', 'time: 47.26321 BT: 3025.5923'] 
    fechaentrada = ['26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '21-02-2014'] 
    fechasalida = ['26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '21-02-2014'] 
    horacomienzo = ['12:00', '12:39', '01:00', '01:52', '02:49', '03:36', '03:57', '12:00'] 
    horafinal = ['12:39', '01:00', '01:52', '02:49', '03:36', '03:57', '04:32', '12:47'] 
    ide = [0, 1, 2, 3, 4, 5, 6, 7] 

    self.idpieza_w1 = Label(frame, text = "Id", width=20, font="bold") 
    self.idpieza_w1.grid(row=0, column=0) 
    self.pieza_w1 = Label(frame, text = "Pieza", width=20, font="bold") 
    self.pieza_w1.grid(row=0, column=1) 
    self.fechainiciopromo_w1 = Label(frame, text = "Dia inicio " + str(lt_ver), width=20, font="bold") 
    self.fechainiciopromo_w1.grid(row=0, column=2) 
    self.horainiciopromo_w1 = Label(frame, text = "Hora inicio " + str(lt_ver), width=20, font="bold") 
    self.horainiciopromo_w1.grid(row=0, column=3) 
    self.fechafinalpromo_w1 = Label(frame, text = "Dia fin carga " + str(lt_ver), width=20, font="bold") 
    self.fechafinalpromo_w1.grid(row=0, column=4) 
    self.horafinalpromo_w1 = Label(frame, text = "Hora final carga " + str(lt_ver), width=20, font="bold") 
    self.horafinalpromo_w1.grid(row=0, column=5) 

    for i in xrange(len(piezas)): 
     self.idtextos_w1 = Label(frame, text=str(ide[i])) 
     self.idtextos_w1.grid(row=i+1, column=0) 
     self.textos_w1 = Label(frame, text=str(piezas[i])) 
     self.textos_w1.grid(row=i+1, column=1) 
     self.fechainiciogrid_w1 = Label(frame, text=str(fechaentrada[i])) 
     self.fechainiciogrid_w1.grid(row=i+1, column=2) 
     self.horainiciogrid_w1 = Label(frame, text=str(horacomienzo[i])) 
     self.horainiciogrid_w1.grid(row=i+1, column=3) 
     self.fechafinalgrid_w1 = Label(frame, text=str(fechasalida[i])) 
     self.fechafinalgrid_w1.grid(row=i+1, column=4) 
     self.horafinalgrid_w1 = Label(frame, text=str(horafinal[i])) 
     self.horafinalgrid_w1.grid(row=i+1, column=5) 

def OnFrameConfigure(self, event): 
    self.canvas.configure(scrollregion=self.canvas.bbox("all")) 

감사 :

창문이 생성 된 코드의 일부이다.

+0

안녕하세요 브라이언 :

내 솔루션 (나는 모든 객체 물건을 제거)를 참조하십시오. 문제는'createWindow' 함수 또는'OnFrameConfigure' 함수에 있습니다. 그 코드를 정확히 수정하여 각각의 'LabelFrame'에 대해 세 가지 다른 Scroll을 보여줄 수있는 방법을 모른다. 미리 감사드립니다. –

답변

2

3 캔버스를 만들지 만 모두 self.canvas에 설정됩니다.

그래서 self.canvas는 마지막 것에 해당합니다. 세 번 구성하지만 두 번 먼저 구성하지 마십시오.

from Tkinter import * 

def createBox(window): 
    list_ = ['CARGA', 'MAQUINA', 'SOLTAR'] 
    for i in xrange(3): 
     mybox = LabelFrame(window, padx=5, pady=4) 
     mybox.grid(row=i, column=0) 
     createWindow(mybox, list_[i], i) 

def createWindow(box, lt_actual, i): 
    canvas = Canvas(box, borderwidth=0) 
    frame = Frame(canvas) 
    vsb = Scrollbar(box, orient="vertical", command=canvas.yview) 
    canvas.configure(yscrollcommand=vsb.set, width=1200, heigh=80)  

    vsb.pack(side="right", fill="y") 
    canvas.pack(side="left", fill="both", expand=True) 
    canvas.create_window((4,4), window=frame, anchor="nw", tags="frame") 

    # be sure that we call OnFrameConfigure on the right canvas 
    frame.bind("<Configure>", lambda event, canvas=canvas: OnFrameConfigure(canvas)) 

    fillWindow(lt_actual, frame) 

def fillWindow(lt_ver, frame): 
    piezas = ['time: 39.41597 BT: 3025.5923', 'time: 21.637377 BT: 3025.5923', 'time: 52.185192 BT: 3025.5923', 'time: 57.804752 BT: 3025.5923', 'time: 47.700306 BT: 3025.5923', 'time: 21.1827 BT: 3025.5923', 'time: 35.244156 BT: 3025.5923', 'time: 47.26321 BT: 3025.5923'] 
    fechaentrada = ['26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '21-02-2014'] 
    fechasalida = ['26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '26-02-2014', '21-02-2014'] 
    horacomienzo = ['12:00', '12:39', '01:00', '01:52', '02:49', '03:36', '03:57', '12:00'] 
    horafinal = ['12:39', '01:00', '01:52', '02:49', '03:36', '03:57', '04:32', '12:47'] 
    ide = [0, 1, 2, 3, 4, 5, 6, 7] 

    idpieza_w1 = Label(frame, text = "Id", width=20, font="bold") 
    idpieza_w1.grid(row=0, column=0) 
    pieza_w1 = Label(frame, text = "Pieza", width=20, font="bold") 
    pieza_w1.grid(row=0, column=1) 
    fechainiciopromo_w1 = Label(frame, text = "Dia inicio " + str(lt_ver), width=20, font="bold") 
    fechainiciopromo_w1.grid(row=0, column=2) 
    horainiciopromo_w1 = Label(frame, text = "Hora inicio " + str(lt_ver), width=20, font="bold") 
    horainiciopromo_w1.grid(row=0, column=3) 
    fechafinalpromo_w1 = Label(frame, text = "Dia fin carga " + str(lt_ver), width=20, font="bold") 
    fechafinalpromo_w1.grid(row=0, column=4) 
    horafinalpromo_w1 = Label(frame, text = "Hora final carga " + str(lt_ver), width=20, font="bold") 
    horafinalpromo_w1.grid(row=0, column=5) 

    for i in xrange(len(piezas)): 
     idtextos_w1 = Label(frame, text=str(ide[i])) 
     idtextos_w1.grid(row=i+1, column=0) 
     textos_w1 = Label(frame, text=str(piezas[i])) 
     textos_w1.grid(row=i+1, column=1) 
     fechainiciogrid_w1 = Label(frame, text=str(fechaentrada[i])) 
     fechainiciogrid_w1.grid(row=i+1, column=2) 
     horainiciogrid_w1 = Label(frame, text=str(horacomienzo[i])) 
     horainiciogrid_w1.grid(row=i+1, column=3) 
     fechafinalgrid_w1 = Label(frame, text=str(fechasalida[i])) 
     fechafinalgrid_w1.grid(row=i+1, column=4) 
     horafinalgrid_w1 = Label(frame, text=str(horafinal[i])) 
     horafinalgrid_w1.grid(row=i+1, column=5) 

def OnFrameConfigure(canvas): 
    canvas.configure(scrollregion=canvas.bbox("all")) 


tk = Tk() 

createBox(tk) 

tk.mainloop() 
+0

정말 고마워요. 너는 나의 영웅이야. –