如何将tkinter窗口设置为常量

Mr.*_*ddy 19 python tkinter python-3.x

我正在用tkinter编写一个小游戏,简单地说,我被卡住了.

我有一个类型的开始菜单,其中有两个按钮和一个标签.

如果我只是创建框架一切都很好,它的大小为500x500像素

我希望在创建按钮和labe时不改变背景,但无论我做什么,它都会调整大小.这是我的代码:

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()
Run Code Online (Sandbox Code Playgroud)

我在stackoverflow上搜索过,并没有得到任何有用的东西!我发现只有一个类似于我的问题,但答案没有用.我试过这个:

(1)mw.resizable(width = False,height = False)

我无法想象这是什么问题,我真的很绝望.

Pyt*_*sta 31

pack_propagate通过设置关闭pack_propagate(0)

关闭pack_propagate这里基本上说不要让框架内的小部件控制它的大小.因此,您将其宽度和高度设置为500.关闭传播静止图像允许它为此大小,而不会使小部件更改框架的大小以填充其各自的宽度/高度,这是正常情况下会发生的情况

要关闭调整根窗口的大小,您可以设置root.resizable(0, 0),分别在xy方向中允许调整大小.

要将maxsize设置为窗口,如另一个答案中所述,您可以设置maxsize属性,或者minsize您可以只设置根窗口的几何图形,然后关闭调整大小.更灵活的imo.

无论何时设置gridpack在小部件上,它都会返回None.因此,如果您希望能够保留对窗口小部件对象的引用,则不应将变量设置为您正在调用gridpack在其上的窗口小部件.您应该将变量设置为窗口小部件Widget(master, ....),然后调用packgrid在窗口小部件上调用.

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()
Run Code Online (Sandbox Code Playgroud)


Bry*_*ley 7

如果您希望窗口整体具有特定大小,则可以使用该geometry命令为其指定所需大小.这真的是你需要做的.

例如:

mw.geometry("500x500")
Run Code Online (Sandbox Code Playgroud)

但是,您还需要确保窗口中的窗口小部件正确调整大小,因此更改将帧添加到此处的方式:

back.pack(fill="both", expand=True)
Run Code Online (Sandbox Code Playgroud)


Sid*_*hay 5

尝试parent_window.maxsize(x,x);设置最大尺寸。即使您设置了背景等,它也不应该变大。

编辑:parent_window.minsize(x,x)还可以使用将其设置为恒定大小!