2013-04-09 214 views
2

我有一個框架內的畫布,我說畫布應該是250x250。但由於某種原因,它被創造得更大,在右側和底部都有額外的空間。這是我的代碼...任何想法?tkinter在網格中的畫布有額外的空間

from tkinter import * 
from tkinter import ttk 
from player import player0 

alpha = ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z') 

class GUI(Frame): 

    def __init__(self, master): 
     Frame.__init__(self, master) 
     self.boardsize = 250 
     self.sqsize = self.boardsize//5 
     master.title("Canvas with extra space") 
     self.initialdraw() 
     self.grid(row=0,column=0) 

    def initialdraw(self): 
     mainframe = ttk.Frame(self, padding=(5,5,5,5)) 
     mainframe.grid(column=0, row=0, sticky=(N, S, E, W)) 

     self.board = Canvas(mainframe, width=self.boardsize, height=self.boardsize,bg='white') 
     self.board.grid(row=1,column=0) 

     for row in range(5): 
      for col in range(5): 
       top = row * self.sqsize 
       left = col * self.sqsize 
       bottom = row * self.sqsize + self.sqsize -2 
       right = col * self.sqsize + self.sqsize -2 
       rect = self.board.create_rectangle(left,top,right,bottom,outline='gray',fill='') 

     self.board.focus_set() 

if __name__ == '__main__': 
    tk = Tk() 
    gui = GUI(tk) 
    tk.mainloop() 

結果是這樣的:

canvas with extra space

我寧願避免白水溝右側和畫布底部的小廣場已經制定之後。

回答

4

畫布具有邊框,由borderwidth屬性控制。它還具有由highlightthickness屬性控制的另一個邊界。將這兩個設置爲零,並且您的畫布應與您設置的尺寸完全相同。

border屬性通常用於提供3D效果 - 凸起邊框,凹陷邊框或其他一些變體。 highlightthickness(和highlightcolor)屬性定義了用於表示小部件具有鍵盤焦點的實體輪廓。

+1

非常有啓發性的答案!謝謝,板子沒有邊界看起來更乾淨,幾何實際上是有道理的。在我看來,畫布座標不應該包含邊界......爲什麼世界上的人會在可視區域之外,在邊界之外? – 2013-04-09 02:21:48

+1

@ChrisIrwin:我不知道。我一直覺得很奇怪,0,0是在邊界。幾十年來一直如此,而且tk開發者很少做出與後向不兼容的變化。 – 2013-04-09 10:49:25

0

我做了這些變化:

self.boardsize = 249 
self.sqsize = 50#self.boardsize//5 

top = row * self.sqsize +2 
left = col * self.sqsize +2 
bottom = row * self.sqsize + self.sqsize 
right = col * self.sqsize + self.sqsize 

它會正確繪製。你可以看到灰色的邊框線條上所有4個方面正確:

enter image description here

+0

有了這個答案,我意識到左上角的正方形有點像在我的原始代碼的左上角。這是我不明白的,以及爲什麼存在陰溝。仍然不知道爲什麼249比250好... – 2013-04-09 02:15:46

+0

這個答案並不能解釋爲什麼畫布不是合適的大小,它只是提供了一種解決方法。 – 2013-04-09 02:17:38

+0

@Bryan:確實,我能夠使它工作,但不知道爲什麼。我贊成你的回答,因爲它解釋了原因。 – twasbrillig 2013-04-09 02:19:20