⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdbframewin.py

📁 minimal python variant for small footprint apps like embedded apps
💻 PY
字号:
# wdbframewin.py -- frame window for wdb.py# XXX To do:# - display function name in window title# - execute arbitrary statements instead of just evaluating expressions# - allow setting variables by editing their valuesimport stdwinfrom stdwinevents import *import basewinimport sysWIDTH = 40MINHEIGHT = 8MAXHEIGHT = 16class FrameWindow(basewin.BaseWindow):	def __init__(self, debugger, frame, dict, name):		self.debugger = debugger		self.frame = frame # Not used except for identity tests		self.dict = dict		self.name = name		nl = max(MINHEIGHT, len(self.dict) + 5)		nl = min(nl, MAXHEIGHT)		width = WIDTH*stdwin.textwidth('0')		height = nl*stdwin.lineheight()		stdwin.setdefwinsize(width, height)		basewin.BaseWindow.__init__(			  self, '--Frame ' + name + '--')		# XXX Should use current function name		self.initeditor()		self.displaylist = ['>>>', '', '-'*WIDTH]		self.refreshframe()		def initeditor(self):		r = (stdwin.textwidth('>>> '), 0), (30000, stdwin.lineheight())		self.editor = self.win.textcreate(r)		def closeeditor(self):		self.editor.close()		def dispatch(self, event):		type, win, detail = event		if type == WE_NULL: return # Dummy tested by mainloop		if type in (WE_DRAW, WE_COMMAND) \				or not self.editor.event(event):			basewin.BaseWindow.dispatch(self, event)		def close(self):		del self.debugger.framewindows[self.name]		del self.debugger, self.dict		self.closeeditor()		basewin.BaseWindow.close(self)		def command(self, detail):		if detail == WC_RETURN:			self.re_eval()		else:			dummy = self.editor.event(WE_COMMAND, \						self.win, detail)		def mouse_down(self, detail):		(h, v), clicks, button, mask = detail		if clicks != 2:			return		i = v / stdwin.lineheight()		if 5 <= i < len(self.displaylist):			import string			name = string.splitfields(self.displaylist[i],' = ')[0]			if not self.dict.has_key(name):				stdwin.fleep()				return			value = self.dict[name]			if not hasattr(value, '__dict__'):				stdwin.fleep()				return			name = 'instance ' + `value`			if self.debugger.framewindows.has_key(name):				self.debugger.framewindows[name].popup()			else:				self.debugger.framewindows[name] = \					  FrameWindow(self.debugger,						  self.frame, value.__dict__,						  name)			return		stdwin.fleep()	def re_eval(self):		import string, repr		expr = string.strip(self.editor.gettext())		if expr == '':			output = ''		else:			globals = self.frame.f_globals			globals['__privileged__'] = 1			locals = self.dict			try:				value = eval(expr, globals, locals)				output = repr.repr(value)			except:				if type(sys.exc_type) == type(''):					exc_type_name = sys.exc_type				else: exc_type_name = sys.exc_type.__name__				output = exc_type_name + ': ' + `sys.exc_value`		self.displaylist[1] = output		lh = stdwin.lineheight()		r = (-10, 0), (30000, 2*lh)		self.win.change(r)		self.editor.setfocus(0, len(expr))		def draw(self, detail):		(left, top), (right, bottom) = detail		dummy = self.editor.draw(detail)		d = self.win.begindrawing()		try:			lh = d.lineheight()			h, v = 0, 0			for line in self.displaylist:				if v+lh > top and v < bottom:					d.text((h, v), line)				v = v + lh		finally:			d.close()		def refreshframe(self):		import repr		del self.displaylist[3:]		self.re_eval()		names = self.dict.keys()		for key, label in ('__args__', 'Args: '), \				  ('__return__', 'Return: '):			if self.dict.has_key(key):				names.remove(key)				value = self.dict[key]				label = label + repr.repr(value)			self.displaylist.append(label)		names.sort()		for name in names:			value = self.dict[name]			line = name + ' = ' + repr.repr(value)			self.displaylist.append(line)		self.win.setdocsize(0, \			stdwin.lineheight() * len(self.displaylist))		self.refreshall() # XXX Be more subtle later

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -