У меня есть приложение gui, в котором на панели навигации есть кнопки для переключения между кадрами. На стартовой странице есть виджет ввода для получения имени файла и список для отображения всех сохраненных имен файлов. Когда имя файла выбирается из списка, открывается другая страница, на которой отображается выбранное имя файла. здесь создает объекты фрейма в начале, складывает их и поднимает в зависимости от того, какой фрейм вызывается. Но я думаю, что мое окно должно обновляться каждый раз, когда оно вызывается, чтобы отображать другое имя файла. Кроме того, он находится в том же месте, что и другие фреймы, так что я все еще могу использовать кнопки панели навигации для переключения на другой дом и другие windows. Я нашел что-то похожее на этот здесь , но я не могу этого понять.
(мое фактическое приложение немного сложнее, чем это, но я думаю, что это небольшое и точное представление моей проблемы )
Редактировать :
import tkinter as tk
class MainApplication(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(1, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames={}
for F in (StartPage,PageOne):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=1, column=0, sticky="nsew")
self.show_frame("StartPage")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
self.list_box = tk.Listbox(self)
self.list_box.pack()
for item in ["file 1", "file 2", "file 3"]:
self.list_box.insert(tk.END, item)
button1 = tk.Button(self, text='Go to next Page', command=lambda: self.getvalue(controller))
button1.pack()
def getvalue(self, controller):
clicked_item=self.list_box.curselection()
selected_file=self.list_box.get(clicked_item)
print(selected_file)
controller.show_frame('PageOne')
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# ....selected file name to be displayed here....
button1 = tk.Button(self, text="Back to Home", command=lambda: controller.show_frame('StartPage'))
button1.pack()
app = MainApplication()
app.geometry("400x400")
app.mainloop()