簡體   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