A collection of useful Tkinter widgets and mega-widgets.
This package contains:
- CollapsiblePane:
- A LabelFrame derivitive that can be collapsed by clicking on the label.
- LabelButton:
- A Label derivitive that is clickable like a button, with rollovers and focus.
- TabbedNoteBook:
- A notebook that provides Safari-style tabs, with optional close-buttons per tab.
- Wizard:
- A wizard dialog with Prev/Next/Finish/Cancel buttons, which progresses through multiple panes of widgets.
- ScrolledListbox:
- A Listbox widget with scrollbars, similar to the ScrolledText widget.
- ProgressBar:
- A rounded progress bar, similar in function to tkinter.ttk.Progressbar, except that the colors are more controllable on all platforms.
- ToolTip:
- Attaches a tooltip to a widget, so that hovering over that widget will show a small tooltip message.
Example code:
from belfrywidgets import CollapsiblePane tk = Tk() cp = CollapsiblePane( tk, text="Click Here to Collapse", visible=True, collapsible=True, ) cp.pack(side=TOP, fill=BOTH, expand=1, padx=5, pady=5) lbl1 = Label(cp.holder, text="This is a label.") lbl2 = Label(cp.holder, text="This is another label.") lbl1.pack(side=TOP) lbl2.pack(side=TOP) tk.mainloop()
Example code:
from belfrywidgets import LabelButton tk = Tk() b1 = LabelButton(tk, text="Button 1", command=lambda: print("B1!")) b2 = LabelButton(tk, text="Button 2", command=lambda: print("B2!")) b1.pack(side=TOP, padx=20, pady=20) b2.pack(side=TOP, padx=20, pady=20) tk.mainloop()
Example code:
from belfrywidgets import TabbedNoteBook def _closeit(name): print("Close tab %s" % name) return True # Return True to allow closing tab. tk = Tk() tnb = TabbedNoteBook(tk, width=640, height=480) tnb.pack_propagate(False) # Keep noteboox from shrinking to fit contents. tnb.pack(side=TOP, fill=BOTH, expand=1) pane1 = tnb.add_pane( 'one', 'First Pane', closecommand=lambda: _closeit('one') ) lbl1 = Label(pane1, text="This is a label.") lbl1.pack(side=TOP, fill=BOTH, expand=1) pane2 = tnb.add_pane( 'two', 'Second Pane', closecommand=lambda: _closeit('two') ) lbl2 = Label(pane2, text="This is a second label.") lbl2.pack(side=TOP, fill=BOTH, expand=1) pane3 = tnb.add_pane( 'three', 'Third Pane', closecommand=lambda: _closeit('three') ) lbl3 = Label(pane3, text="This is a third label.") lbl3.pack(side=TOP, fill=BOTH, expand=1) lbl = tnb.pane_label('two') lbl.config(text="Tab 2") tk.mainloop()
Example code:
from belfrywidgets import Wizard root = Tk() wiz = Wizard( width=640, height=480, cancelcommand=lambda: print("Cancel"), finishcommand=lambda: print("Finish"), ) def disable_finish(): wiz.set_finish_enabled(False) def enable_finish(): wiz.set_finish_enabled(True) pane1 = wiz.add_pane('one', 'First', entrycommand=disable_finish) lbl1 = Label(pane1, text="This is the first pane.") lbl1.pack(side=TOP, fill=BOTH, expand=1) pane2 = wiz.add_pane( 'two', 'Second') lbl2 = Label(pane2, text="This is the second pane.") lbl2.pack(side=TOP, fill=BOTH, expand=1) pane3 = wiz.add_pane( 'three', 'Third', entrycommand=enable_finish, prevcommand=disable_finish ) lbl3 = Label(pane3, text="This is the third pane.") lbl3.pack(side=TOP, fill=BOTH, expand=1) # wiz.show_pane('two') # wiz.del_pane('two') # wiz.set_prev_enabled(True) # wiz.set_next_enabled(True) root.wm_withdraw() root.wait_window(wiz)
Example code:
from belfrywidgets import Wizard root = Tk() lbox = ScrolledListbox( root, horiz_scroll=False, vert_scroll=True, width=30, height=15, ) lbox.pack(side=TOP, fill=BOTH, expand=1) for i in range(1,51): lbox.insert(END, "Item %d" % i) tk.mainloop()
Indeterminate mode example code:
from belfrywidgets import ProgressBar, INDETERMINATE tk = Tk() tk.config(background="#446") pb = ProgressBar( tk, mode=INDETERMINATE, bordercolor="#446", foreground="red", background="cyan" ) pb.pack(fill=BOTH, expand=1, padx=10, pady=10) pb.start() tk.after(20000, pb.stop) tk.mainloop()
Determinate mode example code:
from belfrywidgets import ProgressBar, DETERMINATE tk = Tk() tk.config(background="#446") v = DoubleVar() v.set(0.0) pb = ProgressBar( tk, mode=DETERMINATE, maximum=200, variable=v, bordercolor="#446", foreground="red", background="cyan" ) pb.pack(fill=BOTH, expand=1, padx=10, pady=10) def inc(): v.set(v.get()+1) if v.get() < 200: tk.after(100, inc) inc() tk.mainloop()
To provide a tooltip when your mouse hovers over a widget, use the ToolTip()
function like this:
from belfrywidgets import ToolTip tk = Tk() w = Entry(tk) w.pack(side=TOP) ToolTip(w, "This is an entry widget.") tk.mainloop()
To provide a tooltip when your mouse hovers over a specific tagged section of text
in a Text widget, use the ToolTip()
function with the tag
keyword like this:
from belfrywidgets import ToolTip tk = Tk() txt = Text(tk, borderwidth=2, relief="sunken") txt.pack(side=TOP) txt.insert(END, "Tagged Text\n", "tipped") txt.insert(END, "Untagged Text\n") ToolTip(txt, "This is tooltip tagged text in a text widget.", tag="tipped") tk.mainloop()