import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
from PySide6.QtNetwork import *
app = QApplication(sys.argv)
win = QMainWindow()
class G(QWidget):
def __init__(self,*xs,**kw):
super().__init__(*xs,**kw)
self.rows = 8
self.cols = 8
self.states = [0 for i in range(self.rows*self.cols)]
self.state_colors = [QColor.fromRgb(0,0,0),QColor.fromRgb(255,0,0),QColor.fromRgb(0,255,0),QColor.fromRgb(0,0,255)]
for i in range(self.rows):
for j in range(self.cols):
self.setCellState(i,j,(i+j)%len(self.state_colors))
def getCellState(self,i,j):
return self.states[i*self.cols+j]
def setCellState(self,i,j,s):
self.states[i*self.cols+j] = s % len(self.state_colors)
self.update()
def cellForPos(self,x,y):
rect = self.rect()
w,h = rect.width(),rect.height()
row = int(y*self.rows/h)
if row >= self.rows:
row = self.rows-1
col = int(x*self.cols/w)
if col >= self.cols:
col = self.cols-1
return (row,col)
def clickedCell(self,i,j,delta=1):
s = self.getCellState(i,j)
self.setCellState(i,j,s+delta)
def mousePressEvent(self,event):
pos = event.position().toPoint()
x,y = pos.x(), pos.y()
i,j = self.cellForPos(x,y)
self.clickedCell(i,j)
def paintEvent(self,event):
with QPainter(self) as p:
rect = self.rect()
w,h = rect.width(),rect.height()
xdivs = [ int(i*w/self.cols) for i in range(self.cols) ] + [w]
ydivs = [ int(i*w/self.rows) for i in range(self.rows) ] + [h]
for i in range(self.rows):
for j in range(self.cols):
c = self.state_colors[self.getCellState(i,j)%len(self.state_colors)]
x = xdivs[j]
y = ydivs[i]
x1 = xdivs[j+1]
y1 = ydivs[i+1]
p.fillRect(x,y,x1-x,y1-y,c)
g = G()
win.setCentralWidget(g)
win.setFixedSize(512,512)
win.show()
exit(app.exec())