[英]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.