Ich programmiere ein kleines Spiel mit Tkinter und kurz stecke ich fest.
Ich habe ein Art od Startmenü, in dem sich zwei Schaltflächen und eine Beschriftung befinden.
Wenn ich nur den Rahmen erstelle, ist alles in Ordnung, er hat die Größe 500x500 Pixel
Ich möchte, dass sich der Hintergrund nicht ändert, wenn ich die Knöpfe und die Labe erstelle, aber er passt die Größe an, was ich auch tue. Hier ist mein Code:
import tkinter as tk
def startgame():
pass
mw = tk.Tk() #Here I tried (1)
mw.title('The game')
back = tk.Frame(master=mw, width=500, height=500, bg='black')
back.pack()
go = tk.Button(master=back, text='Start Game', bg='black', fg='red',
command=lambda:startgame()).pack()
close = tk.Button(master=back, text='Quit', bg='black', fg='red',
command=lambda:quit()).pack()
info = tk.Label(master=back, text='Made by me!', bg='red',
fg='black').pack()
mw.mainloop()
Ich habe in stackoverflow herumgesucht und nichts Nützliches erhalten! Ich habe nur eine Frage gefunden, die meiner ähnelt, aber die Antwort hat nicht funktioniert. Ich habe das versucht:
(1) mw.resizable (width = False, height = False)
Ich kann mir nicht vorstellen, was das Problem ist, ich bin wirklich verzweifelt.
Sie schalten pack_propagate
aus, indem Sie pack_propagate(0)
einstellen.
Das Deaktivieren von pack_propagate
sagt im Wesentlichen, dass die Widgets nicht die Größe des Frames beeinflussen dürfen. Sie haben also Breite und Höhe auf 500 festgelegt. Durch das Deaktivieren der Propagierungs-Standbilder kann diese Größe gewählt werden, ohne dass die Widgets die Größe des Frames ändern, um ihre jeweilige Breite/Höhe auszufüllen, was normalerweise der Fall ist
Um die Größenänderung des Stammfensters zu deaktivieren, können Sie root.resizable(0, 0)
festlegen, wobei die Größenänderung in den Richtungen x
und y
zulässig ist.
Um ein Maxsize-Fenster für ein Fenster festzulegen, wie in der anderen Antwort angegeben, können Sie das maxsize
-Attribut oder minsize
festlegen, obwohl Sie die Geometrie des Stammfensters einfach festlegen und dann die Größenänderung deaktivieren können. Ein bisschen flexibler imo.
Immer wenn Sie grid
oder pack
in einem Widget festlegen, wird None
zurückgegeben. Wenn Sie also einen Verweis auf das Widgetobjekt beibehalten möchten, sollten Sie keine Variable auf ein Widget setzen, in dem Sie grid
oder pack
aufrufen. Sie sollten stattdessen die Variable als Widget Widget(master, ....)
festlegen und dann stattdessen pack
oder grid
im Widget aufrufen.
import tkinter as tk
def startgame():
pass
mw = tk.Tk()
#If you have a large number of widgets, like it looks like you will for your
#game you can specify the attributes for all widgets simply like this.
mw.option_add("*Button.Background", "black")
mw.option_add("*Button.Foreground", "red")
mw.title('The game')
#You can set the geometry attribute to change the root windows size
mw.geometry("500x500") #You want the size of the app to be 500x500
mw.resizable(0, 0) #Don't allow resizing in the x or y direction
back = tk.Frame(master=mw,bg='black')
back.pack_propagate(0) #Don't allow the widgets inside to determine the frame's width / height
back.pack(fill=tk.BOTH, expand=1) #Expand the frame to fill the root window
#Changed variables so you don't have these set to None from .pack()
go = tk.Button(master=back, text='Start Game', command=startgame)
go.pack()
close = tk.Button(master=back, text='Quit', command=mw.destroy)
close.pack()
info = tk.Label(master=back, text='Made by me!', bg='red', fg='black')
info.pack()
mw.mainloop()
Wenn Sie möchten, dass ein Fenster als Ganzes eine bestimmte Größe hat, können Sie ihm mit dem Befehl geometry
die gewünschte Größe zuweisen. Das ist wirklich alles, was Sie tun müssen.
Zum Beispiel:
mw.geometry("500x500")
Sie sollten jedoch auch sicherstellen, dass die Widgets innerhalb des Fensters die Größe korrekt ändern. Ändern Sie daher, wie Sie den Rahmen hinzufügen:
back.pack(fill="both", expand=True)
Es gibt 2 Lösungen für Ihr Problem:
mw.geometry('500x500')
OR
back.place(x = 0, y = 0, relwidth = 1, relheight = 1)
* Die zweite Option sollte anstelle von back.pack()
verwendet werden
Versuchen Sie parent_window.maxsize(x,x);
, um die maximale Größe festzulegen. Es sollte nicht größer werden, selbst wenn Sie den Hintergrund usw. einstellen.
Edit: benutze parent_window.minsize(x,x)
auch, um die Größe konstant zu halten!