Python 2.7 按钮和条目标签未显示在其实际显示的位置

Python 2.7 按钮和条目标签未显示在其实际显示的位置,python-2.7,tkinter,Python 2.7,Tkinter,如果我删除了entry小部件,一切都会调整得很好,但是在添加entry小部件之后,一切都会变得混乱。我使用的是栅格几何体管理器,我已经指定了输入框的位置,但它仍然没有正确显示 from Tkinter import* root=Tk() root.title("Calculator") def calculate(): print x def callback(x): print x Entry(root).grid(row=0) Button(root,text="0",com

如果我删除了entry小部件,一切都会调整得很好,但是在添加entry小部件之后,一切都会变得混乱。我使用的是栅格几何体管理器,我已经指定了输入框的位置,但它仍然没有正确显示

from Tkinter import*
root=Tk()
root.title("Calculator")
def calculate():
    print x
def callback(x):
    print x
Entry(root).grid(row=0)
Button(root,text="0",command=lambda:callback(0)).grid(row=4,column=1)
Button(root,text="1",command=lambda:callback(1)).grid(row=1,column=0)
Button(root,text="2",command=lambda:callback(2)).grid(row=1,column=1)
Button(root,text="3",command=lambda:callback(3)).grid(row=1,column=2)
Button(root,text="4",command=lambda:callback(4)).grid(row=2,column=0)
Button(root,text="5",command=lambda:callback(5)).grid(row=2,column=1)
Button(root,text="6",command=lambda:callback(6)).grid(row=2,column=2)
Button(root,text="7",command=lambda:callback(7)).grid(row=3,column=0)
Button(root,text="8",command=lambda:callback(8)).grid(row=3,column=1)
Button(root,text="9",command=lambda:callback(9)).grid(row=3,column=2)
Button(root,text="+",command=lambda:callback(12)).grid(row=1,column=3)
Button(root,text="-",command=lambda:callback(13)).grid(row=2,column=3)
Button(root,text="*",command=lambda:callback(14)).grid(row=3,column=3)
Button(root,text="/",command=lambda:callback(15)).grid(row=4,column=3)
Button(root,text="=",command=calculate).grid(row=4,column=2)
Button(root,text=".",command=lambda:callback(11)).grid(row=4,column=0)
root.mainloop()

它是网格-当您在列中添加
条目
时,同一列中的其他单元格具有相同的宽度。您可以使用columnspan为
条目使用更多列

tk.Entry(root).grid(row=0, columnspan=4)
您可以使用
sticky='we'
将按钮调整为单元格宽度

import Tkinter as tk

# --- functions ---

def calculate():
    print x

def callback(x):
    print x

# --- main ---

root = tk.Tk()
root.title("Calculator")

tk.Entry(root).grid(row=0, columnspan=4)

tk.Button(root, text="0", command=lambda:callback(0)).grid(row=4, column=1, sticky='we')
tk.Button(root, text="1", command=lambda:callback(1)).grid(row=1, column=0, sticky='we')
tk.Button(root, text="2", command=lambda:callback(2)).grid(row=1, column=1, sticky='we')
tk.Button(root, text="3", command=lambda:callback(3)).grid(row=1, column=2, sticky='we')
tk.Button(root, text="4", command=lambda:callback(4)).grid(row=2, column=0, sticky='we')
tk.Button(root, text="5", command=lambda:callback(5)).grid(row=2, column=1, sticky='we')
tk.Button(root, text="6", command=lambda:callback(6)).grid(row=2, column=2, sticky='we')
tk.Button(root, text="7", command=lambda:callback(7)).grid(row=3, column=0, sticky='we')
tk.Button(root, text="8", command=lambda:callback(8)).grid(row=3, column=1, sticky='we')
tk.Button(root, text="9", command=lambda:callback(9)).grid(row=3, column=2, sticky='we')
tk.Button(root, text="+", command=lambda:callback(12)).grid(row=1, column=3, sticky='we')
tk.Button(root, text="-", command=lambda:callback(13)).grid(row=2, column=3, sticky='we')
tk.Button(root, text="*", command=lambda:callback(14)).grid(row=3, column=3, sticky='we')
tk.Button(root, text="/", command=lambda:callback(15)).grid(row=4, column=3, sticky='we')
tk.Button(root, text="=", command=calculate).grid(row=4, column=2, sticky='we')
tk.Button(root, text=".", command=lambda:callback(11)).grid(row=4, column=0, sticky='we')

root.mainloop()

编辑:更短

import Tkinter as tk

# --- functions ---

def callback(x):
    print x

# --- main ---

buttons = [
  ("1", "2", "3", "+"),
  ("4", "5", "6", "-"),
  ("7", "8", "9", "*"),
  (".", "0", "=", "/"),
]

root = tk.Tk()
root.title("Calculator")

tk.Entry(root).grid(row=0, columnspan=4)

for r, row in enumerate(buttons, 1):
    for c, text in enumerate(row):
        b = tk.Button(root, text=text, command=lambda arg=text:callback(arg))
        b.grid(row=r, column=c, sticky='we')

root.mainloop()

它是网格-当您在列中添加
条目
时,同一列中的其他单元格具有相同的宽度。您可以使用columnspan为
条目使用更多列

tk.Entry(root).grid(row=0, columnspan=4)
您可以使用
sticky='we'
将按钮调整为单元格宽度

import Tkinter as tk

# --- functions ---

def calculate():
    print x

def callback(x):
    print x

# --- main ---

root = tk.Tk()
root.title("Calculator")

tk.Entry(root).grid(row=0, columnspan=4)

tk.Button(root, text="0", command=lambda:callback(0)).grid(row=4, column=1, sticky='we')
tk.Button(root, text="1", command=lambda:callback(1)).grid(row=1, column=0, sticky='we')
tk.Button(root, text="2", command=lambda:callback(2)).grid(row=1, column=1, sticky='we')
tk.Button(root, text="3", command=lambda:callback(3)).grid(row=1, column=2, sticky='we')
tk.Button(root, text="4", command=lambda:callback(4)).grid(row=2, column=0, sticky='we')
tk.Button(root, text="5", command=lambda:callback(5)).grid(row=2, column=1, sticky='we')
tk.Button(root, text="6", command=lambda:callback(6)).grid(row=2, column=2, sticky='we')
tk.Button(root, text="7", command=lambda:callback(7)).grid(row=3, column=0, sticky='we')
tk.Button(root, text="8", command=lambda:callback(8)).grid(row=3, column=1, sticky='we')
tk.Button(root, text="9", command=lambda:callback(9)).grid(row=3, column=2, sticky='we')
tk.Button(root, text="+", command=lambda:callback(12)).grid(row=1, column=3, sticky='we')
tk.Button(root, text="-", command=lambda:callback(13)).grid(row=2, column=3, sticky='we')
tk.Button(root, text="*", command=lambda:callback(14)).grid(row=3, column=3, sticky='we')
tk.Button(root, text="/", command=lambda:callback(15)).grid(row=4, column=3, sticky='we')
tk.Button(root, text="=", command=calculate).grid(row=4, column=2, sticky='we')
tk.Button(root, text=".", command=lambda:callback(11)).grid(row=4, column=0, sticky='we')

root.mainloop()

编辑:更短

import Tkinter as tk

# --- functions ---

def callback(x):
    print x

# --- main ---

buttons = [
  ("1", "2", "3", "+"),
  ("4", "5", "6", "-"),
  ("7", "8", "9", "*"),
  (".", "0", "=", "/"),
]

root = tk.Tk()
root.title("Calculator")

tk.Entry(root).grid(row=0, columnspan=4)

for r, row in enumerate(buttons, 1):
    for c, text in enumerate(row):
        b = tk.Button(root, text=text, command=lambda arg=text:callback(arg))
        b.grid(row=r, column=c, sticky='we')

root.mainloop()

当您输入
条目时,同一列中的所有单元格都具有相同的宽度。使用
columnspan
以便条目使用更多的列-即
Entry(root).grid(row=0,columnspan=4)
。或者使用
Frame
pack
来组织元素。当您放入
entry
时,同一列中的所有单元格都具有相同的宽度。使用
columnspan
以便条目使用更多的列-即
Entry(root).grid(row=0,columnspan=4)
。或者用
Frame
pack
来组织元素。你能给我解释一下这两行吗?对于r,枚举中的行(按钮,1):对于c,枚举中的文本(行):感谢您的帮助,我自己解决了它!:)你能给我解释一下这两行吗?对于r,枚举中的行(按钮,1):对于c,枚举中的文本(行):感谢您的帮助,我自己解决了它!:)