Проводите постоянный валидационный тест в Tkinter? - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь сделать так, чтобы при правильном пути к файлу он переключал фреймы в следующее меню. Проблема в том, что валидация выполняется только тогда, когда инициализируется класс frame. Помощь?

class PlaySong(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Label(self, text="Play Song").pack(side="top", fill="x", pady=10)
        tk.Label (self,text= r"Enter in path of MIDI file (e.g C:\Users\etc.)").pack(side="top", fill="x", pady=10)
        self.SongPath = tk.Entry(self)
        self.SongPath.pack()
        valid = False
        self.enter = tk.Button(self, text="Enter path", command = lambda: valid == self.SongCheck)
        self.enter.pack(pady=10)
        tk.Button(self, text="Return to main menu",fg="red2", command=lambda: master.switch_frame(MainMenu)).pack(fill="x")
        if valid == True:
            master.switch_frame(PlaySongMixer)

    def SongCheck(self):
        path = self.SongPath.get()
        try:
            pygame.mixer.music.load(path)
        except:
            self.enter.config(text="Invalid path. Try again.")
        else:
            return True

1 Ответ

0 голосов
/ 11 февраля 2020

Вы должны вызвать switch_frame() внутри SongCheck() функцию:

class PlaySong(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        tk.Label(self, text="Play Song").pack(side="top", fill="x", pady=10)
        tk.Label(self, text=r"Enter in path of MIDI file (e.g C:\Users\etc.)").pack(side="top", fill="x", pady=10)

        self.SongPath = tk.Entry(self)
        self.SongPath.pack()

        self.enter = tk.Button(self, text="Enter path", command=self.SongCheck)
        self.enter.pack(pady=10)

        tk.Button(self, text="Return to main menu", fg="red2", command=lambda: master.switch_frame(MainMenu)).pack(fill="x")

    def SongCheck(self):
        path = self.SongPath.get()
        try:
            pygame.mixer.music.load(path)
            self.master.switch_frame(PlaySongMixer)
        except Exception as e:
            self.enter.config(text="Invalid path. Try again.")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...