Используйте Tkinter с mainl oop и многопоточностью - PullRequest
0 голосов
/ 28 апреля 2020

Я борюсь с проблемой ткинтера.

Те из вас, кто уже использовал tkinter, знают, что метод mainl oop блокирует выполнение кода после его вызова, и мне все еще нужно обновить GUI после вызова mainl oop.

Лучшее решение - использовать threading.Thread, но я не могу его реализовать. На самом деле я хочу вызвать появление кнопок, когда nb_file равен 1

try:
    # Python 3
    import tkinter as tk
except ImportError:
    # Python 2
    import Tkinter as tk
import threading


class App():
    def __init__(self):
        self.root = tk.Tk()
        self.main_app = Window(self.root)

class Window(tk.Frame, threading.Thread):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, self.master)
        threading.Thread.__init__(self)
        self.start()
        self.configure_gui()

    def configure_gui(self):
        self.master.title("Test")
        self.master.bind('<<foo>>', self.create_buttons)

    def create_buttons(self, event=None):
        from tkinter.font import BOLD

        self.btn = tk.Button(
            self.master,
            text="Button",
            command=self.say_hello,
            height=7)
        self.btn.grid(
            row=2,
            column=0,
            columnspan=2,
            padx=10,
            pady=10,
            sticky="nesw")

    def say_hello(self):
        print("Hello, Tkinter!") 

if __name__ == '__main__':
    app = App()
    app.root.mainloop()
     try:
            while True:
                time.sleep(1)
                nb_file = isfile()
                #print(nb_file)

                if nb_file > 0:
                    if nb_file == 1:
                        app.root.event_generate('<<foo>>', when="now")
                        #app.main_app.create_buttons()
                    elif nb_file > 1:
                   print("error")
        except KeyboardInterrupt:
            # quit
            sys.exit()
...