如何将tkinter窗口设置为恒定大小

2024-05-18 23:40:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用tkinter编程一个小游戏,简单地说,我卡住了。

我有一种od起始菜单,里面有两个按钮和一个标签。

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

我希望在创建按钮和标签时背景不会改变,但无论我做什么,它都会适应大小。这是我的代码:

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

我在stackoverflow上搜索了一下,没有找到有用的东西! 我发现只有一个问题和我的有点相似,但答案不起作用。我试过这个:

(1)mw.可调整大小(宽度=False,高度=False)

我无法想象有什么问题,我真的很绝望。


Tags: textmastertkinterbackbuttonred标签按钮
3条回答

如果希望整个窗口具有特定的大小,可以使用geometry命令为其指定所需的大小。你只需要这么做。

例如:

mw.geometry("500x500")

不过,您还需要确保窗口中的小部件的大小调整正确,因此请更改向其中添加框架的方式:

back.pack(fill="both", expand=True)

通过设置pack_propagate(0),可以关闭pack_propagate

关闭pack_propagate这里基本上是说不要让框架内的小部件控制它的大小。所以你把它的宽度和高度设为500。关闭propagate stills允许它是这样的大小,而小部件不改变框架的大小来填充它们各自的宽度/高度,这是正常情况下会发生的事情

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

要将maxsize设置为window,如另一个答案中所述,您可以设置maxsize属性或minsize,尽管您只需设置根窗口的几何体,然后关闭大小调整。更灵活一点

当您在小部件上设置gridpack时,它将返回None。因此,如果您希望能够保留对widget对象的引用,那么不应该将variabe设置为要在其上调用gridpack的widget。相反,您应该将变量设置为小部件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()

有两种方法可以解决您的问题:

  1. 或者设置Tkinter窗口的固定大小;mw.geometry('500x500')

或者

  1. 使框架自动调整到窗口的大小;back.place(x = 0, y = 0, relwidth = 1, relheight = 1)

*应使用第二个选项代替back.pack()

相关问题 更多 >

    热门问题