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

📄 csplit.py

📁 minimal python variant for small footprint apps like embedded apps
💻 PY
字号:
# A CSplit is a Clock-shaped split: the children are grouped in a circle.# The numbering is a little different from a real clock: the 12 o'clock# position is called 0, not 12.  This is a little easier since Python# usually counts from zero.  (BTW, there needn't be exactly 12 children.)from math import pi, sin, cosfrom Split import Splitclass CSplit(Split):	#	def getminsize(self, m, (width, height)):		# Since things look best if the children are spaced evenly		# along the circle (and often all children have the same		# size anyway) we compute the max child size and assume		# this is each child's size.		for child in self.children:			wi, he = child.getminsize(m, (0, 0))			width = max(width, wi)			height = max(height, he)		# In approximation, the diameter of the circle we need is		# (diameter of box) * (#children) / pi.		# We approximate pi by 3 (so we slightly overestimate		# our minimal size requirements -- not so bad).		# Because the boxes stick out of the circle we add the		# box size to each dimension.		# Because we really deal with ellipses, do everything		# separate in each dimension.		n = len(self.children)		return width + (width*n + 2)/3, height + (height*n + 2)/3	#	def getbounds(self):		return self.bounds	#	def setbounds(self, bounds):		self.bounds = bounds		# Place the children.  This involves some math.		# Compute center positions for children as if they were		# ellipses with a diameter about 1/N times the		# circumference of the big ellipse.		# (There is some rounding involved to make it look		# reasonable for small and large N alike.)		# XXX One day Python will have automatic conversions...		n = len(self.children)		fn = float(n)		if n == 0: return		(left, top), (right, bottom) = bounds		width, height = right-left, bottom-top		child_width, child_height = width*3/(n+4), height*3/(n+4)		half_width, half_height = \			float(width-child_width)/2.0, \			float(height-child_height)/2.0		center_h, center_v = center = (left+right)/2, (top+bottom)/2		fch, fcv = float(center_h), float(center_v)		alpha = 2.0 * pi / fn		for i in range(n):			child = self.children[i]			fi = float(i)			fh, fv = \				fch + half_width*sin(fi*alpha), \				fcv - half_height*cos(fi*alpha)			left, top = \				int(fh) - child_width/2, \				int(fv) - child_height/2			right, bottom = \				left + child_width, \				top + child_height			child.setbounds(((left, top), (right, bottom)))	#

⌨️ 快捷键说明

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