-Use
bottomFrame.grid_propagate(False)
den Rahmen und
storeItemEntry.grid(pady=30)
oder was auch immer Wert, den Sie für pady
wollen erweitern. Sie müssen möglicherweise row
und column
Nummern an grid()
geben, wenn Sie andere Widgets in bottomFrame
platzieren möchten.
Sie sah „eine seltsame dunkelgrauen Hintergrund“ wie im Kommentar erwähnt, weil man bg = "grey"
-bottomFrame
gab. Der Hintergrund war anfangs nicht sichtbar, da der Rahmen schrumpfte, um die Entry
zu passen. Sie können die Farbe zu dem ändern, was Sie möchten, oder es vollständig entfernen.
sollte folgende Nähe zu dem, was Sie suchen:
from Tkinter import *
root = Tk()
root.title("project")
root.geometry("700x850+0+0")
textInput = StringVar()
class MenuBoard(object):
def __init__(self,master):
self.master = master
mainFrame = Frame(self.master,bg = "white",width=700,height=400)
mainFrame.grid(row=0,column=0)
labelFrame = Frame(self.master, bg = "red",height=40,width=700)
labelFrame.grid(row=0,column=0,sticky = N)
welcomeLabel = Label(self.master, text = "Main Heading Here",fg= "black",bg="red",)
welcomeLabel.config(font=("Courier New",23))
welcomeLabel.grid(row=0,column=0,sticky = N)
bottomFrame = Frame(self.master, bg = "grey", height=450,width=700) #Change/remove bg
bottomFrame.grid(row=1, column=0)
bottomFrame.grid_propagate(False)
storeItemEntry = Entry(bottomFrame, font=("Courier New",10,"bold"), textvariable=textInput, bd =4)
storeItemEntry.grid(pady=30)
actual = MenuBoard(root)
root.mainloop()
UPDATE: Basierend auf Ihre Kommentare, hier eine grobe Umsetzung zu arbeiten.
from Tkinter import *
root = Tk()
root.title("project")
root.geometry("700x850+0+0")
class MenuBoard(object):
def __init__(self,master):
self.master = master
mainFrame = Frame(self.master,bg = "white",width=700,height=400)
mainFrame.grid(row=0,column=0)
mainFrame.grid_propagate(False)
mainFrame.grid_columnconfigure(0, weight=1)
heading = " Store Item".ljust(45)[:45] + "Item Price" # Pad the text with white spaces
listHeading = Label(mainFrame, text=heading, anchor="w", font=("Courier New",14,"bold"))
listHeading.grid(row=1, column=0, pady=5, stick="we")
# Use Text widget so you can keep inserting items
self.listItems = Text(mainFrame, font=("Courier New",12))
self.listItems.grid(row=2, column=0, pady=5, stick="we")
self.listItems.config(state="disabled") # Prevents edits on the Text
welcomeLabel = Label(mainFrame, text = "Main Heading Here",fg= "black",bg="red",)
welcomeLabel.config(font=("Courier New",23))
welcomeLabel.grid(row=0,column=0, stick="we")
bottomFrame = Frame(self.master, bg = "grey", height=450,width=700) #Change/remove bg
bottomFrame.grid(row=1, column=0)
bottomFrame.grid_propagate(False)
storeItemLabel = Label(bottomFrame, text="Food Item: ")
storeItemLabel.grid(row=0, column=0)
self.storeItemEntry = Entry(bottomFrame, font=("Courier New",10,"bold"), bd =4)
self.storeItemEntry.grid(row=0, column=1, pady=15)
priceLabel = Label(bottomFrame, text="Price: ")
priceLabel.grid(row=2, column=0)
self.priceEntry = Entry(bottomFrame, font=("Courier New",10,"bold"), bd =4)
self.priceEntry.grid(row=2, column=1,)
btn = Button(bottomFrame, text="Add Item", command=self.add)
btn.grid(row=3, column=1, pady=15)
def add(self):
price = self.storeItemEntry.get() # Get item name from Entry
#Get price, format name and price
groceryItem = price.ljust(50)[:50] + "$%s" %(self.priceEntry.get())
self.listItems.config(state="normal") # Enable edits on the Text
self.listItems.insert("end", "\n "+groceryItem) # Edit Text
self.listItems.config(state="disabled") # Prevents edits on the Text
actual = MenuBoard(root)
root.mainloop()
Ein paar Dinge zu beachten:
- ich einige Ihrer Frames entfernt, weil sie überflüssig schien, können Sie sie zurück, wenn nötig hinzufügen.
- Da Sie mit einer Klasse arbeiten, habe ich das Schlüsselwort
self
zu einigen der Attribute hinzugefügt, damit ich sie später in anderen Methoden ohne Fehler verwenden/aufrufen kann. Ich habe die Attribute weggelassen, die ich nach der Erstellung nicht aufrufen muss.
StringVar
/textvariable
wird nicht benötigt, da Sie die Liste mit einem Klick aktualisieren.
- Es gibt viele Verfeinerungen, die ich nicht gemacht habe (d. H. Prüfen, ob eine gültige Eingabe vor dem Aktualisieren der Liste, der Fähigkeit, aus der Liste zu löschen, usw.).
- verwenden I Methoden und Funktionen, die Sie oder nicht bewusst sein können (
.ljust(50)[:50]
, %s
, etc)
Ich hoffe, das hilft :).
Sprechen Sie über das 'foodItemEntry'-Objekt? Wenn ja, meinst du, dass das Objekt, das 'Tk.Entry'-Feld in der Mitte des unteren' Tk.Frame' platziert wird und du seine Position innerhalb des unteren 'Tk.Frame' angeben willst? – pstatix