Как запустить таймер рядом с окном в python - PullRequest
0 голосов
/ 25 апреля 2020

Я хотел бы запустить это окно вместе с таймером, который вызывает update_grid каждую секунду. Я пытался использовать многопоточность (это комментируется, извините, если это неправильно, я нуб), и это сработало, но это было очень медленно и неэффективно. Я слышал, что должен использовать Process из multiprocessing, но в нем есть ошибки, которые я не могу понять. Есть ли способ сделать это с помощью любого метода, который так или иначе эффективен? Спасибо.

import tkinter as tk
import random
import threading
import time


class Kanvas(tk.Canvas):
    def __init__(self, master, w, h):
        tk.Canvas.__init__(self, master=master, width=w, height=h, bg='black')
        self.__grid_color=[['black']*10]*21
        self.create_grid()

    def create_grid(self):
        color = []
        for y in range(21):
            for x in range(10):
                # x-c, y-c, x+c, y+c
                color = self.__grid_color[y][x]
                self.create_rectangle(5 + 28 * x, 5 + 28 * y, 5 + 28 * x + 28, 5 + 28 * y + 28, outline='white',
                                      fill=color)

    def update_colors(self,colors):
        self.__grid_color=colors
        self.create_grid()



class MainWindow(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.geometry('+300+80')
        self.__canvas = Kanvas(self, 287, 595)
        self.__canvas.pack(padx=5,pady=5)

        self.bind('<Left>', lambda event: print('left'))
        self.bind('<Right>', lambda event: print('right'))
        self.bind('<Down>', lambda event: print('down'))
        self.bind('<Up>', lambda event: self.update_grid())


    def update_grid(self):
        # Random RGB 
        color=[];aux=[]
        for j in range(21):
            aux=[]
            for j in range(10): aux.append('#'+''.join(random.choice('0123456789ABCDEF') for j in range(6)))
            color.append(aux)
        self.__canvas.update_colors(color)

# def countdown():
#     while(True):
#         time.sleep(1)
#         fen.update_grid()   

fen = MainWindow()
# x = threading.Thread(target=countdown,daemon=True)
# x.start()
fen.mainloop()
# x.join()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...