Tkinter, problem when using 2 scrollbars

Jeff Epler jepler at unpythonic.net
Mon Oct 21 11:51:25 EDT 2002


You could do something like this:

    import Tkinter

    __all__ = ['Scrolled']

    def Scrolled(constructor, parent=None, *args, **kw):
        f = Tkinter.Frame(parent)
        w = constructor(f, *args, **kw)
        vs = Tkinter.Scrollbar(f, orient="v", command=w.yview)
        hs = Tkinter.Scrollbar(f, orient="h", command=w.xview)
        w.configure(yscrollcommand=vs.set, xscrollcommand=hs.set)

        f.grid_rowconfigure(0, weight=1)
        f.grid_columnconfigure(0, weight=1)

        w.grid(sticky="nsew", row=0, column=0)
        vs.grid(sticky="ns", row=0, column=1)
        hs.grid(sticky="ew", row=1, column=0)

        return w, f

    def test():
        t = Tkinter.Tk()
        w, f = Scrolled(Tkinter.Canvas, t, scrollregion=(0,0,800,800), bg="red")
        w.create_rectangle((100, 100, 700, 700), fill="white")
        f.pack(expand=1, fill="both")
        t.mainloop()

    if __name__ == '__main__': test()

> I guess I really want to know how to invoke constructors to unknown
> class types, where the class type is derived through a string.

Just pass the constructor, as in
    Scrolled(Tkinter.Canvas, ...)
You can use getattr if you really have to take a string as your input,
though:

    >>> Canvas = getattr(Tkinter, "Canvas")
    >>> print Canvas is Tkinter.Canvas
    True

Jeff




More information about the Python-list mailing list