Сетка Tkinter и размер виджета - PullRequest
0 голосов
/ 10 января 2019

Я на самом деле изучаю Tkinter, и я хочу сделать окно, похожее на это (тетрис GUI): изображение Поэтому я хочу сделать сетку 20x15 (ч х ш) с размером плитки 25px (таким образом, размер playArea 500px x 375px) Итак, вот код, который я сделал:

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, чтобы определить размер моего холста, и моя переменная TILE_SIZE, чтобы определить количество плиток (для настройки columnspan и rowspan ), моя первая проблема это мой:

print(playarea.grid_size())

Return (0,0), так как я настроил значение columnpan и rowspan, оно должно вернуть меня (10,20), нет?

Тогда еще одна проблема связана с моими кнопками, здесь я создал две кнопки (newGame и test), я хочу, чтобы newGame был шириной 75px (или 3 * TILE_SIZE), но когда я запускаю его (для обоих width = 75 и ширина = 3 * TILE_SIZE)

print(newGameButton.winfo_width())

Верните мне 617px и кнопка огромная, я не понимаю почему, кто-то может объяснить, как работает сетка? Что вызывает это.

1 Ответ

0 голосов
/ 10 января 2019

print(playarea.grid_size())

Return (0,0), так как я настроил значение columnpan и rowspan, оно должно вернуть меня (10,20), нет?

Нет. grid_size возвращает размер (количество строк и столбцов) сетки. Вот как производится вычисление значения в соответствии с официальной документацией tcl / tk:

"Размер определяется либо ведомым, занимающим самую большую строку или столбец, либо самым большим столбцом или строкой с минимальным размером, весом или подкладкой, которые не равны нулю."

В вашем конкретном случае вы поместили виджеты только в строку 0, столбец 0, поэтому сообщенный размер (0,0) является правильным.

print(newGameButton.winfo_width())

Верните мне 617px и кнопка огромная, я не понимаю почему, кто-то может объяснить, как работает сетка? Что вызывает это.

Когда вы создаете кнопку с текстом, но без изображения, width интерпретируется как число символов , а не пикселей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...