Проблемы с использованием 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

Другие вопросы по тегам