Python 使用tkinter,当跨距为2列时,添加边距

Python 使用tkinter,当跨距为2列时,添加边距,python,tkinter,Python,Tkinter,今天我刚开始学习python的tkinter模块。我正在做一个基本的计算器练习。目前,我正在为它制作实际的GUI,“0”按钮的每一面都有边距,我不确定为什么。就像我说的,我今天才开始学。有人能告诉我为什么会发生这种情况,以及如何避免这种情况 下面是它的外观: 查看0,按钮的左右两侧都有边距 代码如下: from tkinter import * #init tkinter root = Tk() #name program root.title('PyCalc') #function to

今天我刚开始学习python的tkinter模块。我正在做一个基本的计算器练习。目前,我正在为它制作实际的GUI,“0”按钮的每一面都有边距,我不确定为什么。就像我说的,我今天才开始学。有人能告诉我为什么会发生这种情况,以及如何避免这种情况

下面是它的外观:

查看0,按钮的左右两侧都有边距

代码如下:

from tkinter import *

#init tkinter
root = Tk()
#name program
root.title('PyCalc')

#function to call when button is pressed to add to input field
def add_input():
    return

#create an input field
Entry(root, width=40, borderwidth=5).grid(row=0, column=0, columnspan=4, padx=10, pady=10)

#put buttons where they should be
for x in range(15):
    button = Button(root, text=x, width=10, height=4, command=add_input)

    if x == 0:
        Button(root, text=x, width=20, height=4, command=add_input).grid(row=4, column=0, columnspan=2)
    elif x > 9:
        if x == 10:
            Button(root, text='=', width=10, height=4).grid(row=4, column=2)
        elif x == 11:
            Button(root, text='+', width=10, height=4).grid(row=1, column=3)
        elif x == 12:
            Button(root, text='-', width=10, height=4).grid(row=2, column=3)
        elif x == 13:
            Button(root, text='x', width=10, height=4).grid(row=3, column=3)
        else:
            Button(root, text='/', width=10, height=4).grid(row=4, column=3)
    else:
        if x % 3 == 0:
            #9, 6, 3
            if 10 - x < 4:
                #9
                button.grid(row=1, column=2)
            elif 10 - x in [4, 5, 6]:
                #6
                button.grid(row=2, column=2)
            else:
                #3
                button.grid(row=3, column=2)
        elif 10 - x in [2, 5, 8]:
            #8, 5, 2
            if 10 - x < 4:
                #8
                button.grid(row=1, column=1)
            elif 10 - x in [4, 5, 6]:
                #5
                button.grid(row=2, column=1)
            else:
                #2
                button.grid(row=3, column=1)
        else:
            #7, 4, 1
            if 10 - x < 4:
                #7
                button.grid(row=1, column=0)
            elif 10 - x in [4, 5, 6]:
                #4
                button.grid(row=2, column=0)
            else:
                #1
                button.grid(row=3, column=0)

#run it
root.mainloop()
从tkinter导入*
#init tkinter
root=Tk()
#名称程序
root.title('PyCalc')
#按下按钮添加到输入字段时调用的函数
def add_input():
返回
#创建一个输入字段
条目(根,宽度=40,边界宽度=5)。网格(行=0,列=0,列跨度=4,padx=10,pady=10)
#把按钮放在该放的地方
对于范围(15)内的x:
按钮=按钮(根,文本=x,宽度=10,高度=4,命令=添加输入)
如果x==0:
按钮(根,文本=x,宽度=20,高度=4,命令=add_input)。网格(行=4,列=0,列span=2)
elif x>9:
如果x==10:
按钮(根,文本='=',宽度=10,高度=4)。网格(行=4,列=2)
elif x==11:
按钮(根,文本=“+”,宽度=10,高度=4)。网格(行=1,列=3)
elif x==12:
按钮(根,文本='-',宽度=10,高度=4)。网格(行=2,列=3)
elif x==13:
按钮(根,text='x',宽度=10,高度=4).网格(行=3,列=3)
其他:
按钮(根,文本=“/”,宽度=10,高度=4)。网格(行=4,列=3)
其他:
如果x%3==0:
#9, 6, 3
如果10-x<4:
#9
button.grid(行=1,列=2)
以利夫10-x在[4,5,6]中:
#6
button.grid(行=2,列=2)
其他:
#3
button.grid(行=3,列=2)
以利夫10-x在[2,5,8]中:
#8, 5, 2
如果10-x<4:
#8
button.grid(行=1,列=1)
以利夫10-x在[4,5,6]中:
#5
button.grid(行=2,列=1)
其他:
#2
button.grid(行=3,列=1)
其他:
#7, 4, 1
如果10-x<4:
#7
button.grid(行=1,列=0)
以利夫10-x在[4,5,6]中:
#4
button.grid(行=2,列=0)
其他:
#1
button.grid(行=3,列=0)
#运行它
root.mainloop()
非常感谢您的帮助。谢谢您的时间。

将小部件(在本例中为按钮)添加到网格时,您可以添加
sticky
参数,使按钮扩展以在任何给定方向填充网格。在这种情况下,如果您更改为:

Button(root, text=x, width=20, height=4, command=add_input).grid(row=4, column=0, columnspan=2, sticky=EW)
那会解决的
tkinter.EW
是一个内置的tkinter快捷方式,用于
tkinter.E+tkinter.W
,意思是扩展以填充东部和西部

编辑:


另外,我刚刚注意到,当x小于9时,您正在创建额外的按钮,但从未将它们添加到网格中。这是故意的吗?当x大于或等于9时,您应该能够执行所做的操作,并在预先存在的按钮上调用
grid()

感谢您的回复,我将尝试一下,看看它是如何工作的!至于你指的按钮,我不知道你的意思。你是说0&9-14按钮吗?它们被添加到网格中,我只是将.grid链接到它们的末尾。不是出于任何原因,只是出于某种原因碰巧这么做,这确实解决了问题!非常感谢你!你知道tkinter有什么好的资源吗?如果你不这么做,一切都好@科迪利在上面??我指的是0-8个按钮。实例化一个按钮并将其存储在第17行的
button
变量中,但随后似乎创建了要添加到网格中的新按钮。这意味着您正在制作一个“幽灵按钮”,它永远不会为每个按钮放置在网格上。对于9-14个按钮,您正确地将
button
变量中存储的按钮添加到网格中。至于资源,我通常使用,尽管我承认文档有时会令人沮丧。啊,我想我明白你的意思了。我不知道那会那样做。我这样做只是为了减少角色数量,所以看起来更整洁。我来换!谢谢你的接球@凉爽的云,就像从你头顶上落下来的一样。所以像是现成的东西。