Я хочу создать простой графический интерфейс в Python с Tkinter.
Я искал много ссылок из stackoverflow, на основе которых я смог придумать следующий код.Но кнопки находятся не в нижнем ряду.Я думаю, что проблема в том, что размер кадра не равен размеру родительского окна.Размер фрейма зависит только от размера области виджетов.
import Tkinter as tk
master=tk.Tk()
master.title("Title")
master.geometry("500x400")
class makeframe(object):
def __init__(self,i):
self.i=i
self.frame=tk.Frame(master, bg = 'blue', width = 400, height = 400)
if(self.i == 0):
self.first_frame()
elif(self.i == 1):
self.second_frame()
else:
self.third_frame()
def next(self):
self.frame.grid_forget()
p[self.i+1].frame.grid()
def back(self):
self.frame.grid_forget()
p[self.i-1].frame.grid()
def first_frame(self):
self.nextbutton = self.next_button("Add New")
self.nextbutton.place(relx=0.90, rely=0.99, anchor=tk.SE)
self.backbutton = self.prev_button("Run Predefined")
self.backbutton.grid(column=0,row=0, padx = 2, pady = 2)
var = tk.StringVar()
self.label = tk.Label(master, textvariable=var,
relief=tk.RAISED, bg='gray', fg='black')
var.set("Welcome to Title \n(A software for testing)")
def second_frame(self):
tk.Label(self.frame, text="INSAMPLE: ").grid(row=0)
tk.Label(self.frame, text="OUTSAMPLE: ").grid(row=1)
tk.Label(self.frame, text="RESULT DIRECTORY: ").grid(row=2)
tk.Label(self.frame, text="INPUT DIRECTORY: ").grid(row=3)
tk.Label(self.frame, text="INPUT FILENAME: ").grid(row=4)
tk.Label(self.frame, text="INDEX COLUMNNAME: ").grid(row=5)
tk.Label(self.frame, text="INPUT FILEEXTENSION: ").grid(row=6)
tk.Label(self.frame, text="COLUMNNAME: ").grid(row=7)
tk.Entry(self.frame).grid(row = 0, column = 1)
tk.Entry(self.frame).grid(row = 1, column = 1)
tk.Entry(self.frame).grid(row = 2, column = 1)
tk.Entry(self.frame).grid(row = 3, column = 1)
tk.Entry(self.frame).grid(row = 4, column = 1)
tk.Entry(self.frame).grid(row = 5, column = 1)
tk.Entry(self.frame).grid(row = 6, column = 1)
tk.Entry(self.frame).grid(row = 7, column = 1)
self.nextbutton = self.next_button("Next")
self.nextbutton.place(relx=0.90, rely=1.1, anchor=tk.SE)
self.backbutton = self.prev_button("Previous")
self.backbutton.place(relx=0.10, rely=1.1, anchor=tk.SW)
def third_frame(self):
tk.Label(self.frame, text="Method name: ").grid(row=0)
tk.Label(self.frame, text="Method name: ").grid(row=1)
tk.Label(self.frame, text="Method name: ").grid(row=2)
tk.Label(self.frame, text="Method name: ").grid(row=3)
tk.Label(self.frame, text="Method name: ").grid(row=4)
tk.Entry(self.frame).grid(row=0, column=1)
tk.Entry(self.frame).grid(row=1, column=1)
tk.Entry(self.frame).grid(row=2, column=1)
tk.Entry(self.frame).grid(row=3, column=1)
tk.Entry(self.frame).grid(row=4, column=1)
self.nextbutton = self.next_button("Create Strategies")
self.nextbutton.place(relx=0.90, rely=0.99, anchor=tk.SE)
self.backbutton = self.prev_button("Previous")
self.backbutton.place(relx=0.10, rely=0.99, anchor=tk.SW)
def next_button(self, string):
return tk.Button(self.frame, text=string,
bg='gray', fg='black', command = self.next)
def prev_button(self, string):
return tk.Button(self.frame, text=string,
bg='gray', fg='black', command = self.back)
n=3
p=[0]*n
for i in range(n):
p[i]=makeframe(i)
p[0].frame.grid()
p[-1].nextbutton.config(state=tk.DISABLED)
master.mainloop()
Кнопки вроде бы работают нормально, но для меня реальная проблема - размещение виджетов.Я хотел, чтобы они занимали хорошее пространство, по центру и кнопкам внизу справа и слева.Я пытаюсь графический интерфейс в первый раз.Извиняюсь, если вопрос простой.