#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. Ааааа, кажется, я понимаю, о чем ты говоришь. Я не понимал, что это приведет к такому результату. Я сделал это просто для уменьшения количества символов, чтобы это выглядело немного аккуратнее. Я изменю это! Спасибо за уловку! @Классное облако, как будто у тебя в голове. Так что, как и легкодоступные вещи.