我有一个游戏板,它是行x列列表。
最小尺寸为2x2,最大尺寸为10x10,行数不相等:列正常(例如2x3,4x9)。
主窗口对象没有预先确定的几何尺寸设置,并且窗口小部件(按钮)中的每个列表元素都是.grid(),用于创建2D地图。
理想情况下,给定使用的方法,这将导致主窗口内的一个漂亮的edge = to-edge映射。
不幸的是,测试表明,对于列数为>的地图,情况确实如此。如图3所示,当列< = 3时,窗口似乎默认为某个X大小,其中这个丑陋的自由空间出现在窗口的右侧。 Y轴不是这种情况,它由行定义。
请注意,放置的按钮固定为32x32像素(由图像内部确定)。
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)
图像:
请放轻松我,我对编程很新。 :)
答案 0 :(得分:1)
当列< = 3时,窗口似乎默认为某个X大小,
Tkinter默认为窗口小部件的大小,因此您必须在某处设置“root”的几何体。以下在我的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()
答案 1 :(得分:1)
这似乎是特定于平台的限制。我无法在Mac上复制问题,但我可以在Windows VM上复制。显然,Windows不允许窗口宽度小于标题栏上按钮和图标所需的空间。
我的建议是给行和列一个正的权重,使它们增长到适合窗口,然后使用sticky
选项使按钮填充给它们的空间。