Compare commits

...

2 Commits

Author SHA1 Message Date
Boyan
56dfca859b Removed TODO from README 2023-06-03 23:32:05 +03:00
Boyan
17b5ebd096 Removed TODO from README 2023-06-03 23:32:01 +03:00
2 changed files with 114 additions and 1 deletions

View File

@ -20,4 +20,3 @@ Or you can create a json file with this structure:
And running: And running:
`python picker.py --file file.json` `python picker.py --file file.json`
TODO: Add argparse

114
gui.py Normal file
View File

@ -0,0 +1,114 @@
import sys
import random
import math
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout
from PyQt5.QtGui import QPainter, QColor, QPen, QFont
from PyQt5.QtCore import Qt, QTimer
colors = [
QColor(255, 0, 0), # Red: (255, 0, 0)
QColor(255, 255, 0), # Yellow: (255, 255, 0)
QColor(0, 0, 255), # Blue: (0, 0, 255)
QColor(0, 255, 0) # Green: (0, 255, 0)
]
class RandomWheel(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.angle = 0
def initUI(self):
self.setWindowTitle('Random Wheel')
self.choices = ["Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6"]
self.chosen_option = ""
self.button = QPushButton('Spin', self)
self.button.clicked.connect(self.spin_wheel)
self.label = QLabel(self)
self.label.setAlignment(Qt.AlignCenter)
self.label.setFont(QFont('Arial', 14))
vbox = QVBoxLayout()
vbox.addWidget(self.button)
vbox.addWidget(self.label)
self.setLayout(vbox)
self.timer = QTimer()
self.timer.timeout.connect(self.update_wheel)
self.angle = 0
self.spin = False
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
self.draw_wheel(qp)
qp.end()
def draw_wheel(self, qp):
width = self.width()
height = self.height()
wheel_radius = min(width, height) // 2 - 50
center_x = width // 2
center_y = height // 2
num_choices = len(self.choices)
angle_per_choice = 360 / num_choices
pen = QPen(Qt.black, 2)
qp.setPen(pen)
qp.setRenderHint(QPainter.Antialiasing)
for i in range(num_choices):
start_angle = i * angle_per_choice + self.angle
end_angle = (i + 1) * angle_per_choice + self.angle
color = colors[i % len(colors)]
qp.setBrush(color)
qp.drawPie(center_x - wheel_radius, center_y - wheel_radius, wheel_radius * 2, wheel_radius * 2,
int(start_angle * 16), int(angle_per_choice * 16))
# Calculate the position to display the option text
text_angle = math.radians(start_angle + angle_per_choice / 2)
text_radius = wheel_radius * 0.5
text_x = center_x + int(text_radius * math.cos(text_angle))
text_y = center_y - int(text_radius * math.sin(text_angle))
qp.setPen(Qt.black)
qp.setFont(QFont('Arial', 12, QFont.Bold))
qp.drawText(text_x - 50, text_y - 10, 100, 20, Qt.AlignCenter, self.choices[i])
def spin_wheel(self):
if not self.spin:
self.spin = True
self.timer.start(30)
self.angle_speed = 10 # Adjust the wheel spin speed as desired
def update_wheel(self):
self.angle += self.angle_speed
if self.spin:
if self.angle >= 360:
self.angle = 0
self.spin = False
self.timer.stop()
self.chosen_option = random.choice(self.choices)
self.label.size
self.label.setText(self.chosen_option)
self.label.setAlignment(Qt.AlignBottom)
self.angle_speed = 0 # Stop spinning the wheel
self.update()
if __name__ == '__main__':
app = QApplication(sys.argv)
wheel = RandomWheel()
wheel.setGeometry(400, 200, 400, 400)
wheel.show()
sys.exit(app.exec_())