2016-11-12 5 views
0

Wenn ich das Eintrags-Widget entferne, passt sich alles perfekt an, aber nach dem Hinzufügen des Eintrags-Widgets wird alles verschlüsselt. Ich verwende Grid Geometry Manager und habe den Speicherort des Eingabefelds angegeben, es wird jedoch nicht korrekt angezeigt.Buttons und Eintragslabel erscheinen nicht dort, wo sie eigentlich erscheinen sollten

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

, wenn Sie setzen 'entry' dann alle Zellen in der gleichen Spalte die gleiche Breite erhalten. Verwenden Sie 'columspan', so dass Entry mehr Spalten verwendet - dh. 'Eintrag (root) .grid (row = 0, columspan = 4)'. Oder benutzen Sie 'Frame' und' pack', um Elemente zu organisieren. – furas

Antwort

1

Es ist grid - wenn Sie Entry in Spalte dann andere Zellen in der gleichen Spalte die gleiche Breite hinzuzufügen. Sie können Column verwenden, um mehr Spalten für Entry

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

Und Sie können sticky='we' Tasten, um die Größe zu Zellenbreite verwenden zu verwenden.

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

EDIT: kürzer

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

Das hat mein Problem gelöst! Danke für die Hilfe furas! :) –

+0

Willst du mir bitte diese zwei Zeilen erklären? für r, Zeile in Enumerate (Tasten, 1): für c, Text in Enumerate (Zeile): –

+0

Danke für die Hilfe, ich habe es selbst herausgefunden! :) –