2017-06-01 81 views
0

如果我運行下面的代碼:創建與Tkinter的鑽石

from tkinter import * 
window = Tk() 
window.geometry("500x500+100+100") 
window.attributes("-topmost", True) 
c = Canvas(window, width=500, height=500) 

d = 0 
while d < 7: 
    a = 7-d 
    while a <7: 
     c.create_rectangle(a * 40, d * 40, a * 40+37, d * 40+37, fill="blue", outline="") 
     a += 1 
    d += 1 

d = 0 
while d < 7: 
    a = 0 
    while a <d: 
     c.create_rectangle(a * 40+240, d * 40, a * 40+240+37, d * 40+37, fill="blue", outline="") 
     a += 1 
    d += 1 

c.pack() 
mainloop() 

那隻能說明鑽石的上半部分:

enter image description here

我想創建底部一半好。我會怎麼做?

回答

1

好,通過否定y翻轉三角形顛倒:

d = 0 
while d < 7: 
    a = 7-d 
    while a <7: 
     c.create_rectangle(a * 40, -(d * 40), a * 40+37, -(d * 40+37), fill="blue", outline="") 

     a += 1 
    d += 1 


d = 0 
while d < 7: 
    a = 0 
    while a <d: 
     c.create_rectangle(a * 40+240, -(d * 40), a * 40+240+37, -(d * 40+37), fill="blue", outline="") 

     a += 1 
    d += 1 

當然,這將會把上面的帆布頂的三角形,所以接下來你需要,直到它到達中間轉移下來,這是雙重的中間距離現在(240*2+37):

d = 0 
while d < 7: 
    a = 7-d 
    while a <7: 
     c.create_rectangle(a * 40, 240*2+37-(d * 40), a * 40+37, 240*2+37-(d * 40+37), fill="blue", outline="") 

     a += 1 
    d += 1 


d = 0 
while d < 7: 
    a = 0 
    while a <d: 
     c.create_rectangle(a * 40+240, 240*2+37-(d * 40), a * 40+240+37, 240*2+37-(d * 40+37), fill="blue", outline="") 

     a += 1 
    d += 1 

添加到您的代碼的底部,你就會有你的鑽石。

+0

謝謝!!!!! – Satsuki

0

我喜歡你是如何做到的,但我認爲製作一個你想要的ASCII'映射'會比較簡單,然後將它轉換爲tkinter。使用這種方法,您可以輕鬆地放大尺寸。

from tkinter import * 
window = Tk() 
window.geometry("500x500+100+100") 
window.attributes("-topmost", True) 
c = Canvas(window, width=500, height=500) 

inputNumber = 11+2 
grid = [" "*int((inputNumber-i)/2)+"X"*i for i in range(1,inputNumber,2)] 
grid += grid[::-1][1:] 
for y, row in enumerate(grid): 
    for x, item in enumerate(row): 
     if item == "X": 
      c.create_rectangle(x * 40, y * 40, x * 40+37, y * 40+37, fill="blue", outline="") 

c.pack() 
mainloop()