Ответ 1
Вы выключаете pack_propagate
, устанавливая pack_propagate(0)
Отключение pack_propagate
здесь в основном говорит, не позволяйте виджетам внутри фрейма контролировать размер. Таким образом, вы установили его ширину и высоту в 500. Отключение распространения неподвижных изображений позволяет использовать этот размер без виджета, изменяющего размер кадра, чтобы заполнить их соответствующую ширину/высоту, что обычно будет
Чтобы отключить изменение размера корневого окна, вы можете установить root.resizable(0, 0)
, где изменение размера разрешено в направлениях x
и y
соответственно.
Чтобы установить maxsize в окно, как указано в другом ответе, вы можете установить атрибут maxsize
или minsize
, хотя вы можете просто установить геометрию корневого окна и затем отключить изменение размера. Немного более гибкое imo.
Всякий раз, когда вы устанавливаете grid
или pack
на виджет, он возвращает None
. Итак, если вы хотите иметь возможность ссылаться на объект виджета, вы не должны устанавливать переменную для виджета, на котором вы вызываете grid
или pack
. Вместо этого вы должны установить переменную как виджет Widget(master, ....)
, а затем вместо этого вызвать pack
или grid
в виджетах.
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 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()