Python Tkinter填充问题

Python Tkinter填充问题,python,tkinter,Python,Tkinter,我正在学习Tkinter并制作一个简单的8字谜游戏。 (例如:) 每个数字都是使用网格布局放置到框架中的画布对象。其中一个对象正在画布对象之间添加额外的填充。我将画布对象的边框宽度设置为-2,这解决了一些人的问题,但这只是稍微减少了额外的填充。将此值设置为-4将开始剪切我的画布区域 我假设网格布局的单元格有一些默认的填充或边框宽度,但我没有找到删除它的方法。在画布对象上调用grid()时设置padx、pady、ipadx、ipady值似乎也没有帮助 我发现的另一个奇怪之处是,在为画布对象创建边框

我正在学习Tkinter并制作一个简单的8字谜游戏。
(例如:)

每个数字都是使用网格布局放置到框架中的画布对象。其中一个对象正在画布对象之间添加额外的填充。我将画布对象的边框宽度设置为-2,这解决了一些人的问题,但这只是稍微减少了额外的填充。将此值设置为-4将开始剪切我的画布区域

我假设网格布局的单元格有一些默认的填充或边框宽度,但我没有找到删除它的方法。在画布对象上调用grid()时设置padx、pady、ipadx、ipady值似乎也没有帮助

我发现的另一个奇怪之处是,在为画布对象创建边框时,我使用了create_rectangle,但我必须从4,4开始x_1和y_1,而不是0,0或2,2,这是我期望的2px边框

这是我的密码。非常感谢您的任何帮助/建议/解决方法/其他

#!/usr/bin/python

from Tkinter import *

class Number(Canvas):
    def __init__(self, master=None, number=1):
        Canvas.__init__(self, master, width=100, height=100, bd=-2)
        self.create_text(50, 50, text=str(number), anchor=CENTER)
        self.create_rectangle(4, 4, 98, 98, width=2)


class Application(Frame):
    def create_widgets(self):
        self.playarea = Frame(self, width=300, height=300)
        self.playarea.grid_propagate(0)
        self.playarea.grid()
        self.playarea.numbers = []
        for number in xrange(1, 10):
            num_obj = Number(self.playarea, number)
            self.playarea.numbers.append(num_obj)
            row = number // 3
            col = number % 3
            num_obj.grid(row=row, column=col)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.create_widgets()


def main():
    app = Application()
    app.master.title("Sample Application")
    app.mainloop()

if __name__ == '__main__':
    main()

问题最可能的原因是您忽略了将每个画布的
highlightthickness
属性设置为零。此值控制小部件周围的彩色环,用于表示它具有焦点


当试图解决这些类型的布局问题时,这里有一个技巧:给每个小部件一个不同的背景颜色(即:根窗口一种颜色,内部框架一种颜色,画布一种颜色)。然后,您可以使用这些颜色作为指导,查看哪些小部件拥有您试图消除的空间

highlightthickness是罪魁祸首。谢谢你的帮助!背景技巧也发挥了神奇的作用。+10表示“给每个小部件一个不同的背景颜色”。我以前用这个来解决一个棘手的布局问题,但我忘记了,直到你提到它。