Divmod还可以这么用?

举报
Ragnar 发表于 2020/08/06 16:14:43 2020/08/06
【摘要】 之前在写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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。