在for循环中创建它们时,按钮会覆盖设置的高度/宽度(看起来太大)

时间:2013-11-23 04:53:52

标签: python button tkinter

我有一个方法可以创建一个按钮数组(模拟网格)。用户可以单击按钮,并在其上显示“标记”(图像)。我遇到的问题是即使我在我的方法中设置高度和宽度,当它被调用时,按钮看起来太大了。重要的是要注意,当用户点击按钮时,它会“缩小”到我指定的大小......很奇怪。这是我的方法:

def create_grid(self, leng) :
    try:
        global board
        board = grid.Grid(leng)


        frame = tkinter.Frame(self.main_window)
        buttons = []
        for row_index in range(0,leng) :
            row = []
            for column_index in range(0,leng) :
                button = tkinter.Button(frame, height=36, \
                    width = 36, text = "  ", \
                    command=lambda row=row_index, \
                        column=column_index: \
                        self.button_clicked(row,column))
                button.grid(row=row_index, column=column_index)
                row.append(button)
            buttons.append(row)

        self.gomuko_buttons = buttons
        return frame.grid(row=0, column=0)
    except TypeError:
        return

Issue

此外,按下按钮时执行的功能如下:

def button_clicked(self,row,column) :
    global turns
    grid.Comp = False
    board.place_marker(row, column)
    button = self.gomuko_buttons[row][column]


    button['image'] = self.photo1
    button['state'] = 'disabled'
    turns = turns + 1

任何提示? :(

编辑:

由于Bryan Oakley的回应,我解决了这个问题。事实证明,图像和文本的宽度和高度的行为是不同的。我通过简单地在循环中添加空白图像来解决问题,如下所示:

button = tkinter.Button(frame, height=0, \
                    width = 0, text = " ", image = self.blank, \
                    command=lambda row=row_index, \
                        column=column_index: \
                        self.button_clicked(row,column))

谢谢!

1 个答案:

答案 0 :(得分:1)

我的猜测是,你认为你给的按钮的宽度为36像素,但实际上它的宽度为36个字符。在你的回调中,我猜你正在给按钮一个图像,这会导致按钮缩小。

在Tkinter中,宽度选项的解释方式不同,具体取决于按钮是图像还是文本。如果它只有文本,则以“平均大小字符”(实际上是0(零)的宽度)指定宽度。如果为按钮指定图像,则宽度选项将被解释为像素。

记录此行为。例如,请参阅http://effbot.org/tkinterbook/button.htm#Tkinter.Button.config-method