Вы не можете смешивать grid
и pack
внутри одного контейнера (фрейма / окна).
При этом вы должны понимать, что ваш display_frame и button_frame переменные на самом деле None
!Почему, потому что Frame(Window)
вернет объект Frame, но вы применили функцию pack () сразу после того, чье возвращаемое значение равно None .
Так что в основномсозданные вами виджеты Entry
и Button
имеют master=None
, и это означает, что они не находятся внутри определенных вами фреймов, а фактически являются частью основного окна.
Теперь вы можете легко понять, почемуclear_button=Button(button_frame,text="C").pack()
работал, так как теперь в главном окне есть только один менеджер геометрии, а именно pack .
Вот рабочий код.
from tkinter import * # "Tkinter" on python 2
window=Tk()
window.title("calculator")
window.geometry("500x500")
window.resizable(0,0)
input_field=StringVar()
display_frame=Frame(window)
display_frame.pack(side="top")
button_frame=Frame(window)
button_frame.pack(side="bottom")
Entry(display_frame,font=('arial',20,'bold'),textvariable=input_field,justify="right").pack(fill="x",ipady=10)
Button(button_frame, text="C").grid(row=0)
window.mainloop()