Tkinter网格和控件大小

2024-09-28 01:30:01 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,我正在学习Tkinter,我想做一个类似这样的窗口(俄罗斯方块图形用户界面): image 所以我想做一个20x15网格(高x宽),瓷砖大小为25px(所以500px375px游戏区大小) 下面是我做的代码:

from tkinter import *
from random import randint

root = Tk()
root.resizable(False, False)

# PLAYAREA SIZE
HEIGHT = 500
WIDTH = HEIGHT // 2
TILE_SIZE = 25

playarea = Canvas(root, width=WIDTH, height=HEIGHT, bg='yellow')
playarea.grid(column=6, row=0, columnspan=WIDTH // TILE_SIZE, rowspan=HEIGHT // TILE_SIZE)


menuFrame=Frame(root, width=(WIDTH // 2), height=HEIGHT).grid(column=0, row=0, columnspan= (WIDTH // 2) // TILE_SIZE , rowspan= int(HEIGHT / TILE_SIZE))
newGameButton = Button(menuFrame, text='Start', width= 75 , height = 1 * TILE_SIZE)
newGameButton.grid(column=1, row=1,columnspan=3, rowspan= 1)
newTestButton = Button(menuFrame, text='Test', width= 5 * TILE_SIZE, height = 1* TILE_SIZE)
newTestButton.grid(column=0, row=2, columnspan=5, rowspan=1)
root.update()

print(newGameButton.winfo_width())
print(playarea.grid_size())
#print(playarea.grid_info())

root.mainloop()

我使用HEIGHT和WIDTH变量定义画布的大小,使用my TILE_size变量定义所需的TILE数量(配置列span行span),我的第一个问题是:

^{pr2}$

Return(0,0),因为我配置了columnspan和rowspan,它应该返回我(10,20),不是吗?在

另一个问题是我的按钮,这里我创建了两个按钮(newGame和test),我希望newGame的宽度为75px(或3*TILE_SIZE),但是当我运行它(width=75和width=3*TILE_SIZE)时

print(newGameButton.winfo_width())

返回我617px和按钮是巨大的,我不明白为什么,有人能解释一下网格是如何工作的吗?是什么引起的。在


Tags: sizecolumnrootwidthgridrowprinttile
1条回答
网友
1楼 · 发布于 2024-09-28 01:30:01

print(playarea.grid_size())

Return (0,0), as I configured columnspan and rowspan it should return me (10,20), no ?

No.grid_size返回网格的大小(行数和列数)。根据tcl/tk官方文档,计算值的方法如下:

“大小由占据最大行或列的从设备决定,或由minsize、weight或pad非零的最大列或行确定。”

在您的特定案例中,您只将小部件放在第0行第0列,因此报告的(0,0)大小是正确的。在

print(newGameButton.winfo_width())

Return me 617px and the button is huge, I don't understand why, can someone explain how grid works ? What's causing this.

当您创建一个包含文本但没有图像的按钮时,width将被解释为许多字符而不是像素。在

相关问题 更多 >

    热门问题