2013-02-18 2 views
0

Я получил код ниже, который содержит список внутри холста, я пытаюсь поместить полосу прокрутки только внутри списка, но у меня есть полоса прокрутки, всегда установленная на всей формы. Можете ли вы помочь мне поместить полосу прокрутки только в список, а не на весь холст.Tkinter Python управляет полосой прокрутки внутри списка на холсте

def __init__(self): 
    self.form = Tk() 
    self.form.title("Admin"); 
    self.form.geometry('608x620+400+50') 
    self.form.option_add("*font",("Monotype Corsiva",13)) 
    self.form.overrideredirect(True) 
    self.form.resizable(width=FALSE, height=FALSE) 
    self.canvas = Canvas(self.form) 
    self.canvas.pack(expand=YES,fill=BOTH) 
    self.photo = PhotoImage(file='src/back3.gif') 
    self.canvas.create_image(-7,-8,image=self.photo,anchor=NW) 

    self.scrollbar = tk.Scrollbar(self.canvas, orient="vertical") 
    self.lb = tk.Listbox(self.canvas, width=78, height=15,yscrollcommand=self.scrollbar.set) 
    self.lb.place(relx=0.04,rely=0.17) 
    self.scrollbar.config(command=self.lb.yview) 
    self.scrollbar.pack(side="right", fill="none") 

ответ

1

Я предлагаю вам создать Frame обернуть Listbox и Scrollbar. Здесь это класс, который я написал, чтобы сделать то же самое, он не соответствует точно вашему коду - я использую grid() вместо pack() -, но вы получаете эту идею.

class ScrollableListbox(tk.Listbox): 
    def __init__(self, master, *arg, **key): 
     self.frame = tk.Frame(master) 
     self.yscroll = tk.Scrollbar(self.frame, orient=tk.VERTICAL) 
     tk.Listbox.__init__(self, self.frame, yscrollcommand=self.yscroll.set, *arg, **key) 
     self.yscroll['command'] = self.yview 

    def grid(self, *arg, **key): 
     self.frame.grid(*arg, **key) 
     tk.Listbox.grid(self, row=0, column=0, sticky='nswe') 
     self.yscroll.grid(row=0, column=1, sticky='ns') 
Смежные вопросы