PKZqP dirbrowser.pynuW+A"""A directory browser using Ttk Treeview. Based on the demo found in Tk 8.5 library/demos/browse """ import os import glob import Tkinter import ttk def populate_tree(tree, node): if tree.set(node, "type") != 'directory': return path = tree.set(node, "fullpath") tree.delete(*tree.get_children(node)) parent = tree.parent(node) special_dirs = [] if parent else glob.glob('.') + glob.glob('..') for p in special_dirs + os.listdir(path): ptype = None p = os.path.join(path, p).replace('\\', '/') if os.path.isdir(p): ptype = "directory" elif os.path.isfile(p): ptype = "file" fname = os.path.split(p)[1] id = tree.insert(node, "end", text=fname, values=[p, ptype]) if ptype == 'directory': if fname not in ('.', '..'): tree.insert(id, 0, text="dummy") tree.item(id, text=fname) elif ptype == 'file': size = os.stat(p).st_size tree.set(id, "size", "%d bytes" % size) def populate_roots(tree): dir = os.path.abspath('.').replace('\\', '/') node = tree.insert('', 'end', text=dir, values=[dir, "directory"]) populate_tree(tree, node) def update_tree(event): tree = event.widget populate_tree(tree, tree.focus()) def change_dir(event): tree = event.widget node = tree.focus() if tree.parent(node): path = os.path.abspath(tree.set(node, "fullpath")) if os.path.isdir(path): os.chdir(path) tree.delete(tree.get_children('')) populate_roots(tree) def autoscroll(sbar, first, last): """Hide and show scrollbar as needed.""" first, last = float(first), float(last) if first <= 0 and last >= 1: sbar.grid_remove() else: sbar.grid() sbar.set(first, last) root = Tkinter.Tk() vsb = ttk.Scrollbar(orient="vertical") hsb = ttk.Scrollbar(orient="horizontal") tree = ttk.Treeview(columns=("fullpath", "type", "size"), displaycolumns="size", yscrollcommand=lambda f, l: autoscroll(vsb, f, l), xscrollcommand=lambda f, l:autoscroll(hsb, f, l)) vsb['command'] = tree.yview hsb['command'] = tree.xview tree.heading("#0", text="Directory Structure", anchor='w') tree.heading("size", text="File Size", anchor='w') tree.column("size", stretch=0, width=100) populate_roots(tree) tree.bind('<>', update_tree) tree.bind('', change_dir) # Arrange the tree and its scrollbars in the toplevel tree.grid(column=0, row=0, sticky='nswe') vsb.grid(column=1, row=0, sticky='ns') hsb.grid(column=0, row=1, sticky='ew') root.grid_columnconfigure(0, weight=1) root.grid_rowconfigure(0, weight=1) root.mainloop() PKZ[ѕ> > theme_selector.pycnuW+A V Qc@sZdZddlZddlZdejfdYZdZedkrVendS(sTtk Theme Selector v2. This is an improvement from the other theme selector (themes_combo.py) since now you can notice theme changes in Ttk Combobox, Ttk Frame, Ttk Label and Ttk Button. iNtAppcBs,eZdZdZdZdZRS(cCsHtjj|ddtj|_tj|d|_|jdS(Nt borderwidthii( tttktFramet__init__tStyletstyletTkintertIntVarttheme_autochanget_setup_widgets(tself((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR scCs|jj|jjdS(N(Rt theme_uset themes_combotget(R ((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt _change_themescCs |jjr|jndS(N(R RR(R twidget((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt_theme_sel_changedsc Cstj|dd}|jj}tj|d|dd|_|jj|d|jjd|jtj |ddd |j }tj |dd d |j }|j d d dd|jj dddddd dd|j dddddd dd|j dddddddd |j}|jddd|jddd|jddd|j dddddddddddS(NttexttThemestvalueststatetreadonlyis<>s Change Themetcommands-Change themes when combobox item is activatedtvariabletipadxitstickytwtrowtcolumnitpadxtewitet columnspanitpadytweighttnsewtrowspan(RtLabelRt theme_namestComboboxR tsettbindRtButtonRt CheckbuttonR tgridtwinfo_toplevelt rowconfiguretcolumnconfigure(R t themes_lbltthemest change_btnttheme_change_checkbtnttop((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR s&   %"" (t__name__t __module__RRRR (((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR s  cCs't}|jjd|jdS(NsTheme Selector(Rtmasterttitletmainloop(tapp((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pytmain7s t__main__(t__doc__RRRRR<R6(((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyts   -  PKZMmac_searchentry.pycnuW+A V Qc @sdZddlZddlZejZdZejddeddZejddedd Zej Z e j d d dd!d dddgdde j dd idd6dd 6didd6didd6fgd6fgd6fge j dddej ddejddddZejddddZejddd dejddd dejdS("s\Mac style search widget Translated from Tcl code by Schelte Bron, http://wiki.tcl.tk/18188 iNs R0lGODlhKgAaAOfnAFdZVllbWFpcWVtdWlxeW11fXF9hXmBiX2ZnZWhpZ2lraGxua25wbXJ0 cXR2c3V3dHZ4dXh6d3x+e31/fH6AfYSGg4eJhoiKh4qMiYuNio2PjHmUqnqVq3yXrZGTkJKU kX+asJSWk32cuJWXlIGcs5aYlX6euZeZloOetZial4SftpqbmIWgt4GhvYahuIKivpudmYei uYOjv5yem4ijuoSkwIWlwYmlu56gnYamwp+hnoenw4unvaCin4ioxJCnuZykrImpxZmlsoaq zI2pv6KkoZGouoqqxpqms4erzaOloo6qwYurx5Kqu5untIiszqSmo5CrwoysyJeqtpOrvJyo tZGsw42typSsvaaopZKtxJWtvp6qt4+uy6epppOuxZCvzKiqp5quuZSvxoyx06mrqJWwx42y 1JKxzpmwwaqsqZaxyI6z1ZqxwqutqpOzz4+01qyuq56yvpizypS00Jm0y5W10Zq1zJa20rCy rpu3zqizwbGzr6C3yZy4z7K0saG4yp250LO1sqK5y5660Z+70qO7zKy4xaC806S8zba4taG9 1KW9zq66x6+7yLi6t6S/1rC8yrm7uLO8xLG9y7q8ubS9xabB2anB07K+zLW+xrO/za7CzrTA zrjAyLXBz77BvbbC0K/G2LjD0bnE0rLK28TGw8bIxcLL07vP28HN28rMycvOyr/T38DU4cnR 2s/RztHT0NLU0cTY5MrW5MvX5dHX2c3Z59bY1dPb5Nbb3dLe7Nvd2t3f3NXh797g3d3j5dnl 9OPl4eTm4+Ln6tzo9uXn5Obo5eDp8efp5uHq8uXq7ejq5+nr6OPs9Ovu6unu8O3v6+vw8+7w 7ezx9O/x7vDy7/Hz8O/19/P18vT38/L3+fb49Pf59vX6/fj69/b7/vn7+Pr8+ff9//v9+vz/ +/7//P////////////////////////////////////////////////////////////////// /////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJZAD/ACwC AAIAKAAWAAAI/gD/CRz4bwUGCg8eQFjIsGHDBw4iTLAQgqBFgisuePCiyJOpUyBDihRpypMi Lx8qaLhIMIyGFZ5sAUsmjZrNmzhzWpO2DJgtTysqfGDpxoMbW8ekeQsXzty4p1CjRjUXrps3 asJsuclQ4uKKSbamMR3n1JzZs2jRkh1HzuxVXX8y4CDYAwqua+DInVrRwMGJU2kDp31KThy1 XGWGDlxhi1rTPAUICBBAoEAesoIzn6Vm68MKgVAUHftmzhOCBCtQwQKSoABgzZnJdSMmyIPA FbCotdUQAIhNa9B6DPCAGbZac+SowVIMRVe4pwkA4GpqDlwuAAmMZx4nTtfnf1mO5JEDNy46 MHJkxQEDgKC49rPjwC0bqGaZuOoZAKjBPE4NgAzUvYcWOc0QZF91imAnCDHJ5JFAAJN0I2Ba 4iRDUC/gOEVNDwIUcEABCAgAAATUTIgWOMBYRFp80ghiAQIIVAAEAwJIYI2JZnUji0XSYAYO NcsQA8wy0hCTwAASXGOiONFcxAtpTokTHznfiLMNMAkcAMuE43jDC0vLeGOWe2R5o4sn1LgH GzkWsvTPMgEOaA433Ag4TjjMuDkQMNi0tZ12sqWoJ0HATMPNffAZZ6U0wLAyqJ62RGoLLrhI aqmlpzwaEAAh+QQJZAD/ACwAAAAAKgAaAAAI/gD/CRw40JEhQoEC+fGjcOHCMRAjRkxDsKLF f5YcAcID582ZjyBDJhmZZIjJIUySEDHiBMhFghrtdNnRAgSHmzhz6sTZQcSLITx+CHn5bxSk Nz5MCMGy55CjTVCjbuJEtSrVQ3uwqDBRQwrFi476SHHxow8qXcemVbPGtm21t3CnTaP27Jgu VHtuiIjBsuImQkRiiEEFTNo2cOTMKV7MuLE5cN68QUOGSgwKG1EqJqJDY8+rZt8UjxtNunTj cY3DgZOWS46KIFgGjiI0ZIsqaqNNjWjgYMUpx8Adc3v2aosNMAI1DbqyI9WycOb4IAggQEAB A3lQBxet/TG4cMpI/tHwYeSfIzxM0uTKNs7UgAQrYL1akaDA7+3bueVqY4NJlUhIcQLNYx8E AIQ01mwjTQ8DeNAdfouNA8440GBCQxJY3MEGD6p4Y844CQCAizcSgpMLAAlAuJ03qOyQRBR3 nEHEK+BMGKIui4kDDAAIPKiiYuSYSMQQRCDCxhiziPMYBgDkEaEaAGQA3Y+MjUPOLFoMoUUh cKxRC4ngeILiH8Qkk0cCAUzSDZWpzbLEE1EwggcYqWCj2DNADFDAAQUgIAAAEFDDJmPYqNJF F1s4cscTmCDjDTjdSPOHBQggUAEQDAgggTWDPoYMJkFoUdRmddyyjWLeULMMMcAsIw0x4wkM IME1g25zyxpHxFYUHmyIggw4H4ojITnfiLMNMAkcAAub4BQjihRdDGTJHmvc4Qo1wD6Imje6 eILbj+BQ4wqu5Q3ECSJ0FOKKMtv4mBg33Pw4zjbKuBIIE1xYpIkhdQQiyi7OtAucj6dt48wu otQhBRa6VvSJIRwhIkotvgRTzMUYZ6xxMcj4QkspeKDxxRhEmUfIHWjAgQcijEDissuXvCyz zH7Q8YQURxDhUsn/bCInR3AELfTQZBRt9BBJkCGFFVhMwTNBlnBCSCGEIJQQIAklZMXWRBAR RRRWENHwRQEBADs=tsearch1tdatatformats gif -index 0tsearch2s gif -index 1s Search.fieldtimagetfocustborderiiitstickytews Search.entrytnsweis Entry.paddingsEntry.textareatchildrent backgrounds#b2b2b2tstyletwidthitpadxi tpady(RR(t__doc__tTkintertttktTktrootRt PhotoImagets1ts2tStyleR telement_createtlayoutt configuretEntryte1te2tgridtmainloop(((s8/usr/lib64/python2.7/Demo/tkinter/ttk/mac_searchentry.pyts(   )   +PKZ<dirbrowser.pyonuW+A V Qc @sdZddlZddlZddlZddlZdZdZdZdZdZ ej Z ej dd Z ej dd Zejd d)ddddddZeje d|dkr>|jn |j|j||dS(s"Hide and show scrollbar as needed.iiN(tfloatt grid_removetgridR (tsbartfirsttlast((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt autoscroll9s   torienttverticalt horizontaltcolumnsRRR tdisplaycolumnstyscrollcommandcCstt||S(N(R5tvsb(tftl((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pytHstxscrollcommandcCstt||S(N(R5thsb(R=R>((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyR?Istcommands#0RsDirectory Structuretanchortws File Sizetstretchitwidthids<>stcolumntrowtstickytnsweitnstewtweight(sfullpathstypessize(t__doc__RRtTkintertttkR$R(R,R.R5tTktroott ScrollbarR<RAtTreeviewRtyviewtxviewtheadingRGtbindR1tgrid_columnconfiguretgrid_rowconfiguretmainloop(((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyts:            PKZ=TJ notebook_closebtn.pyonuW+A V Qc @sdZddlZddlZddlZejZejjejje dZ ej ddejje dZ ej ddejje dZ ej d dejje d ZejZejd d dd8d9ddddejddidd6fgejddidd6didd6dd6didd6dd6didd6dd6fdidd6dd6fgd 6fgd 6fgd 6fgd!Zd"Zejd#d$eeejd#d%eejd&d'd(d'd)dZde_ejed*d+Zejed*d,Zejed*d-Zejed.d/d0d1ejed.d2d0d1ejed.d3d0d1ej d4d5d6d7ej!dS(:saA Ttk Notebook with close buttons. Based on an example by patthoyts, http://paste.tclers.tk/896 iNtimgt img_closetfiles close.giftimg_closeactivesclose_active.giftimg_closepressedsclose_pressed.giftclosetimagetactivetpresseds !disabledtborderitstickyttButtonNotebooksButtonNotebook.clienttnswesButtonNotebook.TabsButtonNotebook.tabsButtonNotebook.paddingttoptsidesButtonNotebook.focussButtonNotebook.labeltleftsButtonNotebook.closetchildrencCst|j|j|j}}}|j||}|jd||f}d|krp|jdg||_ndS(Ns@%d,%dRR(txtytwidgettidentifytindextstatet pressed_index(teventRRRtelemR((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pyt btn_press&s  cCs|j|j|j}}}|jdgs3dS|j||}|jd||f}d|kr|j|kr|j||jdn|j dgd|_dS(NRs@%d,%dRs<>s!pressed( RRRtinstateRRRtforgettevent_generateRtNone(RRRRRR((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pyt btn_release/s t TNotebooksstwidthitheighttstylet backgroundtredtgreentbluettexttRedtpaddingitGreentBluetexpanditfilltboth(Rspresseds !disabledR(Rs !disabledR("t__doc__tostTkintertttktTktroottpathtjointdirnamet__file__timgdirt PhotoImageti1ti2ti3tStyleR$telement_createtlayoutRR t bind_classtTruetNotebooktnbRRtFrametf1tf2tf3taddtpacktmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pytsF    !$      <  PKZǑ@@listbox_scrollcmd.pyonuW+A V Qc@sWdZddlZddlZejZejddZejdddddd ejd ej d d Z e j ed s"     PKZ/ QQcombo_themes.pynuW+A"""Ttk Theme Selector. Although it is a theme selector, you won't notice many changes since there is only a combobox and a frame around. """ import ttk class App(ttk.Frame): def __init__(self): ttk.Frame.__init__(self) self.style = ttk.Style() self._setup_widgets() def _change_theme(self, event): if event.widget.current(): # value #0 is not a theme newtheme = event.widget.get() # change to the new theme and refresh all the widgets self.style.theme_use(newtheme) def _setup_widgets(self): themes = list(self.style.theme_names()) themes.insert(0, "Pick a theme") # Create a readonly Combobox which will display 4 values at max, # which will cause it to create a scrollbar if there are more # than 4 values in total. themes_combo = ttk.Combobox(self, values=themes, state="readonly", height=4) themes_combo.set(themes[0]) # sets the combobox value to "Pick a theme" # Combobox widget generates a <> virtual event # when the user selects an element. This event is generated after # the listbox is unposted (after you select an item, the combobox's # listbox disappears, then it is said that listbox is now unposted). themes_combo.bind("<>", self._change_theme) themes_combo.pack(fill='x') self.pack(fill='both', expand=1) def main(): app = App() app.master.title("Ttk Combobox") app.mainloop() if __name__ == "__main__": main() PKZ} } ttkcalendar.pynuW+A""" Simple calendar using ttk Treeview together with calendar and datetime classes. """ import calendar import Tkinter import tkFont import ttk def get_calendar(locale, fwday): # instantiate proper calendar class if locale is None: return calendar.TextCalendar(fwday) else: return calendar.LocaleTextCalendar(fwday, locale) class Calendar(ttk.Frame): # XXX ToDo: cget and configure datetime = calendar.datetime.datetime timedelta = calendar.datetime.timedelta def __init__(self, master=None, **kw): """ WIDGET-SPECIFIC OPTIONS locale, firstweekday, year, month, selectbackground, selectforeground """ # remove custom options from kw before initializating ttk.Frame fwday = kw.pop('firstweekday', calendar.MONDAY) year = kw.pop('year', self.datetime.now().year) month = kw.pop('month', self.datetime.now().month) locale = kw.pop('locale', None) sel_bg = kw.pop('selectbackground', '#ecffc4') sel_fg = kw.pop('selectforeground', '#05640e') self._date = self.datetime(year, month, 1) self._selection = None # no date selected ttk.Frame.__init__(self, master, **kw) self._cal = get_calendar(locale, fwday) self.__setup_styles() # creates custom styles self.__place_widgets() # pack/grid used widgets self.__config_calendar() # adjust calendar columns and setup tags # configure a canvas, and proper bindings, for selecting dates self.__setup_selection(sel_bg, sel_fg) # store items ids, used for insertion later self._items = [self._calendar.insert('', 'end', values='') for _ in range(6)] # insert dates in the currently empty calendar self._build_calendar() # set the minimal size for the widget self._calendar.bind('', self.__minsize) def __setitem__(self, item, value): if item in ('year', 'month'): raise AttributeError("attribute '%s' is not writeable" % item) elif item == 'selectbackground': self._canvas['background'] = value elif item == 'selectforeground': self._canvas.itemconfigure(self._canvas.text, item=value) else: ttk.Frame.__setitem__(self, item, value) def __getitem__(self, item): if item in ('year', 'month'): return getattr(self._date, item) elif item == 'selectbackground': return self._canvas['background'] elif item == 'selectforeground': return self._canvas.itemcget(self._canvas.text, 'fill') else: r = ttk.tclobjs_to_py({item: ttk.Frame.__getitem__(self, item)}) return r[item] def __setup_styles(self): # custom ttk styles style = ttk.Style(self.master) arrow_layout = lambda dir: ( [('Button.focus', {'children': [('Button.%sarrow' % dir, None)]})] ) style.layout('L.TButton', arrow_layout('left')) style.layout('R.TButton', arrow_layout('right')) def __place_widgets(self): # header frame and its widgets hframe = ttk.Frame(self) lbtn = ttk.Button(hframe, style='L.TButton', command=self._prev_month) rbtn = ttk.Button(hframe, style='R.TButton', command=self._next_month) self._header = ttk.Label(hframe, width=15, anchor='center') # the calendar self._calendar = ttk.Treeview(show='', selectmode='none', height=7) # pack the widgets hframe.pack(in_=self, side='top', pady=4, anchor='center') lbtn.grid(in_=hframe) self._header.grid(in_=hframe, column=1, row=0, padx=12) rbtn.grid(in_=hframe, column=2, row=0) self._calendar.pack(in_=self, expand=1, fill='both', side='bottom') def __config_calendar(self): cols = self._cal.formatweekheader(3).split() self._calendar['columns'] = cols self._calendar.tag_configure('header', background='grey90') self._calendar.insert('', 'end', values=cols, tag='header') # adjust its columns width font = tkFont.Font() maxwidth = max(font.measure(col) for col in cols) for col in cols: self._calendar.column(col, width=maxwidth, minwidth=maxwidth, anchor='e') def __setup_selection(self, sel_bg, sel_fg): self._font = tkFont.Font() self._canvas = canvas = Tkinter.Canvas(self._calendar, background=sel_bg, borderwidth=0, highlightthickness=0) canvas.text = canvas.create_text(0, 0, fill=sel_fg, anchor='w') canvas.bind('', lambda evt: canvas.place_forget()) self._calendar.bind('', lambda evt: canvas.place_forget()) self._calendar.bind('', self._pressed) def __minsize(self, evt): width, height = self._calendar.master.geometry().split('x') height = height[:height.index('+')] self._calendar.master.minsize(width, height) def _build_calendar(self): year, month = self._date.year, self._date.month # update header text (Month, YEAR) header = self._cal.formatmonthname(year, month, 0) self._header['text'] = header.title() # update calendar shown dates cal = self._cal.monthdayscalendar(year, month) for indx, item in enumerate(self._items): week = cal[indx] if indx < len(cal) else [] fmt_week = [('%02d' % day) if day else '' for day in week] self._calendar.item(item, values=fmt_week) def _show_selection(self, text, bbox): """Configure canvas for a new selection.""" x, y, width, height = bbox textw = self._font.measure(text) canvas = self._canvas canvas.configure(width=width, height=height) canvas.coords(canvas.text, width - textw, height / 2 - 1) canvas.itemconfigure(canvas.text, text=text) canvas.place(in_=self._calendar, x=x, y=y) # Callbacks def _pressed(self, evt): """Clicked somewhere in the calendar.""" x, y, widget = evt.x, evt.y, evt.widget item = widget.identify_row(y) column = widget.identify_column(x) if not column or not item in self._items: # clicked in the weekdays row or just outside the columns return item_values = widget.item(item)['values'] if not len(item_values): # row is empty for this month return text = item_values[int(column[1]) - 1] if not text: # date is empty return bbox = widget.bbox(item, column) if not bbox: # calendar not visible yet return # update and then show selection text = '%02d' % text self._selection = (text, item, column) self._show_selection(text, bbox) def _prev_month(self): """Updated calendar to show the previous month.""" self._canvas.place_forget() self._date = self._date - self.timedelta(days=1) self._date = self.datetime(self._date.year, self._date.month, 1) self._build_calendar() # reconstuct calendar def _next_month(self): """Update calendar to show the next month.""" self._canvas.place_forget() year, month = self._date.year, self._date.month self._date = self._date + self.timedelta( days=calendar.monthrange(year, month)[1] + 1) self._date = self.datetime(self._date.year, self._date.month, 1) self._build_calendar() # reconstruct calendar # Properties @property def selection(self): """Return a datetime representing the current selected date.""" if not self._selection: return None year, month = self._date.year, self._date.month return self.datetime(year, month, int(self._selection[0])) def test(): import sys root = Tkinter.Tk() root.title('Ttk Calendar') ttkcal = Calendar(firstweekday=calendar.SUNDAY) ttkcal.pack(expand=1, fill='both') if 'win' not in sys.platform: style = ttk.Style() style.theme_use('clam') root.mainloop() if __name__ == '__main__': test() PKZy5L roundframe.pynuW+A"""Ttk Frame with rounded corners. Based on an example by Bryan Oakley, found at: http://wiki.tcl.tk/20152""" import Tkinter import ttk root = Tkinter.Tk() img1 = Tkinter.PhotoImage("frameFocusBorder", data=""" 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 Ry/99NIz//oGrZpUUEAAOw==""") img2 = Tkinter.PhotoImage("frameBorder", data=""" R0lGODlhQABAAPcAAHx+fMTCxKSipOTi5JSSlNTS1LSytPTy9IyKjMzKzKyq rOzq7JyanNza3Ly6vPz6/ISChMTGxKSmpOTm5JSWlNTW1LS2tPT29IyOjMzO zKyurOzu7JyenNze3Ly+vPz+/OkAKOUA5IEAEnwAAACuQACUAAFBAAB+AFYd QAC0AABBAAB+AIjMAuEEABINAAAAAHMgAQAAAAAAAAAAAKjSxOIEJBIIpQAA sRgBMO4AAJAAAHwCAHAAAAUAAJEAAHwAAP+eEP8CZ/8Aif8AAG0BDAUAAJEA AHwAAIXYAOfxAIESAHwAAABAMQAbMBZGMAAAIEggJQMAIAAAAAAAfqgaXESI 5BdBEgB+AGgALGEAABYAAAAAAACsNwAEAAAMLwAAAH61MQBIAABCM8B+AAAU AAAAAAAApQAAsf8Brv8AlP8AQf8Afv8AzP8A1P8AQf8AfgAArAAABAAADAAA AACQDADjAAASAAAAAACAAADVABZBAAB+ALjMwOIEhxINUAAAANIgAOYAAIEA AHwAAGjSAGEEABYIAAAAAEoBB+MAAIEAAHwCACABAJsAAFAAAAAAAGjJAGGL AAFBFgB+AGmIAAAQAABHAAB+APQoAOE/ABIAAAAAAADQAADjAAASAAAAAPiF APcrABKDAAB8ABgAGO4AAJAAqXwAAHAAAAUAAJEAAHwAAP8AAP8AAP8AAP8A AG0pIwW3AJGSAHx8AEocI/QAAICpAHwAAAA0SABk6xaDEgB8AAD//wD//wD/ /wD//2gAAGEAABYAAAAAAAC0/AHj5AASEgAAAAA01gBkWACDTAB8AFf43PT3 5IASEnwAAOAYd+PuMBKQTwB8AGgAEGG35RaSEgB8AOj/NOL/ZBL/gwD/fMkc q4sA5UGpEn4AAIg02xBk/0eD/358fx/4iADk5QASEgAAAALnHABkAACDqQB8 AMyINARkZA2DgwB8fBABHL0AAEUAqQAAAIAxKOMAPxIwAAAAAIScAOPxABIS AAAAAIIAnQwA/0IAR3cAACwAAAAAQABAAAAI/wA/CBxIsKDBgwgTKlzIsKFD gxceNnxAsaLFixgzUrzAsWPFCw8kDgy5EeQDkBxPolypsmXKlx1hXnS48UEH CwooMCDAgIJOCjx99gz6k+jQnkWR9lRgYYDJkAk/DlAgIMICkVgHLoggQIPT ighVJqBQIKvZghkoZDgA8uDJAwk4bDhLd+ABBmvbjnzbgMKBuoA/bKDQgC1F gW8XKMgQOHABBQsMI76wIIOExo0FZIhM8sKGCQYCYA4cwcCEDSYPLOgg4Oro uhMEdOB84cCAChReB2ZQYcGGkxsGFGCgGzCFCh1QH5jQIW3xugwSzD4QvIIH 4s/PUgiQYcCG4BkC5P/ObpaBhwreq18nb3Z79+8Dwo9nL9I8evjWsdOX6D59 fPH71Xeef/kFyB93/sln4EP2Ebjegg31B5+CEDLUIH4PVqiQhOABqKFCF6qn 34cHcfjffCQaFOJtGaZYkIkUuljQigXK+CKCE3po40A0trgjjDru+EGPI/6I Y4co7kikkAMBmaSNSzL5gZNSDjkghkXaaGIBHjwpY4gThJeljFt2WSWYMQpZ 5pguUnClehS4tuMEDARQgH8FBMBBBExGwIGdAxywXAUBKHCZkAIoEEAFp33W QGl47ZgBAwZEwKigE1SQgAUCUDCXiwtQIIAFCTQwgaCrZeCABAzIleIGHDD/ oIAHGUznmXABGMABT4xpmBYBHGgAKGq1ZbppThgAG8EEAW61KwYMSOBAApdy pNp/BkhAAQLcEqCTt+ACJW645I5rLrgEeOsTBtwiQIEElRZg61sTNBBethSw CwEA/Pbr778ABywwABBAgAAG7xpAq6mGUUTdAPZ6YIACsRKAAbvtZqzxxhxn jDG3ybbKFHf36ZVYpuE5oIGhHMTqcqswvyxzzDS/HDMHEiiggQMLDxCZXh8k BnEBCQTggAUGGKCB0ktr0PTTTEfttNRQT22ABR4EkEABDXgnGUEn31ZABglE EEAAWaeN9tpqt832221HEEECW6M3wc+Hga3SBgtMODBABw00UEEBgxdO+OGG J4744oZzXUEDHQxwN7F5G7QRdXxPoPkAnHfu+eeghw665n1vIKhJBQUEADs=""") style = ttk.Style() style.element_create("RoundedFrame", "image", "frameBorder", ("focus", "frameFocusBorder"), border=16, sticky="nsew") style.layout("RoundedFrame", [("RoundedFrame", {"sticky": "nsew"})]) style.configure("TEntry", borderwidth=0) frame = ttk.Frame(style="RoundedFrame", padding=10) frame.pack(fill='x') frame2 = ttk.Frame(style="RoundedFrame", padding=10) frame2.pack(fill='both', expand=1) entry = ttk.Entry(frame, text='Test') entry.pack(fill='x') entry.bind("", lambda evt: frame.state(["focus"])) entry.bind("", lambda evt: frame.state(["!focus"])) text = Tkinter.Text(frame2, borderwidth=0, bg="white", highlightthickness=0) text.pack(fill='both', expand=1) text.bind("", lambda evt: frame2.state(["focus"])) text.bind("", lambda evt: frame2.state(["!focus"])) root.mainloop() PKZ[mac_searchentry.pynuW+A"""Mac style search widget Translated from Tcl code by Schelte Bron, http://wiki.tcl.tk/18188 """ import Tkinter import ttk root = Tkinter.Tk() data = """ R0lGODlhKgAaAOfnAFdZVllbWFpcWVtdWlxeW11fXF9hXmBiX2ZnZWhpZ2lraGxua25wbXJ0 cXR2c3V3dHZ4dXh6d3x+e31/fH6AfYSGg4eJhoiKh4qMiYuNio2PjHmUqnqVq3yXrZGTkJKU kX+asJSWk32cuJWXlIGcs5aYlX6euZeZloOetZial4SftpqbmIWgt4GhvYahuIKivpudmYei uYOjv5yem4ijuoSkwIWlwYmlu56gnYamwp+hnoenw4unvaCin4ioxJCnuZykrImpxZmlsoaq zI2pv6KkoZGouoqqxpqms4erzaOloo6qwYurx5Kqu5untIiszqSmo5CrwoysyJeqtpOrvJyo tZGsw42typSsvaaopZKtxJWtvp6qt4+uy6epppOuxZCvzKiqp5quuZSvxoyx06mrqJWwx42y 1JKxzpmwwaqsqZaxyI6z1ZqxwqutqpOzz4+01qyuq56yvpizypS00Jm0y5W10Zq1zJa20rCy rpu3zqizwbGzr6C3yZy4z7K0saG4yp250LO1sqK5y5660Z+70qO7zKy4xaC806S8zba4taG9 1KW9zq66x6+7yLi6t6S/1rC8yrm7uLO8xLG9y7q8ubS9xabB2anB07K+zLW+xrO/za7CzrTA zrjAyLXBz77BvbbC0K/G2LjD0bnE0rLK28TGw8bIxcLL07vP28HN28rMycvOyr/T38DU4cnR 2s/RztHT0NLU0cTY5MrW5MvX5dHX2c3Z59bY1dPb5Nbb3dLe7Nvd2t3f3NXh797g3d3j5dnl 9OPl4eTm4+Ln6tzo9uXn5Obo5eDp8efp5uHq8uXq7ejq5+nr6OPs9Ovu6unu8O3v6+vw8+7w 7ezx9O/x7vDy7/Hz8O/19/P18vT38/L3+fb49Pf59vX6/fj69/b7/vn7+Pr8+ff9//v9+vz/ +/7//P////////////////////////////////////////////////////////////////// /////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJZAD/ACwC AAIAKAAWAAAI/gD/CRz4bwUGCg8eQFjIsGHDBw4iTLAQgqBFgisuePCiyJOpUyBDihRpypMi Lx8qaLhIMIyGFZ5sAUsmjZrNmzhzWpO2DJgtTysqfGDpxoMbW8ekeQsXzty4p1CjRjUXrps3 asJsuclQ4uKKSbamMR3n1JzZs2jRkh1HzuxVXX8y4CDYAwqua+DInVrRwMGJU2kDp31KThy1 XGWGDlxhi1rTPAUICBBAoEAesoIzn6Vm68MKgVAUHftmzhOCBCtQwQKSoABgzZnJdSMmyIPA FbCotdUQAIhNa9B6DPCAGbZac+SowVIMRVe4pwkA4GpqDlwuAAmMZx4nTtfnf1mO5JEDNy46 MHJkxQEDgKC49rPjwC0bqGaZuOoZAKjBPE4NgAzUvYcWOc0QZF91imAnCDHJ5JFAAJN0I2Ba 4iRDUC/gOEVNDwIUcEABCAgAAATUTIgWOMBYRFp80ghiAQIIVAAEAwJIYI2JZnUji0XSYAYO NcsQA8wy0hCTwAASXGOiONFcxAtpTokTHznfiLMNMAkcAMuE43jDC0vLeGOWe2R5o4sn1LgH GzkWsvTPMgEOaA433Ag4TjjMuDkQMNi0tZ12sqWoJ0HATMPNffAZZ6U0wLAyqJ62RGoLLrhI aqmlpzwaEAAh+QQJZAD/ACwAAAAAKgAaAAAI/gD/CRw40JEhQoEC+fGjcOHCMRAjRkxDsKLF f5YcAcID582ZjyBDJhmZZIjJIUySEDHiBMhFghrtdNnRAgSHmzhz6sTZQcSLITx+CHn5bxSk Nz5MCMGy55CjTVCjbuJEtSrVQ3uwqDBRQwrFi476SHHxow8qXcemVbPGtm21t3CnTaP27Jgu VHtuiIjBsuImQkRiiEEFTNo2cOTMKV7MuLE5cN68QUOGSgwKG1EqJqJDY8+rZt8UjxtNunTj cY3DgZOWS46KIFgGjiI0ZIsqaqNNjWjgYMUpx8Adc3v2aosNMAI1DbqyI9WycOb4IAggQEAB A3lQBxet/TG4cMpI/tHwYeSfIzxM0uTKNs7UgAQrYL1akaDA7+3bueVqY4NJlUhIcQLNYx8E AIQ01mwjTQ8DeNAdfouNA8440GBCQxJY3MEGD6p4Y844CQCAizcSgpMLAAlAuJ03qOyQRBR3 nEHEK+BMGKIui4kDDAAIPKiiYuSYSMQQRCDCxhiziPMYBgDkEaEaAGQA3Y+MjUPOLFoMoUUh cKxRC4ngeILiH8Qkk0cCAUzSDZWpzbLEE1EwggcYqWCj2DNADFDAAQUgIAAAEFDDJmPYqNJF F1s4cscTmCDjDTjdSPOHBQggUAEQDAgggTWDPoYMJkFoUdRmddyyjWLeULMMMcAsIw0x4wkM IME1g25zyxpHxFYUHmyIggw4H4ojITnfiLMNMAkcAAub4BQjihRdDGTJHmvc4Qo1wD6Imje6 eILbj+BQ4wqu5Q3ECSJ0FOKKMtv4mBg33Pw4zjbKuBIIE1xYpIkhdQQiyi7OtAucj6dt48wu otQhBRa6VvSJIRwhIkotvgRTzMUYZ6xxMcj4QkspeKDxxRhEmUfIHWjAgQcijEDissuXvCyz zH7Q8YQURxDhUsn/bCInR3AELfTQZBRt9BBJkCGFFVhMwTNBlnBCSCGEIJQQIAklZMXWRBAR RRRWENHwRQEBADs=""" s1 = Tkinter.PhotoImage("search1", data=data, format="gif -index 0") s2 = Tkinter.PhotoImage("search2", data=data, format="gif -index 1") style = ttk.Style() style.element_create("Search.field", "image", "search1", ("focus", "search2"), border=[22, 7, 14], sticky="ew") style.layout("Search.entry", [ ("Search.field", {"sticky": "nswe", "border": 1, "children": [("Entry.padding", {"sticky": "nswe", "children": [("Entry.textarea", {"sticky": "nswe"})] })] })] ) style.configure("Search.entry", background="#b2b2b2") root.configure(background="#b2b2b2") e1 = ttk.Entry(style="Search.entry", width=20) e2 = ttk.Entry(style="Search.entry", width=20) e1.grid(padx=10, pady=10) e2.grid(padx=10, pady=10) root.mainloop() PKZ$P P widget_state.pyonuW+A V Qc @sdZddlZddddddd d d g Zx eD]Zejd eq;Wd ZdejfdYZdZe dkrendS(s8Sample demo showing widget states and some font styling.iNtactivetdisabledtfocustpressedtselectedt backgroundtreadonlyt alternatetinvalidt!cCs%tttd}|j|dS(Ni(tstatestlentstate(twidgettnostate((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt reset_state stAppcBs2eZddZddZdZdZRS(cCstjj|dd|jj|tj|_|jjdd}t|j j d|}|j j d||_ d|j krd|j |_ n|d d kr|d nd |_ t ||d d krd nd |_g|_|jdS( Nt borderwidthitTButtontfontsfont configure %s -sizesfont configure %s -familyt s{%s}it-ti(tttktFramet__init__tmasterttitletStyletstyletlookuptstrttktevalt font_familyt fsize_prefixtintt base_fsizetupdate_widgetst_setup_widgets(tselfRtbtn_fonttfsize((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyRs#) icCs4|jjddd|j|j|j|fdS(NRRs%s %s%d(Rt configureR"R#R%(R(textra((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt _set_font#scCs|j|}|s'dg}d}nGt|j}g|D]}|tkr@|^q@}dt|}x(|jD]}t||j|qxW|j|dS(NRiii( t nametowidgettsettsplitR R R&RR R-(R(R tnewtextt goodstatest font_extrat newstatesR ((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt _new_state's  %  c Cstj|dd}tj|dddd}|j|jddf|d <|j|jj||j|j d d d d |j dddd d d dd|j d ddddS(NttextsEnter states and watchtcursortxtermtvalidatetkeys%Ws%Ptvalidatecommandtfilltxtpadxitsidetlefttpadytanchortntbothtexpandi( RtButtontEntrytregisterR5RR&tappendR9tpack(R(tbtntentry((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyR'?s  "N(t__name__t __module__tNoneRR-R5R'(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyRs   cCstd}|jdS(NsWidget State Tester(Rtmainloop(tapp((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pytmainNs t__main__( t__doc__RR R RIRRRRRRM(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyts  @  PKZM^|ggtreeview_multicolumn.pyonuW+A V Qc@sdZddlZddlZddlZd6Zd7d8d9d:d;d<d=d>d?d@dAdBdCdDdEgZd1Zd2efd3YZd4Z e d5kre ndS(FsCDemo based on the demo mclist included with tk source distribution.iNtcountrytcapitaltcurrencyt Argentinas Buenos AirestARSt AustraliatCanberratAUDtBraziltBraziliatBRLtCanadatOttawatCADtChinatBeijingtCNYtFrancetParistEURtGermanytBerlintIndias New DelhitINRtItalytRometJapantTokyotJPYtMexicos Mexico CitytMXNtRussiatMoscowtRUBs South AfricatPretoriatZARsUnited KingdomtLondontGBPs United StatessWashington, D.C.tUSDcsgjdD]}j|||f^q}|jdx1t|D]#\}}j|dd|qQWj|d|fddS(s/Sort tree contents when a column is clicked on.ttreverseitcommandcst|t S(N(tsortbytint(tcol(t descendingttree(s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt%sN(t get_childrentsettsortt enumeratetmovetheading(R.R,R-tchildtdatatindxtitem((R-R.s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR*s 4 tAppcBs#eZdZdZdZRS(cCs!d|_|j|jdS(N(tNoneR.t_setup_widgetst _build_tree(tself((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt__init__(s  c Csetjdddddddd$d d }|jd dtj}|jd ddttjdtdd|_tjddd|jj }tjddd|jj }|jj d|j d|j |jj ddddddd||j dd dddd!d||j dddd dd"d||jdd#d |jdd#d dS(%Nt wraplengtht4itjustifytlefttanchortntpaddingi iittextsTtk is the new Tk themed widget set. One of the widgets it includes is a tree widget, which can be configured to display multiple columns of informational data without displaying the tree itself. This is a simple way to build a listbox that has multiple columns. Clicking on the heading for a column will sort the data by that column. You can also change the width of the columns by dragging the boundary between them.tfilltxtbothtexpandtcolumnstshowtheadingstorienttverticalR)t horizontaltyscrollcommandtxscrollcommandtcolumnitrowtstickytnsewtin_itnstewtweight(i ii i(tttktLabeltpacktFrametTruetTreeviewt tree_columnsR.t Scrollbartyviewtxviewt configureR1tgridtgrid_columnconfiguretgrid_rowconfigure(R>tmsgt containertvsbthsb((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR<-s  %""c s xgtD]_}jj|d|jd|fdjj|dtjj|jqWxtD]}jj ddd|xnt |D]`\}}tjj|}jjt|dd|krjjt|d|qqWqqWdS(NRGR)cstj|dS(Ni(R*R.(tc(R>(s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR/MstwidthR'tendtvalues( RbR.R5ttitleRTttkFonttFonttmeasuret tree_datatinsertR3R;(R>R,R9R8tvaltilen((R>s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR=Js / "(t__name__t __module__R?R<R=(((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR:'s  cCstj}|jd|jdddl}y|jdWn*tk roddl}|jdnXt }|j dS(NsMulti-Column Listtmclistis~/tile-themes/plastik/plastiks'plastik theme being used without images( tTkintertTktwm_titlet wm_iconnamet plastik_themetinstallt ExceptiontwarningstwarnR:tmainloop(trootRRtapp((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pytmain[s       t__main__(RRR(Rs Buenos AiresR(RRR(RR R (R R R (RRR(RRR(RRR(Rs New DelhiR(RRR(RRR(Rs Mexico CityR(RR R!(s South AfricaR"R#(sUnited KingdomR$R%(s United StatessWashington, D.C.R&( t__doc__R}RsR\RbRvR*tobjectR:RRz(((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyts0     4  PKZǑ@@listbox_scrollcmd.pycnuW+A V Qc@sWdZddlZddlZejZejddZejdddddd ejd ej d d Z e j ed s"     PKZ|!eeimg/close_pressed.gifnuW+AGIF89a**ff;;;;;;;;;;;;!Created with GIMP! ,0DJ'! 晅aA ;PKZ.PPimg/close_active.gifnuW+AGIF89a4! ,0DJ'! 晅aA ;PKZxUee img/close.gifnuW+AGIF89a;;;;;;;;;;;;;;;!Created with GIMP! ,0DJ'! 晅aA ;PKZ-listbox_scrollcmd.pynuW+A"""Sample taken from: http://www.tkdocs.com/tutorial/morewidgets.html and converted to Python, mainly to demonstrate xscrollcommand option. grid [tk::listbox .l -yscrollcommand ".s set" -height 5] -column 0 -row 0 -sticky nwes grid [ttk::scrollbar .s -command ".l yview" -orient vertical] -column 1 -row 0 -sticky ns grid [ttk::label .stat -text "Status message here" -anchor w] -column 0 -row 1 -sticky we grid [ttk::sizegrip .sz] -column 1 -row 1 -sticky se grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1 for {set i 0} {$i<100} {incr i} { .l insert end "Line $i of 100" } """ import Tkinter import ttk root = Tkinter.Tk() l = Tkinter.Listbox(height=5) l.grid(column=0, row=0, sticky='nwes') s = ttk.Scrollbar(command=l.yview, orient='vertical') l['yscrollcommand'] = s.set s.grid(column=1, row=0, sticky="ns") stat = ttk.Label(text="Status message here", anchor='w') stat.grid(column=0, row=1, sticky='we') sz = ttk.Sizegrip() sz.grid(column=1, row=1, sticky='se') root.grid_columnconfigure(0, weight=1) root.grid_rowconfigure(0, weight=1) for i in range(100): l.insert('end', "Line %d of 100" % i) root.mainloop() PKZ<dirbrowser.pycnuW+A V Qc @sdZddlZddlZddlZddlZdZdZdZdZdZ ej Z ej dd Z ej dd Zejd d)ddddddZeje d|dkr>|jn |j|j||dS(s"Hide and show scrollbar as needed.iiN(tfloatt grid_removetgridR (tsbartfirsttlast((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyt autoscroll9s   torienttverticalt horizontaltcolumnsRRR tdisplaycolumnstyscrollcommandcCstt||S(N(R5tvsb(tftl((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pytHstxscrollcommandcCstt||S(N(R5thsb(R=R>((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyR?Istcommands#0RsDirectory Structuretanchortws File Sizetstretchitwidthids<>stcolumntrowtstickytnsweitnstewtweight(sfullpathstypessize(t__doc__RRtTkintertttkR$R(R,R.R5tTktroott ScrollbarR<RAtTreeviewRtyviewtxviewtheadingRGtbindR1tgrid_columnconfiguretgrid_rowconfiguretmainloop(((s3/usr/lib64/python2.7/Demo/tkinter/ttk/dirbrowser.pyts:            PKZ=TJ notebook_closebtn.pycnuW+A V Qc @sdZddlZddlZddlZejZejjejje dZ ej ddejje dZ ej ddejje dZ ej d dejje d ZejZejd d dd8d9ddddejddidd6fgejddidd6didd6dd6didd6dd6didd6dd6fdidd6dd6fgd 6fgd 6fgd 6fgd!Zd"Zejd#d$eeejd#d%eejd&d'd(d'd)dZde_ejed*d+Zejed*d,Zejed*d-Zejed.d/d0d1ejed.d2d0d1ejed.d3d0d1ej d4d5d6d7ej!dS(:saA Ttk Notebook with close buttons. Based on an example by patthoyts, http://paste.tclers.tk/896 iNtimgt img_closetfiles close.giftimg_closeactivesclose_active.giftimg_closepressedsclose_pressed.giftclosetimagetactivetpresseds !disabledtborderitstickyttButtonNotebooksButtonNotebook.clienttnswesButtonNotebook.TabsButtonNotebook.tabsButtonNotebook.paddingttoptsidesButtonNotebook.focussButtonNotebook.labeltleftsButtonNotebook.closetchildrencCst|j|j|j}}}|j||}|jd||f}d|krp|jdg||_ndS(Ns@%d,%dRR(txtytwidgettidentifytindextstatet pressed_index(teventRRRtelemR((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pyt btn_press&s  cCs|j|j|j}}}|jdgs3dS|j||}|jd||f}d|kr|j|kr|j||jdn|j dgd|_dS(NRs@%d,%dRs<>s!pressed( RRRtinstateRRRtforgettevent_generateRtNone(RRRRRR((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pyt btn_release/s t TNotebooksstwidthitheighttstylet backgroundtredtgreentbluettexttRedtpaddingitGreentBluetexpanditfilltboth(Rspresseds !disabledR(Rs !disabledR("t__doc__tostTkintertttktTktroottpathtjointdirnamet__file__timgdirt PhotoImageti1ti2ti3tStyleR$telement_createtlayoutRR t bind_classtTruetNotebooktnbRRtFrametf1tf2tf3taddtpacktmainloop(((s:/usr/lib64/python2.7/Demo/tkinter/ttk/notebook_closebtn.pytsF    !$      <  PKZ$P P widget_state.pycnuW+A V Qc @sdZddlZddddddd d d g Zx eD]Zejd eq;Wd ZdejfdYZdZe dkrendS(s8Sample demo showing widget states and some font styling.iNtactivetdisabledtfocustpressedtselectedt backgroundtreadonlyt alternatetinvalidt!cCs%tttd}|j|dS(Ni(tstatestlentstate(twidgettnostate((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt reset_state stAppcBs2eZddZddZdZdZRS(cCstjj|dd|jj|tj|_|jjdd}t|j j d|}|j j d||_ d|j krd|j |_ n|d d kr|d nd |_ t ||d d krd nd |_g|_|jdS( Nt borderwidthitTButtontfontsfont configure %s -sizesfont configure %s -familyt s{%s}it-ti(tttktFramet__init__tmasterttitletStyletstyletlookuptstrttktevalt font_familyt fsize_prefixtintt base_fsizetupdate_widgetst_setup_widgets(tselfRtbtn_fonttfsize((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyRs#) icCs4|jjddd|j|j|j|fdS(NRRs%s %s%d(Rt configureR"R#R%(R(textra((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt _set_font#scCs|j|}|s'dg}d}nGt|j}g|D]}|tkr@|^q@}dt|}x(|jD]}t||j|qxW|j|dS(NRiii( t nametowidgettsettsplitR R R&RR R-(R(R tnewtextt goodstatest font_extrat newstatesR ((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyt _new_state's  %  c Cstj|dd}tj|dddd}|j|jddf|d <|j|jj||j|j d d d d |j dddd d d dd|j d ddddS(NttextsEnter states and watchtcursortxtermtvalidatetkeys%Ws%Ptvalidatecommandtfilltxtpadxitsidetlefttpadytanchortntbothtexpandi( RtButtontEntrytregisterR5RR&tappendR9tpack(R(tbtntentry((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyR'?s  "N(t__name__t __module__tNoneRR-R5R'(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyRs   cCstd}|jdS(NsWidget State Tester(Rtmainloop(tapp((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pytmainNs t__main__( t__doc__RR R RIRRRRRRM(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/widget_state.pyts  @  PKZ(vxnnplastik_theme.pyonuW+A V Qc@sdZddlZddlZddlZddlmZdgZidd6dd6d d 6d d 6ZiZd Z dZ dS(ssThis demonstrates good part of the syntax accepted by theme_create. This is a translation of plastik.tcl to python. You will need the images used by the plastik theme to test this. The images (and other tile themes) can be retrived by doing: $ cvs -z3 -d:pserver:anonymous@tktable.cvs.sourceforge.net:/cvsroot/tktable co tile-themes To test this module you should do, for example: import Tkinter import plastik_theme root = Tkinter.Tk() plastik_theme.install(plastik_image_dir) ... Where plastik_image_dir contains the path to the images directory used by the plastik theme, something like: tile-themes/plastik/plastik iN(t PhotoImagetinstalls#efefeftframes#aaaaaat disabledfgs#657a9etselectbgs#fffffftselectfgcCstjj|}tjj|s7td|nxWtjd|D]B}tjj|d}|d }t|d|ddt|id)d6fd?id@idAid'd6dd 6fgd#6fgd#6fgd#6fgd$6dB6iidCdDdCdCgdE6d6dF6iidGdDdGdDgdH6dCdCdDgd 6d6idIddDdJdDgfgd 6d6dK6iidCdH6d6dL6idMdNddidJd/gdS6dJdH6dTd6fdU6d36idMdVdddidJdYgdS6dZdH6d[d6fdU6d96idMd\ddddidd6fdU6da6idMdbddddidd6fdU6dg6idMdhidZdS6d+d6fdU6d,6iddU6d-6iddU6d*6idMdkidZdS6dd6fdU6d6iddU6d"6iddU6d6idMdndidd6fdU6dp6idMdqdidd6fdU6ds6idMdtdidd6fdU6dv6idMdwdidd6fdU6dy6idMdzidd6fdU6d{6idMd|iddS6dCdH6fdU6d}6idMd~idd6fdU6d6idMdiddS6dCdH6fdU6d6idMddidDdS6dZdJgdH6d[d6fdU6d6idMdSidJdS6dJdH6d[d6fdU6d6idMddid[d6dJdGddgdS6dJdJdgdH6fdU6d=6idMdidd6ddCdCdCgdS6fdU6d>6idMddddddidJdGddgdS6dJdJdgdH6d[d6fdU6d6idMdidd6ddCdCdCgdS6fdU6d6idMdidJdS6fdU6d6idMdddidCdDdCdCgdH6dJd/dJd/gdS6fdU6d6idMdidDdS6fdU6d6idMdidDdYgdS6fdU6d6idMdidYdDgdS6fdU6d6idMddidJd/gdS6dJdH6d[d6fdU6d6|jddS(NtplastiktdefaulttsettingsRt backgroundt troughcolorRtselectbackgroundRtselectforegroundtfieldbackgroundt TkDefaultFonttfontit borderwidtht configuretdisabledRt foregroundtmapt.sVertical.Scrollbar.uparrowttoptsidettstickysVertical.Scrollbar.downarrowtbottomsVertical.Scrollbar.troughtnssVertical.Scrollbar.thumbtexpandtunitsVertical.Scrollbar.griptchildrentlayoutsVertical.TScrollbarsHorizontal.Scrollbar.leftarrowtleftsHorizontal.Scrollbar.rightarrowtrightsHorizontal.Scrollbar.troughtewsHorizontal.Scrollbar.thumbsHorizontal.Scrollbar.gripsHorizontal.TScrollbari twidthtcentertanchors Button.buttons Button.focussButton.paddings Button.labeltTButtonsToolbutton.bordersToolbutton.buttonsToolbutton.paddingsToolbutton.labelt ToolbuttonsMenubutton.buttonsMenubutton.indicatorsMenubutton.focussMenubutton.paddingsMenubutton.labelt TMenubuttoniit tabmarginst TNotebookitpaddingtselectedis TNotebook.tabtTreeviewtimagesbutton-ntpressedsbutton-ptactivesbutton-htbordertewnsselement creates tbutton-ns tbutton-ps tbutton-hi itnewsscheck-nuscheck-hcscheck-pcscheck-huscheck-ncsCheckbutton.indicatorsradio-nusradio-hcsradio-pcsradio-husradio-ncsRadiobutton.indicatorshsb-nshsb-gshsb-tsvsb-nsvsb-gsvsb-ts arrowup-ns arrowup-psScrollbar.uparrows arrowdown-ns arrowdown-psScrollbar.downarrows arrowleft-ns arrowleft-psScrollbar.leftarrows arrowright-ns arrowright-psScrollbar.rightarrows hslider-nsHorizontal.Scale.sliders hslider-tsHorizontal.Scale.troughs vslider-nsVertical.Scale.sliders vslider-tsVertical.Scale.troughsentry-ntfocussentry-fs Entry.fieldsLabelframe.borderscombo-rscombo-raiiisarrow-dtescombo-ntreadonlyscombo-fascombo-as !readonlyscombo-fsCombobox.fieldsCombobox.downarrows notebook-csNotebook.clients notebook-tns notebook-tss notebook-tas Notebook.tabs hprogress-tsProgressbar.troughs hprogress-bsHorizontal.Progressbar.pbars vprogress-bsVertical.Progressbar.pbarstree-nstree-psTreeheading.cell(R?sbutton-p(R@sbutton-h(R<s tbutton-p(R?s tbutton-p(R@s tbutton-h(R@R<scheck-hc(R?R<scheck-pc(R@scheck-hu(R<scheck-nc(R@R<sradio-hc(R?R<sradio-pc(R@sradio-hu(R<sradio-nc(R>shsb-g(R>shsb-t(R>svsb-g(R>svsb-t(R?s arrowup-p(R?s arrowdown-p(R?s arrowleft-p(R?s arrowright-p(RDsentry-f(R@scombo-ra(sreadonlyR@scombo-ra(RDR@scombo-fa(R@scombo-a(s !readonlyRDscombo-f(sreadonlyscombo-r(R<s notebook-ts(R@s notebook-ta(R?stree-p(RtttktStylet theme_createtcolorst theme_use(Rtstyle((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyR.s        / /@@@!*'))"" "")).&.4!!-( t__doc__R RRGtTkinterRt__all__RJRRR(((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyts      PKZG4acombo_themes.pycnuW+A V Qc@sNdZddlZdejfdYZdZedkrJendS(sTtk Theme Selector. Although it is a theme selector, you won't notice many changes since there is only a combobox and a frame around. iNtAppcBs#eZdZdZdZRS(cCs-tjj|tj|_|jdS(N(tttktFramet__init__tStyletstylet_setup_widgets(tself((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyR scCs5|jjr1|jj}|jj|ndS(N(twidgettcurrenttgetRt theme_use(Rteventtnewtheme((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyt _change_themescCst|jj}|jddtj|d|dddd}|j|d|jd|j|j d d |j d d d d dS(Nis Pick a themetvalueststatetreadonlytheightis<>tfilltxtbothtexpandi( tlistRt theme_namestinsertRtComboboxtsettbindRtpack(Rtthemest themes_combo((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyRs (t__name__t __module__RRR(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyRs  cCs't}|jjd|jdS(Ns Ttk Combobox(Rtmasterttitletmainloop(tapp((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pytmain(s t__main__(t__doc__RRRR&R (((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyts    PKZG4acombo_themes.pyonuW+A V Qc@sNdZddlZdejfdYZdZedkrJendS(sTtk Theme Selector. Although it is a theme selector, you won't notice many changes since there is only a combobox and a frame around. iNtAppcBs#eZdZdZdZRS(cCs-tjj|tj|_|jdS(N(tttktFramet__init__tStyletstylet_setup_widgets(tself((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyR scCs5|jjr1|jj}|jj|ndS(N(twidgettcurrenttgetRt theme_use(Rteventtnewtheme((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyt _change_themescCst|jj}|jddtj|d|dddd}|j|d|jd|j|j d d |j d d d d dS(Nis Pick a themetvalueststatetreadonlytheightis<>tfilltxtbothtexpandi( tlistRt theme_namestinsertRtComboboxtsettbindRtpack(Rtthemest themes_combo((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyRs (t__name__t __module__RRR(((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyRs  cCs't}|jjd|jdS(Ns Ttk Combobox(Rtmasterttitletmainloop(tapp((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pytmain(s t__main__(t__doc__RRRR&R (((s5/usr/lib64/python2.7/Demo/tkinter/ttk/combo_themes.pyts    PKZakJ widget_state.pynuW+A"""Sample demo showing widget states and some font styling.""" import ttk states = ['active', 'disabled', 'focus', 'pressed', 'selected', 'background', 'readonly', 'alternate', 'invalid'] for state in states[:]: states.append("!" + state) def reset_state(widget): nostate = states[len(states) // 2:] widget.state(nostate) class App(ttk.Frame): def __init__(self, title=None): ttk.Frame.__init__(self, borderwidth=6) self.master.title(title) self.style = ttk.Style() # get default font size and family btn_font = self.style.lookup("TButton", "font") fsize = str(self.tk.eval("font configure %s -size" % btn_font)) self.font_family = self.tk.eval("font configure %s -family" % btn_font) if ' ' in self.font_family: self.font_family = '{%s}' % self.font_family self.fsize_prefix = fsize[0] if fsize[0] == '-' else '' self.base_fsize = int(fsize[1 if fsize[0] == '-' else 0:]) # a list to hold all the widgets that will have their states changed self.update_widgets = [] self._setup_widgets() def _set_font(self, extra=0): self.style.configure("TButton", font="%s %s%d" % (self.font_family, self.fsize_prefix, self.base_fsize + extra)) def _new_state(self, widget, newtext): widget = self.nametowidget(widget) if not newtext: goodstates = ["disabled"] font_extra = 0 else: # set widget state according to what has been entered in the entry newstates = set(newtext.split()) # eliminate duplicates # keep only the valid states goodstates = [state for state in newstates if state in states] # define a new font size based on amount of states font_extra = 2 * len(goodstates) # set new widget state for widget in self.update_widgets: reset_state(widget) # remove any previous state from the widget widget.state(goodstates) # update Ttk Button font size self._set_font(font_extra) return 1 def _setup_widgets(self): btn = ttk.Button(self, text='Enter states and watch') entry = ttk.Entry(self, cursor='xterm', validate="key") entry['validatecommand'] = (self.register(self._new_state), '%W', '%P') entry.focus() self.update_widgets.append(btn) entry.validate() entry.pack(fill='x', padx=6) btn.pack(side='left', pady=6, padx=6, anchor='n') self.pack(fill='both', expand=1) def main(): app = App("Widget State Tester") app.mainloop() if __name__ == "__main__": main() PKZaOtheme_selector.pynuW+A"""Ttk Theme Selector v2. This is an improvement from the other theme selector (themes_combo.py) since now you can notice theme changes in Ttk Combobox, Ttk Frame, Ttk Label and Ttk Button. """ import Tkinter import ttk class App(ttk.Frame): def __init__(self): ttk.Frame.__init__(self, borderwidth=3) self.style = ttk.Style() # XXX Ideally I wouldn't want to create a Tkinter.IntVar to make # it works with Checkbutton variable option. self.theme_autochange = Tkinter.IntVar(self, 0) self._setup_widgets() def _change_theme(self): self.style.theme_use(self.themes_combo.get()) def _theme_sel_changed(self, widget): if self.theme_autochange.get(): self._change_theme() def _setup_widgets(self): themes_lbl = ttk.Label(self, text="Themes") themes = self.style.theme_names() self.themes_combo = ttk.Combobox(self, values=themes, state="readonly") self.themes_combo.set(themes[0]) self.themes_combo.bind("<>", self._theme_sel_changed) change_btn = ttk.Button(self, text='Change Theme', command=self._change_theme) theme_change_checkbtn = ttk.Checkbutton(self, text="Change themes when combobox item is activated", variable=self.theme_autochange) themes_lbl.grid(ipadx=6, sticky="w") self.themes_combo.grid(row=0, column=1, padx=6, sticky="ew") change_btn.grid(row=0, column=2, padx=6, sticky="e") theme_change_checkbtn.grid(row=1, columnspan=3, sticky="w", pady=6) top = self.winfo_toplevel() top.rowconfigure(0, weight=1) top.columnconfigure(0, weight=1) self.columnconfigure(1, weight=1) self.grid(row=0, column=0, sticky="nsew", columnspan=3, rowspan=2) def main(): app = App() app.master.title("Theme Selector") app.mainloop() if __name__ == "__main__": main() PKZ(vxnnplastik_theme.pycnuW+A V Qc@sdZddlZddlZddlZddlmZdgZidd6dd6d d 6d d 6ZiZd Z dZ dS(ssThis demonstrates good part of the syntax accepted by theme_create. This is a translation of plastik.tcl to python. You will need the images used by the plastik theme to test this. The images (and other tile themes) can be retrived by doing: $ cvs -z3 -d:pserver:anonymous@tktable.cvs.sourceforge.net:/cvsroot/tktable co tile-themes To test this module you should do, for example: import Tkinter import plastik_theme root = Tkinter.Tk() plastik_theme.install(plastik_image_dir) ... Where plastik_image_dir contains the path to the images directory used by the plastik theme, something like: tile-themes/plastik/plastik iN(t PhotoImagetinstalls#efefeftframes#aaaaaat disabledfgs#657a9etselectbgs#fffffftselectfgcCstjj|}tjj|s7td|nxWtjd|D]B}tjj|d}|d }t|d|ddt|id)d6fd?id@idAid'd6dd 6fgd#6fgd#6fgd#6fgd$6dB6iidCdDdCdCgdE6d6dF6iidGdDdGdDgdH6dCdCdDgd 6d6idIddDdJdDgfgd 6d6dK6iidCdH6d6dL6idMdNddidJd/gdS6dJdH6dTd6fdU6d36idMdVdddidJdYgdS6dZdH6d[d6fdU6d96idMd\ddddidd6fdU6da6idMdbddddidd6fdU6dg6idMdhidZdS6d+d6fdU6d,6iddU6d-6iddU6d*6idMdkidZdS6dd6fdU6d6iddU6d"6iddU6d6idMdndidd6fdU6dp6idMdqdidd6fdU6ds6idMdtdidd6fdU6dv6idMdwdidd6fdU6dy6idMdzidd6fdU6d{6idMd|iddS6dCdH6fdU6d}6idMd~idd6fdU6d6idMdiddS6dCdH6fdU6d6idMddidDdS6dZdJgdH6d[d6fdU6d6idMdSidJdS6dJdH6d[d6fdU6d6idMddid[d6dJdGddgdS6dJdJdgdH6fdU6d=6idMdidd6ddCdCdCgdS6fdU6d>6idMddddddidJdGddgdS6dJdJdgdH6d[d6fdU6d6idMdidd6ddCdCdCgdS6fdU6d6idMdidJdS6fdU6d6idMdddidCdDdCdCgdH6dJd/dJd/gdS6fdU6d6idMdidDdS6fdU6d6idMdidDdYgdS6fdU6d6idMdidYdDgdS6fdU6d6idMddidJd/gdS6dJdH6d[d6fdU6d6|jddS(NtplastiktdefaulttsettingsRt backgroundt troughcolorRtselectbackgroundRtselectforegroundtfieldbackgroundt TkDefaultFonttfontit borderwidtht configuretdisabledRt foregroundtmapt.sVertical.Scrollbar.uparrowttoptsidettstickysVertical.Scrollbar.downarrowtbottomsVertical.Scrollbar.troughtnssVertical.Scrollbar.thumbtexpandtunitsVertical.Scrollbar.griptchildrentlayoutsVertical.TScrollbarsHorizontal.Scrollbar.leftarrowtleftsHorizontal.Scrollbar.rightarrowtrightsHorizontal.Scrollbar.troughtewsHorizontal.Scrollbar.thumbsHorizontal.Scrollbar.gripsHorizontal.TScrollbari twidthtcentertanchors Button.buttons Button.focussButton.paddings Button.labeltTButtonsToolbutton.bordersToolbutton.buttonsToolbutton.paddingsToolbutton.labelt ToolbuttonsMenubutton.buttonsMenubutton.indicatorsMenubutton.focussMenubutton.paddingsMenubutton.labelt TMenubuttoniit tabmarginst TNotebookitpaddingtselectedis TNotebook.tabtTreeviewtimagesbutton-ntpressedsbutton-ptactivesbutton-htbordertewnsselement creates tbutton-ns tbutton-ps tbutton-hi itnewsscheck-nuscheck-hcscheck-pcscheck-huscheck-ncsCheckbutton.indicatorsradio-nusradio-hcsradio-pcsradio-husradio-ncsRadiobutton.indicatorshsb-nshsb-gshsb-tsvsb-nsvsb-gsvsb-ts arrowup-ns arrowup-psScrollbar.uparrows arrowdown-ns arrowdown-psScrollbar.downarrows arrowleft-ns arrowleft-psScrollbar.leftarrows arrowright-ns arrowright-psScrollbar.rightarrows hslider-nsHorizontal.Scale.sliders hslider-tsHorizontal.Scale.troughs vslider-nsVertical.Scale.sliders vslider-tsVertical.Scale.troughsentry-ntfocussentry-fs Entry.fieldsLabelframe.borderscombo-rscombo-raiiisarrow-dtescombo-ntreadonlyscombo-fascombo-as !readonlyscombo-fsCombobox.fieldsCombobox.downarrows notebook-csNotebook.clients notebook-tns notebook-tss notebook-tas Notebook.tabs hprogress-tsProgressbar.troughs hprogress-bsHorizontal.Progressbar.pbars vprogress-bsVertical.Progressbar.pbarstree-nstree-psTreeheading.cell(R?sbutton-p(R@sbutton-h(R<s tbutton-p(R?s tbutton-p(R@s tbutton-h(R@R<scheck-hc(R?R<scheck-pc(R@scheck-hu(R<scheck-nc(R@R<sradio-hc(R?R<sradio-pc(R@sradio-hu(R<sradio-nc(R>shsb-g(R>shsb-t(R>svsb-g(R>svsb-t(R?s arrowup-p(R?s arrowdown-p(R?s arrowleft-p(R?s arrowright-p(RDsentry-f(R@scombo-ra(sreadonlyR@scombo-ra(RDR@scombo-fa(R@scombo-a(s !readonlyRDscombo-f(sreadonlyscombo-r(R<s notebook-ts(R@s notebook-ta(R?stree-p(RtttktStylet theme_createtcolorst theme_use(Rtstyle((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyR.s        / /@@@!*'))"" "")).&.4!!-( t__doc__R RRGtTkinterRt__all__RJRRR(((s6/usr/lib64/python2.7/Demo/tkinter/ttk/plastik_theme.pyts      PKZ_6&6&ttkcalendar.pycnuW+A V Qc@s{dZddlZddlZddlZddlZdZdejfdYZdZe dkrwendS(sQ Simple calendar using ttk Treeview together with calendar and datetime classes. iNcCs-|dkrtj|Stj||SdS(N(tNonetcalendart TextCalendartLocaleTextCalendar(tlocaletfwday((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt get_calendar s  tCalendarcBseZejjZejjZddZdZdZdZ dZ dZ dZ dZ dZd Zd Zd Zd Zed ZRS(c KsY|jdtj}|jd|jjj}|jd|jjj}|jdd}|jdd}|jdd}|j||d |_d|_ t j j |||t |||_|j|j|j|j||gtd D]!} |jjd d d d ^q |_|j|jjd|jdS(s WIDGET-SPECIFIC OPTIONS locale, firstweekday, year, month, selectbackground, selectforeground t firstweekdaytyeartmonthRtselectbackgrounds#ecffc4tselectforegrounds#05640eiittendtvaluessN(tpopRtMONDAYtdatetimetnowR R Rt_datet _selectiontttktFramet__init__Rt_calt_Calendar__setup_stylest_Calendar__place_widgetst_Calendar__config_calendart_Calendar__setup_selectiontranget _calendartinsertt_itemst_build_calendartbindt_Calendar__minsize( tselftmastertkwRR R Rtsel_bgtsel_fgt_((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRs$    4 cCs|dkrtd|n]|dkr;||jdTss L.TButtontlefts R.TButtontright(RtStyleR&tlayout(R%tstylet arrow_layout((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__setup_stylesQs c Cs&tj|}tj|ddd|j}tj|ddd|j}tj|dddd|_tjd d d d d d|_|j d|dddddd|j d||jj d|dddddd|j d|dddd|jj d|dddddddS(NR@s L.TButtontcommands R.TButtontwidthitanchortcentertshowR t selectmodetnonetheightitin_tsidettoptpadyitcolumnitrowitpadxi itexpandR3tbothtbottom( RRtButtont _prev_montht _next_monthtLabelt_headertTreeviewRtpacktgrid(R%thframetlbtntrbtn((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__place_widgetsZs!"%c s|jjdj}||jd<|jjddd|jjddd|d dtjtfd |D}x0|D](}|jj |d |d |d dqWdS(NitcolumnstheaderR+tgrey90R RRttagc3s|]}j|VqdS(N(tmeasure(t.0tcol(tfont(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pys qsRDtminwidthREte( RtformatweekheadertsplitRt tag_configureR ttkFonttFonttmaxRO(R%tcolstmaxwidthRg((Rhs4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__config_calendarjs   cstj|_tj|jd|dddd|_jddd|dd_j dfd |jj d fd |jj d|j dS( NR+t borderwidthithighlightthicknessR3REtwscs jS(N(t place_forget(tevt(tcanvas(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR;|ss cs jS(N(Rw(Rx(Ry(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR;}s( RnRot_fonttTkintertCanvasRR.t create_textR0R#t_pressed(R%R(R)((Rys4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__setup_selectionvs!cCsN|jjjjd\}}||jd }|jjj||dS(Ntxt+(RR&tgeometryRltindextminsize(R%RxRDRJ((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt __minsizes!c Cs|jj|jj}}|jj||d}|j|jd<|jj||}x~t|j D]m\}}|t |kr||ng}g|D]}|rd|nd^q} |j j |d| qiWdS(NiR0s%02dR R( RR R RtformatmonthnamettitleRYtmonthdayscalendart enumerateR!tlenRR,( R%R R RbtcaltindxR,tweektdaytfmt_week((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR"s")c Cs|\}}}}|jj|}|j}|jd|d||j|j|||dd|j|jd||jd|jd|d|d S( s%Configure canvas for a new selection.RDRJiiR0RKRtyN( RzReR.t configuretcoordsR0R/tplaceR( R%R0tbboxRRRDRJttextwRy((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt_show_selections "c Cs|j|j|j}}}|j|}|j|}| sQ||jkrUdS|j|d}t|sxdS|t|dd}|sdS|j ||} | sdSd|}|||f|_ |j || dS(s"Clicked somewhere in the calendar.NRis%02d( RRtwidgett identify_rowtidentify_columnR!R,RtintRRR( R%RxRRRR,ROt item_valuesR0R((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR~s"  cCs[|jj|j|jdd|_|j|jj|jjd|_|jdS(s,Updated calendar to show the previous month.tdaysiN(R.RwRt timedeltaRR R R"(R%((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRVs $cCs|jj|jj|jj}}|j|jdtj||dd|_|j|jj|jjd|_|j dS(s'Update calendar to show the next month.RiN( R.RwRR R RRt monthrangeRR"(R%R R ((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRWs  !$cCsF|js dS|jj|jj}}|j||t|jdS(s9Return a datetime representing the current selected date.iN(RRRR R RR(R%R R ((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt selections N(t__name__t __module__RRRRRR1R7RRRRR$R"RR~RVRWtpropertyR(((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRs    %       cCsddl}tj}|jdtdtj}|jddddd|jkrxt j }|j d n|j dS( Nis Ttk CalendarRRRiR3RStwintclam( tsysR{tTkRRRtSUNDAYR[tplatformRR>t theme_usetmainloop(RtroottttkcalR@((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyttests    t__main__( t__doc__RR{RnRRRRRR(((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyts      PKZ((roundframe.pyonuW+A V Qc @sdZddlZddlZejZejdddZejdddZejZ e j dd dd%d d d de j ddidd 6fge j dddej ddddZejddej ddddZejddddejeddZejddejddejddejeddd d!d"dZejddddejdd#ejdd$ejdS(&shTtk Frame with rounded corners. Based on an example by Bryan Oakley, found at: http://wiki.tcl.tk/20152iNtframeFocusBordertdatas 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 Ry/99NIz//oGrZpUUEAAOw==t frameBorders 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t RoundedFrametimagetfocustborderitstickytnsewtTEntryt borderwidthitstyletpaddingi tfilltxtbothtexpandittexttTests cCstjdgS(NR(tframetstate(tevt((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pytgss cCstjdgS(Ns!focus(RR(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRhstbgtwhitethighlightthicknesscCstjdgS(NR(tframe2R(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRlscCstjdgS(Ns!focus(RR(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRms(sfocusR(t__doc__tTkintertttktTktroott PhotoImagetimg1timg2tStyleR telement_createtlayoutt configuretFrameRtpackRtEntrytentrytbindtTextRtmainloop(((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyts2    &  $   !PKZyTt%t%plastik_theme.pynuW+A"""This demonstrates good part of the syntax accepted by theme_create. This is a translation of plastik.tcl to python. You will need the images used by the plastik theme to test this. The images (and other tile themes) can be retrived by doing: $ cvs -z3 -d:pserver:anonymous@tktable.cvs.sourceforge.net:/cvsroot/tktable \ co tile-themes To test this module you should do, for example: import Tkinter import plastik_theme root = Tkinter.Tk() plastik_theme.install(plastik_image_dir) ... Where plastik_image_dir contains the path to the images directory used by the plastik theme, something like: tile-themes/plastik/plastik """ import os import glob import ttk from Tkinter import PhotoImage __all__ = ['install'] colors = { "frame": "#efefef", "disabledfg": "#aaaaaa", "selectbg": "#657a9e", "selectfg": "#ffffff" } imgs = {} def _load_imgs(imgdir): imgdir = os.path.expanduser(imgdir) if not os.path.isdir(imgdir): raise Exception("%r is not a directory, can't load images" % imgdir) for f in glob.glob("%s/*.gif" % imgdir): img = os.path.split(f)[1] name = img[:-4] imgs[name] = PhotoImage(name, file=f, format="gif89") def install(imgdir): _load_imgs(imgdir) style = ttk.Style() style.theme_create("plastik", "default", settings={ ".": { "configure": {"background": colors['frame'], "troughcolor": colors['frame'], "selectbackground": colors['selectbg'], "selectforeground": colors['selectfg'], "fieldbackground": colors['frame'], "font": "TkDefaultFont", "borderwidth": 1}, "map": {"foreground": [("disabled", colors['disabledfg'])]} }, "Vertical.TScrollbar": {"layout": [ ("Vertical.Scrollbar.uparrow", {"side": "top", "sticky": ''}), ("Vertical.Scrollbar.downarrow", {"side": "bottom", "sticky": ''}), ("Vertical.Scrollbar.uparrow", {"side": "bottom", "sticky": ''}), ("Vertical.Scrollbar.trough", {"sticky": "ns", "children": [("Vertical.Scrollbar.thumb", {"expand": 1, "unit": 1, "children": [("Vertical.Scrollbar.grip", {"sticky": ''})] })] })] }, "Horizontal.TScrollbar": {"layout": [ ("Horizontal.Scrollbar.leftarrow", {"side": "left", "sticky": ''}), ("Horizontal.Scrollbar.rightarrow", {"side": "right", "sticky": ''}), ("Horizontal.Scrollbar.leftarrow", {"side": "right", "sticky": ''}), ("Horizontal.Scrollbar.trough", {"sticky": "ew", "children": [("Horizontal.Scrollbar.thumb", {"expand": 1, "unit": 1, "children": [("Horizontal.Scrollbar.grip", {"sticky": ''})] })] })] }, "TButton": { "configure": {"width": 10, "anchor": "center"}, "layout": [ ("Button.button", {"children": [("Button.focus", {"children": [("Button.padding", {"children": [("Button.label", {"side": "left", "expand": 1})] })] })] }) ] }, "Toolbutton": { "configure": {"anchor": "center"}, "layout": [ ("Toolbutton.border", {"children": [("Toolbutton.button", {"children": [("Toolbutton.padding", {"children": [("Toolbutton.label", {"side":"left", "expand":1})] })] })] }) ] }, "TMenubutton": {"layout": [ ("Menubutton.button", {"children": [("Menubutton.indicator", {"side": "right"}), ("Menubutton.focus", {"children": [("Menubutton.padding", {"children": [("Menubutton.label", {"side": "left", "expand": 1})] })] })] })] }, "TNotebook": {"configure": {"tabmargins": [0, 2, 0, 0]}}, "TNotebook.tab": { "configure": {"padding": [6, 2, 6, 2], "expand": [0, 0, 2]}, "map": {"expand": [("selected", [1, 2, 4, 2])]} }, "Treeview": {"configure": {"padding": 0}}, # elements "Button.button": {"element create": ("image", 'button-n', ("pressed", 'button-p'), ("active", 'button-h'), {"border": [4, 10], "padding": 4, "sticky":"ewns"} ) }, "Toolbutton.button": {"element create": ("image", 'tbutton-n', ("selected", 'tbutton-p'), ("pressed", 'tbutton-p'), ("active", 'tbutton-h'), {"border": [4, 9], "padding": 3, "sticky": "news"} ) }, "Checkbutton.indicator": {"element create": ("image", 'check-nu', ('active', 'selected', 'check-hc'), ('pressed', 'selected', 'check-pc'), ('active', 'check-hu'), ("selected", 'check-nc'), {"sticky": ''} ) }, "Radiobutton.indicator": {"element create": ("image", 'radio-nu', ('active', 'selected', 'radio-hc'), ('pressed', 'selected', 'radio-pc'), ('active', 'radio-hu'), ('selected', 'radio-nc'), {"sticky": ''} ) }, "Horizontal.Scrollbar.thumb": {"element create": ("image", 'hsb-n', {"border": 3, "sticky": "ew"}) }, "Horizontal.Scrollbar.grip": {"element create": ("image", 'hsb-g')}, "Horizontal.Scrollbar.trough": {"element create": ("image", 'hsb-t')}, "Vertical.Scrollbar.thumb": {"element create": ("image", 'vsb-n', {"border": 3, "sticky": "ns"}) }, "Vertical.Scrollbar.grip": {"element create": ("image", 'vsb-g')}, "Vertical.Scrollbar.trough": {"element create": ("image", 'vsb-t')}, "Scrollbar.uparrow": {"element create": ("image", 'arrowup-n', ("pressed", 'arrowup-p'), {"sticky": ''}) }, "Scrollbar.downarrow": {"element create": ("image", 'arrowdown-n', ("pressed", 'arrowdown-p'), {'sticky': ''}) }, "Scrollbar.leftarrow": {"element create": ("image", 'arrowleft-n', ("pressed", 'arrowleft-p'), {'sticky': ''}) }, "Scrollbar.rightarrow": {"element create": ("image", 'arrowright-n', ("pressed", 'arrowright-p'), {'sticky': ''}) }, "Horizontal.Scale.slider": {"element create": ("image", 'hslider-n', {'sticky': ''}) }, "Horizontal.Scale.trough": {"element create": ("image", 'hslider-t', {'border': 1, 'padding': 0}) }, "Vertical.Scale.slider": {"element create": ("image", 'vslider-n', {'sticky': ''}) }, "Vertical.Scale.trough": {"element create": ("image", 'vslider-t', {'border': 1, 'padding': 0}) }, "Entry.field": {"element create": ("image", 'entry-n', ("focus", 'entry-f'), {'border': 2, 'padding': [3, 4], 'sticky': 'news'} ) }, "Labelframe.border": {"element create": ("image", 'border', {'border': 4, 'padding': 4, 'sticky': 'news'}) }, "Menubutton.button": {"element create": ("image", 'combo-r', ('active', 'combo-ra'), {'sticky': 'news', 'border': [4, 6, 24, 15], 'padding': [4, 4, 5]} ) }, "Menubutton.indicator": {"element create": ("image", 'arrow-d', {"sticky": "e", "border": [15, 0, 0, 0]}) }, "Combobox.field": {"element create": ("image", 'combo-n', ('readonly', 'active', 'combo-ra'), ('focus', 'active', 'combo-fa'), ('active', 'combo-a'), ('!readonly', 'focus', 'combo-f'), ('readonly', 'combo-r'), {'border': [4, 6, 24, 15], 'padding': [4, 4, 5], 'sticky': 'news'} ) }, "Combobox.downarrow": {"element create": ("image", 'arrow-d', {'sticky': 'e', 'border': [15, 0, 0, 0]}) }, "Notebook.client": {"element create": ("image", 'notebook-c', {'border': 4}) }, "Notebook.tab": {"element create": ("image", 'notebook-tn', ("selected", 'notebook-ts'), ("active", 'notebook-ta'), {'padding': [0, 2, 0, 0], 'border': [4, 10, 4, 10]} ) }, "Progressbar.trough": {"element create": ("image", 'hprogress-t', {'border': 2}) }, "Horizontal.Progressbar.pbar": {"element create": ("image", 'hprogress-b', {'border': [2, 9]}) }, "Vertical.Progressbar.pbar": {"element create": ("image", 'vprogress-b', {'border': [9, 2]}) }, "Treeheading.cell": {"element create": ("image", 'tree-n', ("pressed", 'tree-p'), {'border': [4, 10], 'padding': 4, 'sticky': 'news'} ) } }) style.theme_use("plastik") PKZM^|ggtreeview_multicolumn.pycnuW+A V Qc@sdZddlZddlZddlZd6Zd7d8d9d:d;d<d=d>d?d@dAdBdCdDdEgZd1Zd2efd3YZd4Z e d5kre ndS(FsCDemo based on the demo mclist included with tk source distribution.iNtcountrytcapitaltcurrencyt Argentinas Buenos AirestARSt AustraliatCanberratAUDtBraziltBraziliatBRLtCanadatOttawatCADtChinatBeijingtCNYtFrancetParistEURtGermanytBerlintIndias New DelhitINRtItalytRometJapantTokyotJPYtMexicos Mexico CitytMXNtRussiatMoscowtRUBs South AfricatPretoriatZARsUnited KingdomtLondontGBPs United StatessWashington, D.C.tUSDcsgjdD]}j|||f^q}|jdx1t|D]#\}}j|dd|qQWj|d|fddS(s/Sort tree contents when a column is clicked on.ttreverseitcommandcst|t S(N(tsortbytint(tcol(t descendingttree(s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt%sN(t get_childrentsettsortt enumeratetmovetheading(R.R,R-tchildtdatatindxtitem((R-R.s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR*s 4 tAppcBs#eZdZdZdZRS(cCs!d|_|j|jdS(N(tNoneR.t_setup_widgetst _build_tree(tself((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyt__init__(s  c Csetjdddddddd$d d }|jd dtj}|jd ddttjdtdd|_tjddd|jj }tjddd|jj }|jj d|j d|j |jj ddddddd||j dd dddd!d||j dddd dd"d||jdd#d |jdd#d dS(%Nt wraplengtht4itjustifytlefttanchortntpaddingi iittextsTtk is the new Tk themed widget set. One of the widgets it includes is a tree widget, which can be configured to display multiple columns of informational data without displaying the tree itself. This is a simple way to build a listbox that has multiple columns. Clicking on the heading for a column will sort the data by that column. You can also change the width of the columns by dragging the boundary between them.tfilltxtbothtexpandtcolumnstshowtheadingstorienttverticalR)t horizontaltyscrollcommandtxscrollcommandtcolumnitrowtstickytnsewtin_itnstewtweight(i ii i(tttktLabeltpacktFrametTruetTreeviewt tree_columnsR.t Scrollbartyviewtxviewt configureR1tgridtgrid_columnconfiguretgrid_rowconfigure(R>tmsgt containertvsbthsb((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR<-s  %""c s xgtD]_}jj|d|jd|fdjj|dtjj|jqWxtD]}jj ddd|xnt |D]`\}}tjj|}jjt|dd|krjjt|d|qqWqqWdS(NRGR)cstj|dS(Ni(R*R.(tc(R>(s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR/MstwidthR'tendtvalues( RbR.R5ttitleRTttkFonttFonttmeasuret tree_datatinsertR3R;(R>R,R9R8tvaltilen((R>s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR=Js / "(t__name__t __module__R?R<R=(((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyR:'s  cCstj}|jd|jdddl}y|jdWn*tk roddl}|jdnXt }|j dS(NsMulti-Column Listtmclistis~/tile-themes/plastik/plastiks'plastik theme being used without images( tTkintertTktwm_titlet wm_iconnamet plastik_themetinstallt ExceptiontwarningstwarnR:tmainloop(trootRRtapp((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pytmain[s       t__main__(RRR(Rs Buenos AiresR(RRR(RR R (R R R (RRR(RRR(RRR(Rs New DelhiR(RRR(RRR(Rs Mexico CityR(RR R!(s South AfricaR"R#(sUnited KingdomR$R%(s United StatessWashington, D.C.R&( t__doc__R}RsR\RbRvR*tobjectR:RRz(((s=/usr/lib64/python2.7/Demo/tkinter/ttk/treeview_multicolumn.pyts0     4  PKZ((roundframe.pycnuW+A V Qc @sdZddlZddlZejZejdddZejdddZejZ e j dd dd%d d d de j ddidd 6fge j dddej ddddZejddej ddddZejddddejeddZejddejddejddejeddd d!d"dZejddddejdd#ejdd$ejdS(&shTtk Frame with rounded corners. Based on an example by Bryan Oakley, found at: http://wiki.tcl.tk/20152iNtframeFocusBordertdatas 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 Ry/99NIz//oGrZpUUEAAOw==t frameBorders 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t RoundedFrametimagetfocustborderitstickytnsewtTEntryt borderwidthitstyletpaddingi tfilltxtbothtexpandittexttTests cCstjdgS(NR(tframetstate(tevt((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pytgss cCstjdgS(Ns!focus(RR(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRhstbgtwhitethighlightthicknesscCstjdgS(NR(tframe2R(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRlscCstjdgS(Ns!focus(RR(R((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyRms(sfocusR(t__doc__tTkintertttktTktroott PhotoImagetimg1timg2tStyleR telement_createtlayoutt configuretFrameRtpackRtEntrytentrytbindtTextRtmainloop(((s3/usr/lib64/python2.7/Demo/tkinter/ttk/roundframe.pyts2    &  $   !PKZ^treeview_multicolumn.pynuW+A"""Demo based on the demo mclist included with tk source distribution.""" import Tkinter import tkFont import ttk tree_columns = ("country", "capital", "currency") tree_data = [ ("Argentina", "Buenos Aires", "ARS"), ("Australia", "Canberra", "AUD"), ("Brazil", "Brazilia", "BRL"), ("Canada", "Ottawa", "CAD"), ("China", "Beijing", "CNY"), ("France", "Paris", "EUR"), ("Germany", "Berlin", "EUR"), ("India", "New Delhi", "INR"), ("Italy", "Rome", "EUR"), ("Japan", "Tokyo", "JPY"), ("Mexico", "Mexico City", "MXN"), ("Russia", "Moscow", "RUB"), ("South Africa", "Pretoria", "ZAR"), ("United Kingdom", "London", "GBP"), ("United States", "Washington, D.C.", "USD") ] def sortby(tree, col, descending): """Sort tree contents when a column is clicked on.""" # grab values to sort data = [(tree.set(child, col), child) for child in tree.get_children('')] # reorder data data.sort(reverse=descending) for indx, item in enumerate(data): tree.move(item[1], '', indx) # switch the heading so that it will sort in the opposite direction tree.heading(col, command=lambda col=col: sortby(tree, col, int(not descending))) class App(object): def __init__(self): self.tree = None self._setup_widgets() self._build_tree() def _setup_widgets(self): msg = ttk.Label(wraplength="4i", justify="left", anchor="n", padding=(10, 2, 10, 6), text=("Ttk is the new Tk themed widget set. One of the widgets it " "includes is a tree widget, which can be configured to " "display multiple columns of informational data without " "displaying the tree itself. This is a simple way to build " "a listbox that has multiple columns. Clicking on the " "heading for a column will sort the data by that column. " "You can also change the width of the columns by dragging " "the boundary between them.")) msg.pack(fill='x') container = ttk.Frame() container.pack(fill='both', expand=True) # XXX Sounds like a good support class would be one for constructing # a treeview with scrollbars. self.tree = ttk.Treeview(columns=tree_columns, show="headings") vsb = ttk.Scrollbar(orient="vertical", command=self.tree.yview) hsb = ttk.Scrollbar(orient="horizontal", command=self.tree.xview) self.tree.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set) self.tree.grid(column=0, row=0, sticky='nsew', in_=container) vsb.grid(column=1, row=0, sticky='ns', in_=container) hsb.grid(column=0, row=1, sticky='ew', in_=container) container.grid_columnconfigure(0, weight=1) container.grid_rowconfigure(0, weight=1) def _build_tree(self): for col in tree_columns: self.tree.heading(col, text=col.title(), command=lambda c=col: sortby(self.tree, c, 0)) # XXX tkFont.Font().measure expected args are incorrect according # to the Tk docs self.tree.column(col, width=tkFont.Font().measure(col.title())) for item in tree_data: self.tree.insert('', 'end', values=item) # adjust columns lenghts if necessary for indx, val in enumerate(item): ilen = tkFont.Font().measure(val) if self.tree.column(tree_columns[indx], width=None) < ilen: self.tree.column(tree_columns[indx], width=ilen) def main(): root = Tkinter.Tk() root.wm_title("Multi-Column List") root.wm_iconname("mclist") import plastik_theme try: plastik_theme.install('~/tile-themes/plastik/plastik') except Exception: import warnings warnings.warn("plastik theme being used without images") app = App() root.mainloop() if __name__ == "__main__": main() PKZnnF notebook_closebtn.pynuW+A"""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("<>") widget.state(["!pressed"]) widget.pressed_index = None root.bind_class("TNotebook", "", btn_press, True) root.bind_class("TNotebook", "", 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() PKZ[ѕ> > theme_selector.pyonuW+A V Qc@sZdZddlZddlZdejfdYZdZedkrVendS(sTtk Theme Selector v2. This is an improvement from the other theme selector (themes_combo.py) since now you can notice theme changes in Ttk Combobox, Ttk Frame, Ttk Label and Ttk Button. iNtAppcBs,eZdZdZdZdZRS(cCsHtjj|ddtj|_tj|d|_|jdS(Nt borderwidthii( tttktFramet__init__tStyletstyletTkintertIntVarttheme_autochanget_setup_widgets(tself((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR scCs|jj|jjdS(N(Rt theme_uset themes_combotget(R ((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt _change_themescCs |jjr|jndS(N(R RR(R twidget((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyt_theme_sel_changedsc Cstj|dd}|jj}tj|d|dd|_|jj|d|jjd|jtj |ddd |j }tj |dd d |j }|j d d dd|jj dddddd dd|j dddddd dd|j dddddddd |j}|jddd|jddd|jddd|j dddddddddddS(NttexttThemestvalueststatetreadonlyis<>s Change Themetcommands-Change themes when combobox item is activatedtvariabletipadxitstickytwtrowtcolumnitpadxtewitet columnspanitpadytweighttnsewtrowspan(RtLabelRt theme_namestComboboxR tsettbindRtButtonRt CheckbuttonR tgridtwinfo_toplevelt rowconfiguretcolumnconfigure(R t themes_lbltthemest change_btnttheme_change_checkbtnttop((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR s&   %"" (t__name__t __module__RRRR (((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyR s  cCs't}|jjd|jdS(NsTheme Selector(Rtmasterttitletmainloop(tapp((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pytmain7s t__main__(t__doc__RRRRR<R6(((s7/usr/lib64/python2.7/Demo/tkinter/ttk/theme_selector.pyts   -  PKZ_6&6&ttkcalendar.pyonuW+A V Qc@s{dZddlZddlZddlZddlZdZdejfdYZdZe dkrwendS(sQ Simple calendar using ttk Treeview together with calendar and datetime classes. iNcCs-|dkrtj|Stj||SdS(N(tNonetcalendart TextCalendartLocaleTextCalendar(tlocaletfwday((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt get_calendar s  tCalendarcBseZejjZejjZddZdZdZdZ dZ dZ dZ dZ dZd Zd Zd Zd Zed ZRS(c KsY|jdtj}|jd|jjj}|jd|jjj}|jdd}|jdd}|jdd}|j||d |_d|_ t j j |||t |||_|j|j|j|j||gtd D]!} |jjd d d d ^q |_|j|jjd|jdS(s WIDGET-SPECIFIC OPTIONS locale, firstweekday, year, month, selectbackground, selectforeground t firstweekdaytyeartmonthRtselectbackgrounds#ecffc4tselectforegrounds#05640eiittendtvaluessN(tpopRtMONDAYtdatetimetnowR R Rt_datet _selectiontttktFramet__init__Rt_calt_Calendar__setup_stylest_Calendar__place_widgetst_Calendar__config_calendart_Calendar__setup_selectiontranget _calendartinsertt_itemst_build_calendartbindt_Calendar__minsize( tselftmastertkwRR R Rtsel_bgtsel_fgt_((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRs$    4 cCs|dkrtd|n]|dkr;||jdTss L.TButtontlefts R.TButtontright(RtStyleR&tlayout(R%tstylet arrow_layout((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__setup_stylesQs c Cs&tj|}tj|ddd|j}tj|ddd|j}tj|dddd|_tjd d d d d d|_|j d|dddddd|j d||jj d|dddddd|j d|dddd|jj d|dddddddS(NR@s L.TButtontcommands R.TButtontwidthitanchortcentertshowR t selectmodetnonetheightitin_tsidettoptpadyitcolumnitrowitpadxi itexpandR3tbothtbottom( RRtButtont _prev_montht _next_monthtLabelt_headertTreeviewRtpacktgrid(R%thframetlbtntrbtn((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__place_widgetsZs!"%c s|jjdj}||jd<|jjddd|jjddd|d dtjtfd |D}x0|D](}|jj |d |d |d dqWdS(NitcolumnstheaderR+tgrey90R RRttagc3s|]}j|VqdS(N(tmeasure(t.0tcol(tfont(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pys qsRDtminwidthREte( RtformatweekheadertsplitRt tag_configureR ttkFonttFonttmaxRO(R%tcolstmaxwidthRg((Rhs4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__config_calendarjs   cstj|_tj|jd|dddd|_jddd|dd_j dfd |jj d fd |jj d|j dS( NR+t borderwidthithighlightthicknessR3REtwscs jS(N(t place_forget(tevt(tcanvas(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR;|ss cs jS(N(Rw(Rx(Ry(s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR;}s( RnRot_fonttTkintertCanvasRR.t create_textR0R#t_pressed(R%R(R)((Rys4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt__setup_selectionvs!cCsN|jjjjd\}}||jd }|jjj||dS(Ntxt+(RR&tgeometryRltindextminsize(R%RxRDRJ((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt __minsizes!c Cs|jj|jj}}|jj||d}|j|jd<|jj||}x~t|j D]m\}}|t |kr||ng}g|D]}|rd|nd^q} |j j |d| qiWdS(NiR0s%02dR R( RR R RtformatmonthnamettitleRYtmonthdayscalendart enumerateR!tlenRR,( R%R R RbtcaltindxR,tweektdaytfmt_week((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR"s")c Cs|\}}}}|jj|}|j}|jd|d||j|j|||dd|j|jd||jd|jd|d|d S( s%Configure canvas for a new selection.RDRJiiR0RKRtyN( RzReR.t configuretcoordsR0R/tplaceR( R%R0tbboxRRRDRJttextwRy((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt_show_selections "c Cs|j|j|j}}}|j|}|j|}| sQ||jkrUdS|j|d}t|sxdS|t|dd}|sdS|j ||} | sdSd|}|||f|_ |j || dS(s"Clicked somewhere in the calendar.NRis%02d( RRtwidgett identify_rowtidentify_columnR!R,RtintRRR( R%RxRRRR,ROt item_valuesR0R((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyR~s"  cCs[|jj|j|jdd|_|j|jj|jjd|_|jdS(s,Updated calendar to show the previous month.tdaysiN(R.RwRt timedeltaRR R R"(R%((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRVs $cCs|jj|jj|jj}}|j|jdtj||dd|_|j|jj|jjd|_|j dS(s'Update calendar to show the next month.RiN( R.RwRR R RRt monthrangeRR"(R%R R ((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRWs  !$cCsF|js dS|jj|jj}}|j||t|jdS(s9Return a datetime representing the current selected date.iN(RRRR R RR(R%R R ((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyt selections N(t__name__t __module__RRRRRR1R7RRRRR$R"RR~RVRWtpropertyR(((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyRs    %       cCsddl}tj}|jdtdtj}|jddddd|jkrxt j }|j d n|j dS( Nis Ttk CalendarRRRiR3RStwintclam( tsysR{tTkRRRtSUNDAYR[tplatformRR>t theme_usetmainloop(RtroottttkcalR@((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyttests    t__main__( t__doc__RR{RnRRRRRR(((s4/usr/lib64/python2.7/Demo/tkinter/ttk/ttkcalendar.pyts      PKZMmac_searchentry.pyonuW+A V Qc @sdZddlZddlZejZdZejddeddZejddedd Zej Z e j d d dd!d dddgdde j dd idd6dd 6didd6didd6fgd6fgd6fge j dddej ddejddddZejddddZejddd dejddd dejdS("s\Mac style search widget Translated from Tcl code by Schelte Bron, http://wiki.tcl.tk/18188 iNs R0lGODlhKgAaAOfnAFdZVllbWFpcWVtdWlxeW11fXF9hXmBiX2ZnZWhpZ2lraGxua25wbXJ0 cXR2c3V3dHZ4dXh6d3x+e31/fH6AfYSGg4eJhoiKh4qMiYuNio2PjHmUqnqVq3yXrZGTkJKU kX+asJSWk32cuJWXlIGcs5aYlX6euZeZloOetZial4SftpqbmIWgt4GhvYahuIKivpudmYei uYOjv5yem4ijuoSkwIWlwYmlu56gnYamwp+hnoenw4unvaCin4ioxJCnuZykrImpxZmlsoaq zI2pv6KkoZGouoqqxpqms4erzaOloo6qwYurx5Kqu5untIiszqSmo5CrwoysyJeqtpOrvJyo tZGsw42typSsvaaopZKtxJWtvp6qt4+uy6epppOuxZCvzKiqp5quuZSvxoyx06mrqJWwx42y 1JKxzpmwwaqsqZaxyI6z1ZqxwqutqpOzz4+01qyuq56yvpizypS00Jm0y5W10Zq1zJa20rCy rpu3zqizwbGzr6C3yZy4z7K0saG4yp250LO1sqK5y5660Z+70qO7zKy4xaC806S8zba4taG9 1KW9zq66x6+7yLi6t6S/1rC8yrm7uLO8xLG9y7q8ubS9xabB2anB07K+zLW+xrO/za7CzrTA zrjAyLXBz77BvbbC0K/G2LjD0bnE0rLK28TGw8bIxcLL07vP28HN28rMycvOyr/T38DU4cnR 2s/RztHT0NLU0cTY5MrW5MvX5dHX2c3Z59bY1dPb5Nbb3dLe7Nvd2t3f3NXh797g3d3j5dnl 9OPl4eTm4+Ln6tzo9uXn5Obo5eDp8efp5uHq8uXq7ejq5+nr6OPs9Ovu6unu8O3v6+vw8+7w 7ezx9O/x7vDy7/Hz8O/19/P18vT38/L3+fb49Pf59vX6/fj69/b7/vn7+Pr8+ff9//v9+vz/ +/7//P////////////////////////////////////////////////////////////////// /////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJZAD/ACwC AAIAKAAWAAAI/gD/CRz4bwUGCg8eQFjIsGHDBw4iTLAQgqBFgisuePCiyJOpUyBDihRpypMi Lx8qaLhIMIyGFZ5sAUsmjZrNmzhzWpO2DJgtTysqfGDpxoMbW8ekeQsXzty4p1CjRjUXrps3 asJsuclQ4uKKSbamMR3n1JzZs2jRkh1HzuxVXX8y4CDYAwqua+DInVrRwMGJU2kDp31KThy1 XGWGDlxhi1rTPAUICBBAoEAesoIzn6Vm68MKgVAUHftmzhOCBCtQwQKSoABgzZnJdSMmyIPA FbCotdUQAIhNa9B6DPCAGbZac+SowVIMRVe4pwkA4GpqDlwuAAmMZx4nTtfnf1mO5JEDNy46 MHJkxQEDgKC49rPjwC0bqGaZuOoZAKjBPE4NgAzUvYcWOc0QZF91imAnCDHJ5JFAAJN0I2Ba 4iRDUC/gOEVNDwIUcEABCAgAAATUTIgWOMBYRFp80ghiAQIIVAAEAwJIYI2JZnUji0XSYAYO NcsQA8wy0hCTwAASXGOiONFcxAtpTokTHznfiLMNMAkcAMuE43jDC0vLeGOWe2R5o4sn1LgH GzkWsvTPMgEOaA433Ag4TjjMuDkQMNi0tZ12sqWoJ0HATMPNffAZZ6U0wLAyqJ62RGoLLrhI aqmlpzwaEAAh+QQJZAD/ACwAAAAAKgAaAAAI/gD/CRw40JEhQoEC+fGjcOHCMRAjRkxDsKLF f5YcAcID582ZjyBDJhmZZIjJIUySEDHiBMhFghrtdNnRAgSHmzhz6sTZQcSLITx+CHn5bxSk Nz5MCMGy55CjTVCjbuJEtSrVQ3uwqDBRQwrFi476SHHxow8qXcemVbPGtm21t3CnTaP27Jgu VHtuiIjBsuImQkRiiEEFTNo2cOTMKV7MuLE5cN68QUOGSgwKG1EqJqJDY8+rZt8UjxtNunTj cY3DgZOWS46KIFgGjiI0ZIsqaqNNjWjgYMUpx8Adc3v2aosNMAI1DbqyI9WycOb4IAggQEAB A3lQBxet/TG4cMpI/tHwYeSfIzxM0uTKNs7UgAQrYL1akaDA7+3bueVqY4NJlUhIcQLNYx8E AIQ01mwjTQ8DeNAdfouNA8440GBCQxJY3MEGD6p4Y844CQCAizcSgpMLAAlAuJ03qOyQRBR3 nEHEK+BMGKIui4kDDAAIPKiiYuSYSMQQRCDCxhiziPMYBgDkEaEaAGQA3Y+MjUPOLFoMoUUh cKxRC4ngeILiH8Qkk0cCAUzSDZWpzbLEE1EwggcYqWCj2DNADFDAAQUgIAAAEFDDJmPYqNJF F1s4cscTmCDjDTjdSPOHBQggUAEQDAgggTWDPoYMJkFoUdRmddyyjWLeULMMMcAsIw0x4wkM IME1g25zyxpHxFYUHmyIggw4H4ojITnfiLMNMAkcAAub4BQjihRdDGTJHmvc4Qo1wD6Imje6 eILbj+BQ4wqu5Q3ECSJ0FOKKMtv4mBg33Pw4zjbKuBIIE1xYpIkhdQQiyi7OtAucj6dt48wu otQhBRa6VvSJIRwhIkotvgRTzMUYZ6xxMcj4QkspeKDxxRhEmUfIHWjAgQcijEDissuXvCyz zH7Q8YQURxDhUsn/bCInR3AELfTQZBRt9BBJkCGFFVhMwTNBlnBCSCGEIJQQIAklZMXWRBAR RRRWENHwRQEBADs=tsearch1tdatatformats gif -index 0tsearch2s gif -index 1s Search.fieldtimagetfocustborderiiitstickytews Search.entrytnsweis Entry.paddingsEntry.textareatchildrent backgrounds#b2b2b2tstyletwidthitpadxi tpady(RR(t__doc__tTkintertttktTktrootRt PhotoImagets1ts2tStyleR telement_createtlayoutt configuretEntryte1te2tgridtmainloop(((s8/usr/lib64/python2.7/Demo/tkinter/ttk/mac_searchentry.pyts(   )   +PKZqP dirbrowser.pynuW+APKZ[ѕ> >  theme_selector.pycnuW+APKZMZmac_searchentry.pycnuW+APKZ<&&dirbrowser.pyonuW+APKZ=TJ 5notebook_closebtn.pyonuW+APKZǑ@@Alistbox_scrollcmd.pyonuW+APKZ/ QQmHcombo_themes.pynuW+APKZ} } Nttkcalendar.pynuW+APKZy5L oroundframe.pynuW+APKZ[օmac_searchentry.pynuW+APKZ$P P widget_state.pyonuW+APKZM^|gg.treeview_multicolumn.pyonuW+APKZǑ@@ݷlistbox_scrollcmd.pycnuW+APKZ|!eebimg/close_pressed.gifnuW+APKZ.PP img/close_active.gifnuW+APKZxUee img/close.gifnuW+APKZ-Blistbox_scrollcmd.pynuW+APKZ< dirbrowser.pycnuW+APKZ=TJ notebook_closebtn.pycnuW+APKZ$P P widget_state.pycnuW+APKZ(vxnn]plastik_theme.pyonuW+APKZG4a combo_themes.pycnuW+APKZG4acombo_themes.pyonuW+APKZakJ widget_state.pynuW+APKZaOz&theme_selector.pynuW+APKZ(vxnnn.plastik_theme.pycnuW+APKZ_6&6&Lttkcalendar.pycnuW+APKZ((rroundframe.pyonuW+APKZyTt%t%plastik_theme.pynuW+APKZM^|ggtreeview_multicolumn.pycnuW+APKZ(([roundframe.pycnuW+APKZ^treeview_multicolumn.pynuW+APKZnnF notebook_closebtn.pynuW+APKZ[ѕ> > theme_selector.pyonuW+APKZ_6&6&Attkcalendar.pyonuW+APKZM-mac_searchentry.pyonuW+APK$$t =