2013-04-09 31 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