"""A Ttk Notebook with close buttons. Based on an example by patthoyts, http://paste.tclers.tk/896 """ import os import Tkinter import ttk root = Tkinter.Tk() imgdir = os.path.join(os.path.dirname(__file__), 'img') i1 = Tkinter.PhotoImage("img_close", file=os.path.join(imgdir, 'close.gif')) i2 = Tkinter.PhotoImage("img_closeactive", file=os.path.join(imgdir, 'close_active.gif')) i3 = Tkinter.PhotoImage("img_closepressed", file=os.path.join(imgdir, 'close_pressed.gif')) style = ttk.Style() style.element_create("close", "image", "img_close", ("active", "pressed", "!disabled", "img_closepressed"), ("active", "!disabled", "img_closeactive"), border=8, sticky='') style.layout("ButtonNotebook", [("ButtonNotebook.client", {"sticky": "nswe"})]) style.layout("ButtonNotebook.Tab", [ ("ButtonNotebook.tab", {"sticky": "nswe", "children": [("ButtonNotebook.padding", {"side": "top", "sticky": "nswe", "children": [("ButtonNotebook.focus", {"side": "top", "sticky": "nswe", "children": [("ButtonNotebook.label", {"side": "left", "sticky": ''}), ("ButtonNotebook.close", {"side": "left", "sticky": ''})] })] })] })] ) def btn_press(event): x, y, widget = event.x, event.y, event.widget elem = widget.identify(x, y) index = widget.index("@%d,%d" % (x, y)) if "close" in elem: widget.state(['pressed']) widget.pressed_index = index def btn_release(event): x, y, widget = event.x, event.y, event.widget if not widget.instate(['pressed']): return elem = widget.identify(x, y) index = widget.index("@%d,%d" % (x, y)) if "close" in elem and widget.pressed_index == index: widget.forget(index) widget.event_generate("<<NotebookClosedTab>>") widget.state(["!pressed"]) widget.pressed_index = None root.bind_class("TNotebook", "<ButtonPress-1>", btn_press, True) root.bind_class("TNotebook", "<ButtonRelease-1>", btn_release) # create a ttk notebook with our custom style, and add some tabs to it nb = ttk.Notebook(width=200, height=200, style="ButtonNotebook") nb.pressed_index = None f1 = Tkinter.Frame(nb, background="red") f2 = Tkinter.Frame(nb, background="green") f3 = Tkinter.Frame(nb, background="blue") nb.add(f1, text='Red', padding=3) nb.add(f2, text='Green', padding=3) nb.add(f3, text='Blue', padding=3) nb.pack(expand=1, fill='both') root.mainloop()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
img | Folder | 0755 |
|
|
combo_themes.py | File | 1.58 KB | 0644 |
|
combo_themes.pyc | File | 1.88 KB | 0644 |
|
combo_themes.pyo | File | 1.88 KB | 0644 |
|
dirbrowser.py | File | 2.65 KB | 0644 |
|
dirbrowser.pyc | File | 3.88 KB | 0644 |
|
dirbrowser.pyo | File | 3.88 KB | 0644 |
|
listbox_scrollcmd.py | File | 1.13 KB | 0644 |
|
listbox_scrollcmd.pyc | File | 1.56 KB | 0644 |
|
listbox_scrollcmd.pyo | File | 1.56 KB | 0644 |
|
mac_searchentry.py | File | 3.63 KB | 0644 |
|
mac_searchentry.pyc | File | 3.88 KB | 0644 |
|
mac_searchentry.pyo | File | 3.88 KB | 0644 |
|
notebook_closebtn.py | File | 2.47 KB | 0644 |
|
notebook_closebtn.pyc | File | 2.91 KB | 0644 |
|
notebook_closebtn.pyo | File | 2.91 KB | 0644 |
|
plastik_theme.py | File | 9.36 KB | 0644 |
|
plastik_theme.pyc | File | 7.34 KB | 0644 |
|
plastik_theme.pyo | File | 7.34 KB | 0644 |
|
roundframe.py | File | 5.47 KB | 0644 |
|
roundframe.pyc | File | 6.28 KB | 0644 |
|
roundframe.pyo | File | 6.28 KB | 0644 |
|
theme_selector.py | File | 1.92 KB | 0644 |
|
theme_selector.pyc | File | 2.81 KB | 0644 |
|
theme_selector.pyo | File | 2.81 KB | 0644 |
|
treeview_multicolumn.py | File | 4.15 KB | 0644 |
|
treeview_multicolumn.pyc | File | 5.35 KB | 0644 |
|
treeview_multicolumn.pyo | File | 5.35 KB | 0644 |
|
ttkcalendar.py | File | 8.12 KB | 0644 |
|
ttkcalendar.pyc | File | 9.54 KB | 0644 |
|
ttkcalendar.pyo | File | 9.54 KB | 0644 |
|
widget_state.py | File | 2.66 KB | 0644 |
|
widget_state.pyc | File | 3.33 KB | 0644 |
|
widget_state.pyo | File | 3.33 KB | 0644 |
|