Проблемы с использованием pack() или grid() для заполнения кадра
Я пытаюсь разместить текст внутри виджета "Метка" с правой стороны. Я установил привязку на E, но если я не укажу ширину для метки, текст не будет двигаться.
Я не хочу устанавливать конкретную ширину для виджета "Ярлык", так как она должна быть такой же ширины, как кнопки в рамке ниже, и размер кнопок может сильно измениться (это была только пробная версия с некоторыми образцами GIF, которые у меня были валяется).
Вот код, который я использую:
from tkinter import*
class CalculatorFrame:
def __init__(self, parent):
f1 = Frame(parent)
f1.grid(row = 0, column = 0)
label1 = Label(f1, anchor = E, text = "0")
label1.pack(fill = X)
f2 = Frame(parent)
f2.grid(row = 1, column = 0)
self.buttons = []
image_names = ["bus.gif", "plane.gif", "train.gif", "satellite.gif", "house.gif", "ship.gif", "satellite.gif", "plane.gif"]
for i in range(len(image_names)):
self.buttons.append(Button(f2, width = 90, height = 70, text=str(i)))
self.buttons[i].img = PhotoImage(file = image_names[i])
self.buttons[i].configure(image = self.buttons[i].img)
i = 0
for r in range(2):
for c in range(4):
self.buttons[i].grid(row = r, column = c)
i += 1
if __name__ == '__main__':
root = Tk()
game = CalculatorFrame(root)
root.mainloop()
1 ответ
Проблема исходит от содержащего виджета, f1
, Пока это просто Фрейм со значениями сетки по умолчанию, он будет только расширяться настолько, чтобы вместить все, что в нем содержится, и центрировать себя:
Вам необходимо указать sticky
значение для перемещения фрейма внутри его строки или столбца. В этом случае вы можете установить его на E
переместить его на восток:
f1 = Frame(parent)
f1.grid(row=0, column=0, sticky=E)
Label(f1, text='0').pack()
Подробнее: http://effbot.org/tkinterbook/grid.htm