How to set a tkinter window to a constant size

后端 未结 5 779
粉色の甜心
粉色の甜心 2020-12-13 05:01

I\'m programming a little game with tkinter and briefly, I\'m stuck.

I have a kind od starting menu, in which are two buttons and one label.

If I just create

5条回答
  •  南笙
    南笙 (楼主)
    2020-12-13 05:38

    You turn off pack_propagate by setting pack_propagate(0)

    Turning off pack_propagate here basically says don't let the widgets inside the frame control it's size. So you've set it's width and height to be 500. Turning off propagate stills allows it to be this size without the widgets changing the size of the frame to fill their respective width / heights which is what would happen normally

    To turn off resizing the root window, you can set root.resizable(0, 0), where resizing is allowed in the x and y directions respectively.

    To set a maxsize to window, as noted in the other answer you can set the maxsize attribute or minsize although you could just set the geometry of the root window and then turn off resizing. A bit more flexible imo.

    Whenever you set grid or pack on a widget it will return None. So, if you want to be able to keep a reference to the widget object you shouldn't be setting a variabe to a widget where you're calling grid or pack on it. You should instead set the variable to be the widget Widget(master, ....) and then call pack or grid on the widget instead.

    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()
    

提交回复
热议问题