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

我有一个开始菜单,里面有两个按钮和一个标签.

如果我只是创建框架,一切都很好,它的大小为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) 兆瓦.可调整大小(宽度=假,高度=假)

我想象不出有什么问题,我真的很绝望.

推荐答案

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

在这里关闭pack_propagate基本上是说不要让框架内的小部件控制它的大小.所以你把它的宽度和高度设置为500.关闭propagate stills可使其达到此大小,而无需小部件更改框架的大小以填充其各自的宽度/高度,这是正常情况下会发生的情况

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

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

当你在小部件上设置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()

Python-3.x相关问答推荐

背包问题-如何减少内存使用

只有在Chrome尚未打开的情况下,打开Chrome后,PySimpleGUI窗口才会崩溃

如何将多个字典合并到一个列中,并为不同的行使用相同的键

合并两个数据帧并对某些总和进行求和

如何通过 GitLab V4 api 列出 gitlab 项目中的所有项目变量

Pandas 按值和索引对 DF 进行排序

使用正确的数据类型时,使用 Cerberus 验证 JSON 架构会引发错误

获取以特定字母开头的姓氏

排队多个子进程

TensorFlow:dataset.train.next_batch 是如何定义的?

sys.stdin.readline() 读取时没有提示,返回 'nothing in between'

Pylint 给我最后的新行丢失

IronPython 3 支持?

如何使用 asyncio 添加连接超时?

无法在 Windows 8 中使用 Python 3.3 找到 vcvarsall.bat

Python configparser 不会接受没有值的键

将 args、kwargs 传递给 run_in_executor

Python 3 - Zip 是 pandas 数据框中的迭代器

TypeError:只有整数标量数组可以转换为标量索引

将字符串拆分为最大长度 X 的片段 - 仅在空格处拆分