Divmod还可以这么用?
【摘要】 之前在写python GUI小项目的时候,需要进行一个企业基本信息的展示,这个基本信息有非常多的{key:value}对,大概长这个样子。由于希望把这个展示的组件写成可复用的模式,这里想到用divmod函数进行排列。divmod(a,b) = (a//b, a%b) # 整除取余函数首先看一下这段代码的实现,代码实现也是很简单的tk.Label+Entry的组合,但是在排列这些组合的时候怎么...
之前在写python GUI小项目的时候,需要进行一个企业基本信息的展示,这个基本信息有非常多的{key:value}对,大概长这个样子。由于希望把这个展示的组件写成可复用的模式,这里想到用divmod函数进行排列。
divmod(a,b) = (a//b, a%b) # 整除取余函数
首先看一下这段代码的实现,代码实现也是很简单的tk.Label+Entry的组合,但是在排列这些组合的时候怎么做到更智能呢,是不是这个框架只能适配这一种输入呢?
def set_spans(self, col): span_titles = self.__class__.span_title self.span_frame = ttk.Frame(self) # 初始化一个Frame self.span_frame.grid(column=0, row=0, columnspan=4, sticky="news") for idx, name in enumerate(span_titles): # idx为key值的编号,name为key值 _string = StringVar(self) _lable = ttk.Label(self.span_frame, text=name + ":") # 给label赋值为key值 _entry = ttk.Entry(self.span_frame, textvariable=_string) # 初始化Entry _geo = divmod(idx, col) # 以idx对col进行整除取余的操作 # 可得_geo[0]=row, _geo[1]=col _lable.grid(row=_geo[0], column=_geo[1] * 2, padx=0.5, pady=0.5, sticky="w") # label 与 entry同在一行,但是col应该分别为2b和2b+1 _entry.grid(row=_geo[0], column=_geo[1] * 2 + 1, padx=0.5, pady=0.5, sticky="ew") self.spans[name] = _string
如果将col值改为4,格局也会相应更改。
# 可以观察COL=4时排列过程如下 0 法定代表人 divmod: (0, 0) # label为0行2*0=0列, entry为0行2*0+1 = 1列 依次类推 1 纳税人识别号 divmod: (0, 1) # label为0行2*1=2列, entry为0行2*1+1 = 3列 依次类推 2 名称 divmod: (0, 2) # label为0行2*2=4列, entry为0行2*2+1 = 5列 依次类推 3 机构代码 divmod: (0, 3) # label为0行2*3=6列, entry为0行2*3+1 = 7列 依次类推 4 注册号 divmod: (1, 0) # label为1行2*0=0列, entry为1行2*0+1 = 1列 依次类推 5 注册资本 divmod: (1, 1) # label为1行2*1=2列, entry为1行2*1+1 = 3列 依次类推 6 统一社会信用代码 divmod: (1, 2) # label为1行2*2=4列, entry为1行2*2+1 = 5列 依次类推 7 登记机关 divmod: (1, 3) # label为1行2*3=6列, entry为1行2*3+1 = 7列 依次类推 8 经营状态 divmod: (2, 0) # label为2行2*0=0列, entry为2行2*0+1 = 1列 依次类推 9 成立日期 divmod: (2, 1) # label为2行2*1=2列, entry为2行2*1+1 = 3列 依次类推 10 企业类型 divmod: (2, 2) # label为2行2*2=4列, entry为2行2*2+1 = 5列 依次类推 11 经营期限 divmod: (2, 3) # label为2行2*3=6列, entry为2行2*3+1 = 7列 依次类推 12 所属地区 divmod: (3, 0) # label为3行2*0=0列, entry为3行2*0+1 = 1列 依次类推 13 核准日期 divmod: (3, 1) # label为3行2*1=2列, entry为3行2*1+1 = 3列 依次类推
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)