需要解释使用Tkinter对网格按钮使用'%'和'/'

时间:2013-04-08 21:28:41

标签: python user-interface grid tkinter modulo

以下代码用于我使用Tkinter实现简单gui的简单计算器。我是Python的新手,它基本上是我的第一个编程语言。这是我第一次创造一个gui。计算器工作得很好,差不多。按钮执行到目前为止应该执行的操作。我的问题是:在下面的代码中,我创建了row = index%3和column = index / 3。这将我的按钮放在一个漂亮的3 x 3块中。但是,我在没有完全理解它的情况下使用了这个片段。我在网上发现了它。我发现我可以修补它以获得理想的结果,但我并不完全清楚为什么它的工作方式如此。我想这基本上是一个数学问题。不过,任何澄清都会受到高度赞赏。对不起,如果它结构奇怪,我不习惯这个论坛格式化业务。

self.operators = ['+', '-', '*', '/','%','^','C','M','M+']     
for index in range(9):
  Button(self.opFrame, relief=GROOVE, bg="light yellow", 
    text=self.operators[index], width=3, height=1,
    command=lambda arg=self.operators[index],
    arg2=self.num_dict,
    arg3=self.num_list,
    arg4=self.count : self.buttonClick(arg,arg2,arg3,arg4)).grid(padx=2,pady=2,row=index%3,column=index/3)

1 个答案:

答案 0 :(得分:3)

%运算符从索引除法得到的余数为3,因此在9次迭代中它将产生 0,1,2,0,1,2,0,1,2 按此顺序。换句话说,它为每次迭代在值0,1和2上“循环”。

使用/,您可以将索引的最低分数计算为3: 0,0,0,1,1,1,2,2,2 。这样,您可以每三次迭代移动到下一列。

如果您更改运算符的顺序并安排self.operator,就会更容易看到它:

self.operators = ['+', '/', 'C',
                  '-', '%', 'M',
                  '*', '^', 'M+']

for index in range(9):
    Button(...).grid(padx=2,pady=2,row=index/3,column=index%3)