繁体   English   中英

.grid()小部件时,Python tkinter主窗口大小不正确

[英]Python tkinter main window improper size when .grid() widgets

我有一个游戏板,它是行x列列表。

最小大小为2x2,最大为10x10,行数不相等:列可以(例如2x3、4x9)。

主窗口对象没有预先确定的几何尺寸设置,并且正在为创建2D地图的a中的每个列表元素使用小部件(按钮).grid()。

理想情况下,给定所使用的方法,这将在主窗口内生成一个漂亮的edge = to-edge贴图。

不幸的是,测试表明,对于列数> 3的地图而言,这是正确的,但当列数<= 3时,该窗口似乎默认为某个X大小,该丑陋的可用空间位于该窗口的右侧。 由行定义的Y轴不是这种情况。

请注意,放置的按钮是固定的32x32 px(由内部图片确定)。

def createMap (): #creates rows x columns 2D list - a map
    global rowsEntryVar, columnsEntryVar, mapList
    mapList = []
    for row in range(rowsEntryVar):
        tempList = []
        for column in range(columnsEntryVar):
            tempList.append(Button(root, bd=0, bg=redMagenta, activebackground=redMagenta))
        mapList.append(tempList)

接着:

def drawMap ():
    global mapList
    for row in range(len(mapList)):
        for column in range(len(mapList[row])):
            mapList[row][column].grid(row=row, column=column)

图片:

该图显示了问题

请放心,我是编程的新手。 :)

当列<= 3时,窗口似乎默认为某个X尺寸,

Tkinter默认为小部件的大小,因此您必须在某处设置“根”的几何形状。 以下内容在我的Slackware机器上运行良好(并且使用函数作为函数可以消除全局变量)。 如果您只是开始,那么养成良好的习惯是个好习惯,例如遵循《 Python样式指南》 https://www.python.org/dev/peps/pep-0008/ (变量和函数均为带小写的下划线) )。

from Tkinter import *

def create_map (rowsEntryVar, columnsEntryVar): #creates rows x columns 2D list - a map
    mapList = []
    for row in range(rowsEntryVar):
        tempList = []
        for column in range(columnsEntryVar):
            tempList.append(Button(root, text="%s-%s" % (row, column),
                            bd=0, bg="magenta2", activebackground=r"magenta3"))
        mapList.append(tempList)
    return mapList

def draw_map(mapList):
    for row in range(len(mapList)):
        for column in range(len(mapList[row])):
            mapList[row][column].grid(row=row, column=column)


root = Tk()
map_list=create_map(4, 3)
draw_map(map_list)
root.mainloop()

这似乎是特定于平台的限制。 我无法在Mac上复制该问题,但可以在Windows VM上复制。 显然,Windows不允许窗口的宽度小于标题栏上的按钮和图标所需的空间。

我的建议是给行和列一个正的权重,以使它们成长为适合窗口的大小,然后使用sticky选项使按钮填充指定给它们的空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM