📄 tkinter.py
字号:
# Tkinter.py -- Tk/Tcl widget wrappers__version__ = "$Revision: 1.1.1.1 $"import sysif sys.platform == "win32": import FixTk # Attempt to configure Tcl/Tk without requiring PATHimport _tkinter # If this fails your Python may not be configured for Tktkinter = _tkinter # b/w compat for exportTclError = _tkinter.TclErrorfrom types import *from Tkconstants import *import string; _string = string; del stringtry: import MacOS; _MacOS = MacOS; del MacOSexcept ImportError: _MacOS = NoneTkVersion = _string.atof(_tkinter.TK_VERSION)TclVersion = _string.atof(_tkinter.TCL_VERSION)READABLE = _tkinter.READABLEWRITABLE = _tkinter.WRITABLEEXCEPTION = _tkinter.EXCEPTION# These are not always defined, e.g. not on Win32 with Tk 8.0 :-(try: _tkinter.createfilehandlerexcept AttributeError: _tkinter.createfilehandler = Nonetry: _tkinter.deletefilehandlerexcept AttributeError: _tkinter.deletefilehandler = None def _flatten(tuple): res = () for item in tuple: if type(item) in (TupleType, ListType): res = res + _flatten(item) elif item is not None: res = res + (item,) return resdef _cnfmerge(cnfs): if type(cnfs) is DictionaryType: return cnfs elif type(cnfs) in (NoneType, StringType): return cnfs else: cnf = {} for c in _flatten(cnfs): try: cnf.update(c) except (AttributeError, TypeError), msg: print "_cnfmerge: fallback due to:", msg for k, v in c.items(): cnf[k] = v return cnfclass Event: pass_support_default_root = 1_default_root = Nonedef NoDefaultRoot(): global _support_default_root _support_default_root = 0 global _default_root _default_root = None del _default_rootdef _tkerror(err): passdef _exit(code='0'): raise SystemExit, code_varnum = 0class Variable: _default = "" def __init__(self, master=None): global _varnum if not master: master = _default_root self._master = master self._tk = master.tk self._name = 'PY_VAR' + `_varnum` _varnum = _varnum + 1 self.set(self._default) def __del__(self): self._tk.globalunsetvar(self._name) def __str__(self): return self._name def set(self, value): return self._tk.globalsetvar(self._name, value) def trace_variable(self, mode, callback): cbname = self._master._register(callback) self._tk.call("trace", "variable", self._name, mode, cbname) return cbname trace = trace_variable def trace_vdelete(self, mode, cbname): self._tk.call("trace", "vdelete", self._name, mode, cbname) self._master.deletecommand(cbname) def trace_vinfo(self): return map(self._tk.split, self._tk.splitlist( self._tk.call("trace", "vinfo", self._name)))class StringVar(Variable): _default = "" def __init__(self, master=None): Variable.__init__(self, master) def get(self): return self._tk.globalgetvar(self._name)class IntVar(Variable): _default = 0 def __init__(self, master=None): Variable.__init__(self, master) def get(self): return getint(self._tk.globalgetvar(self._name))class DoubleVar(Variable): _default = 0.0 def __init__(self, master=None): Variable.__init__(self, master) def get(self): return getdouble(self._tk.globalgetvar(self._name))class BooleanVar(Variable): _default = "false" def __init__(self, master=None): Variable.__init__(self, master) def get(self): return self._tk.getboolean(self._tk.globalgetvar(self._name))def mainloop(n=0): _default_root.tk.mainloop(n)getint = intgetdouble = floatdef getboolean(s): return _default_root.tk.getboolean(s)# Methods defined on both toplevel and interior widgetsclass Misc: # XXX font command? _tclCommands = None def destroy(self): if self._tclCommands is not None: for name in self._tclCommands: #print '- Tkinter: deleted command', name self.tk.deletecommand(name) self._tclCommands = None def deletecommand(self, name): #print '- Tkinter: deleted command', name self.tk.deletecommand(name) try: self._tclCommands.remove(name) except ValueError: pass def tk_strictMotif(self, boolean=None): return self.tk.getboolean(self.tk.call( 'set', 'tk_strictMotif', boolean)) def tk_bisque(self): self.tk.call('tk_bisque') def tk_setPalette(self, *args, **kw): self.tk.call(('tk_setPalette',) + _flatten(args) + _flatten(kw.items())) def tk_menuBar(self, *args): pass # obsolete since Tk 4.0 def wait_variable(self, name='PY_VAR'): self.tk.call('tkwait', 'variable', name) waitvar = wait_variable # XXX b/w compat def wait_window(self, window=None): if window == None: window = self self.tk.call('tkwait', 'window', window._w) def wait_visibility(self, window=None): if window == None: window = self self.tk.call('tkwait', 'visibility', window._w) def setvar(self, name='PY_VAR', value='1'): self.tk.setvar(name, value) def getvar(self, name='PY_VAR'): return self.tk.getvar(name) getint = int getdouble = float def getboolean(self, s): return self.tk.getboolean(s) def focus_set(self): self.tk.call('focus', self._w) focus = focus_set # XXX b/w compat? def focus_force(self): self.tk.call('focus', '-force', self._w) def focus_get(self): name = self.tk.call('focus') if name == 'none' or not name: return None return self._nametowidget(name) def focus_displayof(self): name = self.tk.call('focus', '-displayof', self._w) if name == 'none' or not name: return None return self._nametowidget(name) def focus_lastfor(self): name = self.tk.call('focus', '-lastfor', self._w) if name == 'none' or not name: return None return self._nametowidget(name) def tk_focusFollowsMouse(self): self.tk.call('tk_focusFollowsMouse') def tk_focusNext(self): name = self.tk.call('tk_focusNext', self._w) if not name: return None return self._nametowidget(name) def tk_focusPrev(self): name = self.tk.call('tk_focusPrev', self._w) if not name: return None return self._nametowidget(name) def after(self, ms, func=None, *args): if not func: # I'd rather use time.sleep(ms*0.001) self.tk.call('after', ms) else: # XXX Disgusting hack to clean up after calling func tmp = [] def callit(func=func, args=args, self=self, tmp=tmp): try: apply(func, args) finally: try: self.deletecommand(tmp[0]) except TclError: pass name = self._register(callit) tmp.append(name) return self.tk.call('after', ms, name) def after_idle(self, func, *args): return apply(self.after, ('idle', func) + args) def after_cancel(self, id): self.tk.call('after', 'cancel', id) def bell(self, displayof=0): self.tk.call(('bell',) + self._displayof(displayof)) # Clipboard handling: def clipboard_clear(self, **kw): if not kw.has_key('displayof'): kw['displayof'] = self._w self.tk.call(('clipboard', 'clear') + self._options(kw)) def clipboard_append(self, string, **kw): if not kw.has_key('displayof'): kw['displayof'] = self._w self.tk.call(('clipboard', 'append') + self._options(kw) + ('--', string)) # XXX grab current w/o window argument def grab_current(self): name = self.tk.call('grab', 'current', self._w) if not name: return None return self._nametowidget(name) def grab_release(self): self.tk.call('grab', 'release', self._w) def grab_set(self): self.tk.call('grab', 'set', self._w) def grab_set_global(self): self.tk.call('grab', 'set', '-global', self._w) def grab_status(self): status = self.tk.call('grab', 'status', self._w) if status == 'none': status = None return status def lower(self, belowThis=None): self.tk.call('lower', self._w, belowThis) def option_add(self, pattern, value, priority = None): self.tk.call('option', 'add', pattern, value, priority) def option_clear(self): self.tk.call('option', 'clear') def option_get(self, name, className): return self.tk.call('option', 'get', self._w, name, className) def option_readfile(self, fileName, priority = None): self.tk.call('option', 'readfile', fileName, priority) def selection_clear(self, **kw): if not kw.has_key('displayof'): kw['displayof'] = self._w self.tk.call(('selection', 'clear') + self._options(kw)) def selection_get(self, **kw): if not kw.has_key('displayof'): kw['displayof'] = self._w return self.tk.call(('selection', 'get') + self._options(kw)) def selection_handle(self, command, **kw): name = self._register(command) self.tk.call(('selection', 'handle') + self._options(kw) + (self._w, name)) def selection_own(self, **kw): "Become owner of X selection." self.tk.call(('selection', 'own') + self._options(kw) + (self._w,)) def selection_own_get(self, **kw): "Find owner of X selection." if not kw.has_key('displayof'): kw['displayof'] = self._w name = self.tk.call(('selection', 'own') + self._options(kw)) if not name: return None return self._nametowidget(name) def send(self, interp, cmd, *args): return self.tk.call(('send', interp, cmd) + args) def lower(self, belowThis=None): self.tk.call('lower', self._w, belowThis) def tkraise(self, aboveThis=None): self.tk.call('raise', self._w, aboveThis) lift = tkraise def colormodel(self, value=None): return self.tk.call('tk', 'colormodel', self._w, value) def winfo_atom(self, name, displayof=0): args = ('winfo', 'atom') + self._displayof(displayof) + (name,) return getint(self.tk.call(args)) def winfo_atomname(self, id, displayof=0): args = ('winfo', 'atomname') \ + self._displayof(displayof) + (id,) return self.tk.call(args) def winfo_cells(self): return getint( self.tk.call('winfo', 'cells', self._w)) def winfo_children(self): return map(self._nametowidget, self.tk.splitlist(self.tk.call( 'winfo', 'children', self._w))) def winfo_class(self): return self.tk.call('winfo', 'class', self._w) def winfo_colormapfull(self): return self.tk.getboolean( self.tk.call('winfo', 'colormapfull', self._w)) def winfo_containing(self, rootX, rootY, displayof=0): args = ('winfo', 'containing') \ + self._displayof(displayof) + (rootX, rootY) name = self.tk.call(args) if not name: return None return self._nametowidget(name) def winfo_depth(self): return getint(self.tk.call('winfo', 'depth', self._w)) def winfo_exists(self): return getint( self.tk.call('winfo', 'exists', self._w)) def winfo_fpixels(self, number): return getdouble(self.tk.call( 'winfo', 'fpixels', self._w, number)) def winfo_geometry(self): return self.tk.call('winfo', 'geometry', self._w) def winfo_height(self): return getint( self.tk.call('winfo', 'height', self._w)) def winfo_id(self): return self.tk.getint( self.tk.call('winfo', 'id', self._w)) def winfo_interps(self, displayof=0): args = ('winfo', 'interps') + self._displayof(displayof) return self.tk.splitlist(self.tk.call(args)) def winfo_ismapped(self): return getint( self.tk.call('winfo', 'ismapped', self._w)) def winfo_manager(self): return self.tk.call('winfo', 'manager', self._w) def winfo_name(self): return self.tk.call('winfo', 'name', self._w) def winfo_parent(self): return self.tk.call('winfo', 'parent', self._w) def winfo_pathname(self, id, displayof=0): args = ('winfo', 'pathname') \ + self._displayof(displayof) + (id,) return self.tk.call(args) def winfo_pixels(self, number): return getint( self.tk.call('winfo', 'pixels', self._w, number)) def winfo_pointerx(self): return getint( self.tk.call('winfo', 'pointerx', self._w)) def winfo_pointerxy(self): return self._getints( self.tk.call('winfo', 'pointerxy', self._w)) def winfo_pointery(self): return getint( self.tk.call('winfo', 'pointery', self._w)) def winfo_reqheight(self): return getint( self.tk.call('winfo', 'reqheight', self._w)) def winfo_reqwidth(self): return getint( self.tk.call('winfo', 'reqwidth', self._w)) def winfo_rgb(self, color): return self._getints( self.tk.call('winfo', 'rgb', self._w, color)) def winfo_rootx(self): return getint( self.tk.call('winfo', 'rootx', self._w)) def winfo_rooty(self): return getint( self.tk.call('winfo', 'rooty', self._w)) def winfo_screen(self): return self.tk.call('winfo', 'screen', self._w) def winfo_screencells(self): return getint( self.tk.call('winfo', 'screencells', self._w)) def winfo_screendepth(self): return getint( self.tk.call('winfo', 'screendepth', self._w)) def winfo_screenheight(self):
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -