У меня есть некоторые проблемы с моей «BackButton» в этой программе Python с графическим интерфейсом Tkinter. MainFrame - это кадр с динамическим контентом.
В обоих пунктах меню (Конфигурация устройства и команда SCPI) я хотел бы реализовать BackButton, который возвращает меня в предыдущий Frame/Window, в этом случае MainFrame/MainMenu. Я немного смущен мастер-кадром SCPIMenu, где я ввел «???».
Есть ли идеи, как реализовать это? Спасибо за ваше время.Tkinter Frame с BackButton to MainMenu
class View(Tk):
def __init__(self):
Tk.__init__(self)
self.title('Device Configurator')
self.geometry('400x400')
self.resizable(0,0)
self.MainFrame = Frame(self, bd = '2', relief = RIDGE)
self.MainFrame.pack(expand = True, fill="both", padx = 5, pady = 20)
menubar = Menu(self)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label='Configure Devices', command = None)
filemenu.add_command(label='Exit', command=self.quit)
menubar.add_cascade(label='File', menu=filemenu)
infomenu = Menu(menubar, tearoff = 0)
infomenu.add_command(label='About', command = None)
menubar.add_cascade(label='Info', menu = infomenu)
self.config(menu = menubar)
def mainMenu(self):
configButton = Button(self.MainFrame, text = 'Device Configuration')
configButton.place(x=200, y=150,anchor=CENTER)
SCPIButton = Button(self.MainFrame, text = 'SCPI Command', command = self.SCPIMenu)
SCPIButton.place(x=200, y=200,anchor=CENTER)
def SCPIMenu(self):
self.SCPIFrame = Frame(???, bd = '2', relief = RIDGE)
self.SCPIFrame.pack(expand = True, fill="both", padx = 5, pady = 20)
BackButton = Button(???, text = 'Back', command = self.mainMenu)
BackButton.place(x=350, y=330, anchor=CENTER)
##The controller understands both the model and the view.
class Controller(object):
def __init__(self):
self.view = View()
self.view.mainMenu()
self.view.mainloop()
c = Controller()
Возможно, вы можете взглянуть на этот вопрос на сокрытие виджетов (http://stackoverflow.com/q/3819354). Здесь вы можете сделать выбор между просмотром ваших экранов как метода, который их рисует (и в конечном итоге удалите то, что было там раньше), или как «Frame', который вы заполняете при запуске, а затем показываете или скрываете. Позднее я получил предпочтение (поскольку для меня больше GUI/State ориентировано, чем процедурный, и может ограничивать зависимости). – FabienAndre
, когда вы изначально нажимаете кнопку «Команда SCPI», что вы хотите сделать? Вы хотите, чтобы все содержимое окна было заменено кадром SCPIMenu, или вы хотите, чтобы этот фрейм в отдельном всплывающем окне или что-то еще? –
Я хочу, чтобы все содержимое окна было заменено кадром SCPIMenu, и когда я нажимаю кнопку «Назад», я хочу вернуться в главное меню, поэтому MainFrame. – eljobso