использование tkinter, при заполнении 2 столбцов добавляется поле

#python #tkinter

#python #tkinter

Вопрос:

Я только сегодня начал изучать модуль tkinter на python. Я создаю базовый калькулятор для практики. В настоящее время я просто создаю для него фактический графический интерфейс, и кнопка «0» имеет поля с каждой стороны, и я не уверен, почему. Как я уже сказал, я только начал изучать его сегодня. Может кто-нибудь сказать мне, почему это происходит, а также как сделать так, чтобы этого не было?

Вот как это выглядит:

введите описание изображения здесь

Если посмотреть на 0, слева и справа от кнопки есть поле.

Вот код:

 from tkinter import *

#init tkinter
root = Tk()
#name program
root.title('PyCalc')

#function to call when button is pressed to add to input field
def add_input():
    return

#create an input field
Entry(root, width=40, borderwidth=5).grid(row=0, column=0, columnspan=4, padx=10, pady=10)

#put buttons where they should be
for x in range(15):
    button = Button(root, text=x, width=10, height=4, command=add_input)

    if x == 0:
        Button(root, text=x, width=20, height=4, command=add_input).grid(row=4, column=0, columnspan=2)
    elif x > 9:
        if x == 10:
            Button(root, text='=', width=10, height=4).grid(row=4, column=2)
        elif x == 11:
            Button(root, text=' ', width=10, height=4).grid(row=1, column=3)
        elif x == 12:
            Button(root, text='-', width=10, height=4).grid(row=2, column=3)
        elif x == 13:
            Button(root, text='x', width=10, height=4).grid(row=3, column=3)
        else:
            Button(root, text='/', width=10, height=4).grid(row=4, column=3)
    else:
        if x % 3 == 0:
            #9, 6, 3
            if 10 - x < 4:
                #9
                button.grid(row=1, column=2)
            elif 10 - x in [4, 5, 6]:
                #6
                button.grid(row=2, column=2)
            else:
                #3
                button.grid(row=3, column=2)
        elif 10 - x in [2, 5, 8]:
            #8, 5, 2
            if 10 - x < 4:
                #8
                button.grid(row=1, column=1)
            elif 10 - x in [4, 5, 6]:
                #5
                button.grid(row=2, column=1)
            else:
                #2
                button.grid(row=3, column=1)
        else:
            #7, 4, 1
            if 10 - x < 4:
                #7
                button.grid(row=1, column=0)
            elif 10 - x in [4, 5, 6]:
                #4
                button.grid(row=2, column=0)
            else:
                #1
                button.grid(row=3, column=0)

#run it
root.mainloop()
  

Любая помощь приветствуется. Спасибо за ваше время.

Ответ №1:

При добавлении виджета (в данном случае кнопки) в сетку вы можете добавить sticky параметр, чтобы кнопка расширялась, заполняя сетку в любом заданном направлении. В этом случае, если вы изменили на:

 Button(root, text=x, width=20, height=4, command=add_input).grid(row=4, column=0, columnspan=2, sticky=EW)
  

Это исправило бы это. tkinter.EW это встроенный в TKinter ярлык для tkinter.E tkinter.W , который говорит о необходимости расширения для заполнения на восток и на запад.

Редактировать:

Кроме того, я только что заметил, что вы создаете дополнительные кнопки, когда x меньше 9, но никогда не добавляете их в сетку. Это специально? Вы должны быть в состоянии делать то, что вы делали, когда x больше или равно 9, и вызывать grid() по уже существующей кнопке.

Комментарии:

1. Спасибо за ответ, я попробую и посмотрю, как это работает! Что касается кнопок, на которые вы ссылаетесь, я не уверен, что вы имеете в виду. Вы говорите о кнопках 0 и 9-14? Они добавляются в сетку, я просто привязал .grid к концу их. Не по какой-либо причине, просто так получилось, что по какой-то причине lol

2. Это действительно исправило проблему! Большое вам спасибо! Знаете ли вы какие-нибудь полезные ресурсы для tkinter, которые у вас в голове? Все хорошо, если вы этого не сделаете!

3. @CodyLee не сверху ??

4. Я имел в виду кнопки 0-8. Вы создаете экземпляр кнопки и сохраняете его в button переменной в строке 17, но затем вы, похоже, создаете новые кнопки для добавления в сетку. Это означает, что вы создаете «призрачную кнопку», которая никогда не помещается в сетку для каждой из этих кнопок. Для кнопок 9-14 вы правильно добавляете кнопку, сохраненную в button переменной, в сетку. Что касается ресурсов, я обычно использую tkdocs , хотя я признаю, что документация иногда может расстраивать.

5. Ааааа, кажется, я понимаю, о чем ты говоришь. Я не понимал, что это приведет к такому результату. Я сделал это просто для уменьшения количества символов, чтобы это выглядело немного аккуратнее. Я изменю это! Спасибо за уловку! @Классное облако, как будто у тебя в голове. Так что, как и легкодоступные вещи.