-Utiliser
bottomFrame.grid_propagate(False)
d'élargir le cadre et
storeItemEntry.grid(pady=30)
Ou quelle que soit la valeur que vous voulez pour pady
. Vous devrez peut-être donner les numéros row
et column
à grid()
si vous souhaitez placer d'autres widgets dans bottomFrame
.
Vous avez vu "un étrange fond gris foncé" comme mentionné dans le commentaire parce que vous avez donné bg = "grey"
à bottomFrame
. L'arrière-plan n'était pas visible initialement parce que le cadre a rétréci pour s'adapter à la Entry
. Vous pouvez changer la couleur à ce que vous voulez ou l'enlever entièrement.
Ce qui suit devrait être proche de ce que vous cherchez:
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()
MISE À JOUR: Sur la base de vos commentaires, voici une mise en œuvre difficile de travailler avec.
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()
Un couple de choses à noter:
- J'ai enlevé certains de vos cadres parce qu'ils semblaient redondants, vous pouvez les ajouter si nécessaire.
- Puisque vous travaillez avec une classe, j'ai ajouté le mot-clé
self
à certains des attributs afin que je puisse les utiliser/les appeler plus tard dans d'autres méthodes sans erreurs. J'ai omis les attributs que je n'ai pas besoin d'appeler après la création.
StringVar
/textvariable
n'est pas nécessaire puisque vous mettez à jour la liste en cliquant sur un bouton.
- Il y a beaucoup d'améliorations que je n'ai pas faites (c'est-à-dire vérifier si une entrée valide est donnée avant de mettre à jour la liste, la capacité de supprimer de la liste, etc.).
- I ont utilisé des méthodes et fonctionnalités que vous pouvez ou ne pouvez pas être au courant (
.ljust(50)[:50]
, %s
, etc.)
J'espère que cela aide :).
Parlez-vous de l'objet 'foodItemEntry'? Si oui, voulez-vous dire que l'objet, le champ 'Tk.Entry' est placé au milieu du' Tk.Frame' en bas et vous souhaitez spécifier sa position dans le bas 'Tk.Frame'? – pstatix