3

我在框架内有一个画布,我说过画布应该是 250x250。但由于某种原因,它被创建得更大,右侧和底部有额外的空间。这是我的代码......有什么想法吗?

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()

结果是这样的:

带有额外空间的画布

在绘制较小的正方形后,我宁愿避免画布右侧和底部的白色排水沟。

4

2 回答 2

5

画布有一个由borderwidth属性控制的边框。它还有另一个由highlightthickness属性控制的边框。将这两个都设置为零,您的画布应该与您设置的大小完全相同。

border属性通常用于提供 3D 效果——凸起的边框、下沉的边界或其他几种变体。( highlightthicknessand highlightcolor) 属性定义了一个实心轮廓,用于表示小部件具有键盘焦点。

于 2013-04-09T02:15:18.800 回答
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 个边上都是正确的:

在此处输入图像描述

于 2013-04-09T02:08:45.173 回答