我正在阅读基于python 2的书Tkinter GUI Application Development Hotshot,我有这段代码:
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工作但是在python 3和tkinter中运行它时会得到意想不到的结果,这会导致什么行为?
答案 0 :(得分:1)
差异可能是由于python 2.x和python 3.x如何处理除法运算符。可以在这里找到冗长的描述:
答案 1 :(得分:0)
表示范围内的j(列) 将生成0,1,2,3
j / bp给出了一个真实的结果:0,0.5,1.0,1.5(AFAICT这是Python 3.0中的新功能)
所以(j / bp)%2给出:0,0.5,1.0,1.5
在Python 2.x下,我认为整数除法产生了整数结果:
j / bp给出0,0,1,1
(j / bp)%2给出0,0,1,1
0被解释为False,任何其他数字被解释为True
因此,您看到的颜色分配以及Python 2.x和Python 3.x之间的差异
尝试使用j // bp给出旧的(整数结果)" floor division"在Python 3.x。