Вторая версия почти равна вашей картинке ... Я переместил кнопки
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
class App(tk.Frame):
def __init__(self,):
super().__init__()
self.master.title("Hello World")
self.year = tk.IntVar()
self.amount = tk.DoubleVar()
self.rate = tk.DoubleVar()
self.interest = tk.DoubleVar()
self.payment = tk.DoubleVar()
self.init_ui()
def init_ui(self):
w = tk.Frame()
r =0
ttk.Label(w, text="Year:").grid(row=r, sticky=tk.W)
ttk.Entry(w,width=8, textvariable=self.year).grid(row=r, column=1, padx=5, pady=5,sticky=tk.W)
r =1
ttk.Label(w, text="Amount:").grid(row=r, sticky=tk.W)
ttk.Entry(w,width=8, textvariable=self.amount).grid(row=r, column=1, padx=5, pady=5,sticky=tk.W)
r =2
ttk.Label(w, text="Rate:").grid(row=r, sticky=tk.W)
ttk.Entry(w,width=8, textvariable=self.rate).grid(row=r, column=1, padx=5, pady=5,sticky=tk.W)
r =0
ttk.Label(w, text="Monthly Payment:").grid(row=r, column=3, sticky=tk.W)
ttk.Entry(w,width=8, textvariable=self.payment).grid(row=r, column=4, padx=5, pady=5,sticky=tk.W)
r =1
ttk.Label(w, text="Total Interest Paid:").grid(row=r, column=3, sticky=tk.W)
ttk.Entry(w,width=8, textvariable=self.interest).grid(row=r, column=4, padx=5, pady=5,sticky=tk.W)
w.grid(row=0, column=0, sticky=tk.N+tk.W+tk.S+tk.E)
#lisbox
w2 = tk.Frame()
self.get_listbox(w2,0,0,10,45).grid(padx=5, pady=5)
w2.grid(row=3, column=0, sticky=tk.N+tk.W+tk.S+tk.E)
#buttons
bts = [('Clear', self.on_clear),
('Compute', self.on_compute),
('Exit', self.on_exit),]
w3 = tk.Frame()
for r, btn in enumerate(bts):
b = ttk.Button(w3, text=btn[0], underline=0)
b.bind("<Button-1>", btn[1])
b.grid(row=r, column=0, sticky=tk.N, padx=5, pady=5)
w3.grid(row=3,column =4, sticky=tk.N)
def on_clear(self,evt=None):
msg = "To assign!"
messagebox.showwarning(self.master.title(),msg)
def on_compute(self,evt=None):
msg = "To assign!"
messagebox.showwarning(self.master.title(),msg)
def on_exit(self,evt=None):
self.master.destroy()
def get_listbox(self, container, row, col, height=None, width=None):
sb = tk.Scrollbar(container,orient=tk.VERTICAL)
w = tk.Listbox(container,
relief=tk.GROOVE,
selectmode=tk.BROWSE,
height=height,
width=width,
background = 'white',
font='TkFixedFont',
yscrollcommand=sb.set,)
sb.config(command=w.yview)
sb.grid(column=1, sticky=tk.N+tk.S)
w.grid(row=row, column=col)
return w
if __name__ == '__main__':
app = App()
app.mainloop()
![enter image description here](https://i.stack.imgur.com/ksp5y.png)