-2
from tkinter import *
from tkinter import ttk 

class uFrame(Frame):
    def __init__(self,parent, *args, **kw):
        Frame.__init__(self,parent,*args,**kw)
        sb = Scrollbar(self,orient=VERTICAL).pack(fill=Y,side=RIGHT)


main = Tk()
main.geometry('400x400')

#main
a = uFrame(main,bg="black")
#Top bar
b = Frame(main,bg="green")

b.pack(fill=X,side=TOP,ipady = 15)
a.pack(fill=BOTH,side=TOP,expand = YES)
# a.update()

bLabel = Label(b,text="User",bg="red").pack(side=LEFT,anchor = S)
cLabel = Label(b,text="HELLO",bg="blue").pack(side=RIGHT,ipadx = 10,anchor = S)
cLabel = Label(b,text="HELLO",bg="white").pack(side=RIGHT, ipadx = 10,anchor = S)

for i in range(10):
    Frame(a,height=50,bd = 5,bg="yellow",highlightbackground="red", highlightcolor="red", highlightthickness=1).pack(side=TOP,fill=X)


main.mainloop()   

enter image description here

Hello! I am making a userList of Messenger. UserList shows userInfo through Frame. because a Frame include Username, UserImage and UserStatus.

I had made until scrollbar for userList Frame. and seperated Frame of userInfo. but I can't find how to bind frame and scrollbar.

please help me...

3
  • 2
    Does stackoverflow.com/questions/16188420/… help? Commented May 15, 2020 at 3:26
  • I read that previously. The post use a Canvas. Do i have to use canvas? Commented May 15, 2020 at 3:30
  • I review link you wrote. I DO!! Thank you sir! Commented May 15, 2020 at 3:48

1 Answer 1

-1
from tkinter import *
from tkinter import ttk 

class uFrame(Frame):
    def __init__(self, parent, *args, **kw):
        Frame.__init__(self, parent, *args, **kw)            

        # create a canvas object and a vertical scrollbar for scrolling it
        vscrollbar = Scrollbar(self, orient=VERTICAL)
        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
        canvas = Canvas(self,bg="black", bd=0, highlightthickness=0,yscrollcommand=vscrollbar.set)
        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
        vscrollbar.config(command=canvas.yview)

        # reset the view
        canvas.xview_moveto(0)
        canvas.yview_moveto(0)

        # create a frame inside the canvas which will be scrolled with it
        self.interior = interior = Frame(canvas)
        interior_id = canvas.create_window(0, 0, window=interior,
                                           anchor=NW)

        # track changes to the canvas and frame width and sync them,
        # also updating the scrollbar
        def _configure_interior(event):
            # update the scrollbars to match the size of the inner frame
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != canvas.winfo_width():
                # update the canvas's width to fit the inner frame
                canvas.config(width=interior.winfo_reqwidth())
        interior.bind('<Configure>', _configure_interior)

        def _configure_canvas(event):
            if interior.winfo_reqwidth() != canvas.winfo_width():
                # update the inner frame's width to fill the canvas
                canvas.itemconfigure(interior_id, width=canvas.winfo_width())
        canvas.bind('<Configure>', _configure_canvas)


main = Tk()
main.geometry('400x400')

#main
a = uFrame(main,bg="black")
#Top bar
b = Frame(main,bg="green")

b.pack(fill=X,side=TOP,ipady = 15)
a.pack(fill=BOTH,side=TOP,expand = YES)
# a.pack()
# a.update()

bLabel = Label(b,text="User",bg="red").pack(side=LEFT,anchor = S)
cLabel = Label(b,text="HELLO",bg="blue").pack(side=RIGHT,ipadx = 10,anchor = S)
cLabel = Label(b,text="HELLO",bg="white").pack(side=RIGHT, ipadx = 10,anchor = S)


frames = []

for i in range(10):
    frames.append(Frame(a.interior,height=50,bd = 5,bg="yellow",highlightbackground="red", highlightcolor="red", highlightthickness=1))
    frames[-1].pack(fill=X)
# for i in range(10):
#     Frame(a.canvas,height=50,bd = 5,bg="yellow",highlightbackground="red", highlightcolor="red", highlightthickness=1).pack(side=TOP,fill=X)


main.mainloop()   

I Solved the problem. helped here -> Tkinter Scrollbard for Frame

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.