2016-01-26 7 views
0

Без какой-либо формальной подготовки и очень простого понимания Python 3.3, я очень стараюсь понять tkinter, чтобы создать базовый gui. Я прочитал на этом методе:Устранение фреймов в tkinter

Tkinter! Understanding how to switch frames

что путь над моей головой. Я не очень хорошо разбираюсь в копировании и вставке кода. Мой вопрос таков:

Если я хочу сделать gui с несколькими окнами, которые я достигаю, просто уничтожая фрейм и заменяя его другим при использовании класса, я думаю, я просто не понимаю, почему это так чертовски сложно. Сегодня я играл некоторое время, и я не понимаю, почему следующий код не работает. То, что я не могу обернуть моей лапшой, - это , почему она правильно переводится в новое окно, но не возвращается в главное окно. Обе кнопки кодируются одинаково для своих целей, но один работает, а другой нет.

from tkinter import * 

class Application: 
    def __init__(self, master): 
     self.master = master 
     self.new_switch_on = False 
     self.main_switch_on = False 
     self.main_frame() 

    def main_frame(self): 
     if self.new_switch_on == True: 
      self.new_frame.destroy() 
     self.new_switch_on = False 
     self.main_switch_on = True 
     self.main_frame = Frame(self.master, width = 200, height = 100) 
     Label(self.main_frame, text = 'Main Frame').pack() 
     Button(self.main_frame, text = 'Next', command = self.new_frame).pack() 
     self.main_frame.pack() 

    def new_frame(self): 
     if self.main_switch_on == True: 
      self.main_frame.destroy() 
     self.main_switch_on = False 
     self.new_switch_on = True 
     self.new_frame = Frame(self.master, width = 400, height = 200) 
     Label(self.new_frame, text = 'New Frame').pack() 
     Button(self.new_frame, text = 'Back', command = self.main_frame).pack() 
     self.new_frame.pack() 

root = Tk() 
root.geometry('-1+1') 

app = Application(root) 

root.mainloop() 

Я знаю, что я могу следовать вышеуказанной ссылке, чтобы получить желаемый результат, но я просто не понимаю, почему что-то вроде этого, или что-то еще, что является немного более упрощенным для нового ученика не может выполнить тот же результат.

ответ

1

Проблема в том, что вы используете одно и то же имя для метода main_frame(self, ...) и для фрейма self.main_frame = Frame(...).

Когда вы назначаете рамку переменной self.main_frame = Frame(...), тогда вы теряете доступ к методу self.main_frame(), а ваш Button(self.new_frame, text = 'Back', command=self.main_frame) не может вызвать метод self.main_frame.

Используйте другое имя для метода main_frame - например create_main_frame

Та же проблема с new_frame(self, ...) и self.new_frame = Frame(...)

(п.с. я добавить код пустые строки, чтобы сделать его более удобным для чтения.)

from tkinter import * 

class Application: 

    def __init__(self, master): 
     self.master = master 

     self.new_switch_on = False 
     self.main_switch_on = False 

     self.create_main_frame() 

    def create_main_frame(self): # new name 
     if self.new_switch_on == True: 
      self.new_frame.destroy() 

     self.new_switch_on = False 
     self.main_switch_on = True 

     self.main_frame = Frame(self.master, width = 200, height = 100) 

     Label(self.main_frame, text = 'Main Frame').pack() 
     Button(self.main_frame, text = 'Next', command = self.create_new_frame).pack() # new name 

     self.main_frame.pack() 

    def create_new_frame(self): # new name 
     if self.main_switch_on == True: 
      self.main_frame.destroy() 

     self.main_switch_on = False 
     self.new_switch_on = True 

     self.new_frame = Frame(self.master, width = 400, height = 200) 

     Label(self.new_frame, text='New Frame').pack() 
     Button(self.new_frame, text='Back', command=self.create_main_frame).pack() # new name 

     self.new_frame.pack() 


root = Tk() 
root.geometry('-1+1') 

app = Application(root) 

root.mainloop() 
+0

Да ... Я чувствую себя идиотом, потому что знаю лучше, чем делать это. Спасибо, что указали на это. Работает точно так, как предполагалось, и теперь, после устранения булевых элементов и изменения нескольких вещей, он по-прежнему отлично работает. – Gregory6106

 Смежные вопросы

  • Нет связанных вопросов^_^