【问题标题】:Draw a square with the help of the for loop in Python tkinter借助 Python tkinter 中的 for 循环绘制正方形
【发布时间】:2019-05-06 11:24:06
【问题描述】:

我想使用 Tkinter 中的 for 循环每边绘制 8 帧。先一白,后一黑(像棋盘)。

from tkinter import *
window = Tk()
window.title("pyChess")
window.geometry("523x523+250+0")
window.configure( background = 'brown')

x1 = 0
y1 = 0
x2 = 65
y2 = 65
j1 = 65
k1 = 0
j2 = 130
k2 = 65

for i in range(8):
      i = Canvas(window, width=520, height=1000)
      i.create_rectangle(x1, y1, x2, y2, fill="white")
      x1 += 130
      x2 += 130
      i.create_rectangle(j1, k1, j2, k2, fill="black")
      j1 += 130
      j2 += 130

i.pack()
window.mainloop()

我编写了这段代码,但它没有给我八帧。它只是打开了一个空白屏幕。我能为它做些什么?

【问题讨论】:

  • 为什么要创建 8 个画布?只需创建一个画布就足够了。而且您的代码将仅显示创建的最后一个画布,因为您在 for 循环之外调用了 pack()。

标签: python loops tkinter


【解决方案1】:

您不需要为每个 Canvas 小部件更新 x1、x2、j1、j2 值。您可以在 same 画布上绘制所有矩形(其中 x1、x2、j1 和 j2 的值需要更新)或在每一行上网格化多个画布小部件。

试试下面的代码(矩形只为第一行绘制):

from tkinter import *

window = Tk()    
window.title("pyChess")    
window.geometry("523x523+250+0")
window.configure( background = 'grey')

x1 = 0
y1 = 0
x2 = 65
y2 = 65
j1 = 65
k1 = 0
j2 = 130
k2 = 65
a = [0 , 1, 2, 3]

for x,i in enumerate(a):
    i = Canvas(window, width=130, height=65)
    i.create_rectangle(x1, y1, x2, y2, fill="white")
    i.create_rectangle(j1, k1, j2, k2, fill="black")
    i.grid(row = 0, column = x)

window.mainloop()

【讨论】:

  • 你可以用for x in range(4)代替for x,i in enumerate(a)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2016-02-09
  • 2021-05-31
  • 2021-10-13
相关资源
最近更新 更多