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)