Divmod还可以这么用?


之前在写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列 依次类推


admin
admin管理员

上一篇:让人怀疑人生的js预解析
下一篇:广州创龙TLK7-EVM开发板介绍

留言评论

暂无留言
取消
扫码支持