belfrywidgets
belfrywidgets copied to clipboard
A collection of useful Tkinter widgets and megawidgets.
BelfryWidets
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.
CollapsiblePane
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()
LabelButton
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()
TabbedNoteBook
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()
Wizard
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)
ScrolledListbox
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()
ProgressBar
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()
ToolTip
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()