@dolu28: Als erstes mal müsstest Du dafür sorgen, das Deine beiden Seiten-Frames das Fenster überhaupt ausfüllen. Solange sie das nicht tun, macht es auch keinen Sinn etwas in ihnen zu zentieren, denn es gibt dafür keinen Platz. Dazu musst Du dem Grid im Hauptfenster in Zeile und Spalte 0 ein Gewicht geben.
Und dann würde ich die Inhalte der Seiten jeweils noch einmal in einen Frame stecken und mit ``expand=True`` packen.
Die ganzen `lab`-, `ent`- und `but`-Namen, teilweise mit angehängten Nummern sind nicht nur unschön, und unnötig weil sie nirgends verwendet werden, sie können sogar gar nicht sinnvoll verwendet werden, denn es wird an alle der Wert `None` gebunden. Das ist nämlich der Rückgabewert der `pack()`-Methode und nicht das Objekt auf dem diese Methode jeweils aufgerufen wurde.
Ich habe den `Frame`\s mal Hintergrundfarben gegegeben. Damit sieht man besser wie gross der jeweilige Frame ist. Das hilft bei der Fehlersuche und beim experimentieren.
Code: Alles auswählen
import tkinter as tk
def site_open(frame):
frame.tkraise()
def main():
window = tk.Tk()
window.title('Test')
#
# TODO Die Fenstergrösse würde ich hier nicht vorgeben.
# Der grösste Seiten-Frame entscheidet wie viel Platz die komplette
# GUI braucht.
#
window.geometry('500x300')
window.rowconfigure(0, weight=1)
window.columnconfigure(0, weight=1)
start_page = tk.Frame(window, bg='yellow')
first_page = tk.Frame(window, bg='green')
for frame in [start_page, first_page]:
frame.grid(row=0, column=0, sticky='news')
frame = tk.Frame(start_page, bg='red')
frame.pack(expand=True)
tk.Label(frame, text='Welcome to the Assistant').pack()
tk.Label(
frame, text='\nWe show you helpful information about you'
).pack()
tk.Label(frame, text='\n\nName:').pack()
tk.Entry(frame).pack()
tk.Button(
frame, text='Press', command=lambda: site_open(first_page)
).pack()
frame = tk.Frame(first_page, bg='blue')
frame.pack(expand=True)
tk.Label(frame, text='1Page').pack()
tk.Button(
frame, text='Press', command=lambda: site_open(start_page)
).pack()
site_open(start_page)
window.mainloop()
if __name__ == '__main__':
main()