2016-11-12 104 views
0

如果我刪除條目窗口小部件,所有事情都可以完美調整,但是在添加條目窗口小部件之後,所有內容都會被混淆。我正在使用網格幾何管理器,並且已經指定了輸入框的位置,但仍然無法正確顯示。按鈕和條目標籤沒有出現在實際出現的位置

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

。使用'columnspan',Entry使用更多的列 - 即。 'Entry(root).grid(row = 0,columnspan = 4)'。或者使用'Frame'和'pack'來組織元素。 – furas

回答

1

這是格 - 當您在列中添加Entry然後其他單元格在同一列的寬度相同。您可以使用columnspan使用更多的列Entry

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() 
當你把`entry`然後在同一列中的所有細胞獲得相同的寬度
+0

這解決了我的問題!感謝幫助furas! :) –

+0

你能解釋我這兩行嗎? for r,在枚舉(按鈕,1)中的行: 爲c,在枚舉(行)中的文本: –

+0

感謝您的幫助,我想出了自己! :) –