我正在阅读基于python2的Tkinter应用程序开发热点一书,我有以下代码:
from tkinter import *
rows = 5
un = 2
bp = 2
columns = un * bp
root = Tk()
right_frame = Frame(root)
right_frame.pack()
button = [[0 for x in range(columns)] for x in range(rows)]
for i in range(rows):
for j in range(columns):
active = False
color = '#f3f3f3' if (j / bp) % 2 else '#9a72a9'
button[i][j] = Button(right_frame, bg=color, relief='flat', width=1)
button[i][j].grid(row=i, column=j)
root.mainloop()我的结果是:

但我需要这个

。
当我使用tkinter和python 2运行Tkinter时,Tkinter可以工作,但是在python 3和tkinter中运行tkinter时会得到意想不到的结果,是什么原因导致这种行为呢?
发布于 2014-08-17 21:37:27
这种差异可能是因为python2.x和python3.x如何处理除法操作符。在这里可以找到一个冗长的描述:
http://legacy.python.org/dev/peps/pep-0238/
发布于 2014-08-17 22:05:50
对于j在范围(列)将生成0,1,2,3
j/bp给出了一个真实的结果: 0,0.5,1.0,1.5 (AFAICT,这是Python3.0中的新版本)
所以(j/bp) %2给出: 0,0.5,1.0,1.5
在Python2.x下,我认为整数除法产生了一个整数结果:
j/bp给出0,0,1,1
(j/bp) %2给出0,0,1,1
0被解释为False,任何其他数字都解释为True。
因此,您所看到的颜色分配以及Python2.x和Python3.x之间的变化
尝试使用j//bp,它在Python3.x中给出了旧的(整数)“地板划分”。
https://stackoverflow.com/questions/25353615
复制相似问题