Я хотел бы запустить это окно вместе с таймером, который вызывает 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()