From 91fde43b21f79fd2a366242312d5f5763a18011b Mon Sep 17 00:00:00 2001 From: Lucas Philippe <lucasphilippe@MacBook-Air-de-Lucas.local> Date: Thu, 18 Jan 2024 11:42:23 +0100 Subject: [PATCH] Etape 7 fonctionnelle --- TP1/MainNormal.py | 13 ++++++++++++ TP1/NormalCursor.py | 26 ++++++++++++++++++++++++ TP1/NormalWidget.py | 48 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 TP1/MainNormal.py create mode 100644 TP1/NormalCursor.py create mode 100644 TP1/NormalWidget.py diff --git a/TP1/MainNormal.py b/TP1/MainNormal.py new file mode 100644 index 0000000..73a04e5 --- /dev/null +++ b/TP1/MainNormal.py @@ -0,0 +1,13 @@ +from PyQt5.QtWidgets import QApplication, QMainWindow +from NormalWidget import NormalWidget +def main(): + app = QApplication([]) + window = QMainWindow() + window.resize(1024, 800) + normalWidget = NormalWidget() + window.setCentralWidget(normalWidget) + window.show() + app.exec_() + +if __name__ == "__main__": + main() diff --git a/TP1/NormalCursor.py b/TP1/NormalCursor.py new file mode 100644 index 0000000..a2339e2 --- /dev/null +++ b/TP1/NormalCursor.py @@ -0,0 +1,26 @@ +from PyQt5.QtGui import QColor + +class NormalCursor: + defaultCol=QColor("blue") + + def __init__(self, targets): + self.x = 0 + self.y = 0 + self.targets = targets + self.closest = None + def move(self, x, y): + self.x = x + self.y = y + previous_closest = self.closest + + for target in self.targets: + distance = ((self.x - target.x) ** 2 + (self.y - target.y) ** 2) ** 0.5 # cf. Theoreme de Pythagore + + if distance < target.size/2: + self.closest = target + self.closest.highlighted = True + + if previous_closest is not None: + distance = ((self.x - previous_closest.x) ** 2 + (self.y - previous_closest.y) ** 2) ** 0.5 # cf. Theoreme de Pythagore + if distance > previous_closest.size / 2: + previous_closest.highlighted = False \ No newline at end of file diff --git a/TP1/NormalWidget.py b/TP1/NormalWidget.py new file mode 100644 index 0000000..9f34fb9 --- /dev/null +++ b/TP1/NormalWidget.py @@ -0,0 +1,48 @@ +import csv, random, time +from PyQt5.QtGui import QPainter +from PyQt5.QtWidgets import QWidget +from Target import Target +from TP1.NormalCursor import NormalCursor + +class NormalWidget(QWidget): + def __init__(self): + super().__init__() + self.targets = [] + self.loadTargets() + self.cursor = NormalCursor(self.targets) + self.setMouseTracking(True) + self.start_time = None + self.selectRandomTarget() + + def loadTargets(self): + with open('src_tp_bubble.csv', newline='') as csvfile: + reader = csv.reader(csvfile) + for row in reader: + if len(row) >= 3: + x, y, size = map(int, row[:3]) + self.targets.append(Target(x,y,size)) + + def paintEvent(self, event): + painter = QPainter(self) + for target in self.targets: + target.paint(painter) + + def mouseMoveEvent(self, event): + self.cursor.move(event.x(), event.y()) + self.update() + + def selectRandomTarget(self): + if self.start_time == None: + self.start_time = time.time() + target = random.choice(self.targets) + target.toSelect = True + self.update() + + def printTime(self): + print((time.time() - self.start_time)*1000) + self.start_time = None + + def mousePressEvent(self, event): + if self.cursor.closest.click_cible(): + self.printTime() + self.selectRandomTarget() -- GitLab