-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
113 lines (87 loc) · 3.58 KB
/
main.py
File metadata and controls
113 lines (87 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import sys
import random
from PySide6.QtCore import Qt, QTimer
from PySide6.QtGui import QFont, QPainter, QPen
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QHBoxLayout, QLabel, QPushButton, QMessageBox
class DigitLabel(QLabel):
def __init__(self, parent=None):
super().__init__(parent)
self.setAlignment(Qt.AlignCenter)
self.setFont(QFont("Arial", 48, QFont.Bold))
self.setText("0")
self.setFixedWidth(self.fontMetrics().boundingRect("0").width() * 2)
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
rect = self.contentsRect()
painter.setPen(QPen(Qt.black, 2))
painter.drawRect(rect.adjusted(2, 2, -2, -2))
super().paintEvent(event)
class SlotMachine(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Slot Machine")
self.setFixedSize(400, 200)
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
layout = QHBoxLayout(central_widget)
layout.setAlignment(Qt.AlignCenter)
self.digits = []
for _ in range(4):
digit_label = DigitLabel()
self.digits.append(digit_label)
layout.addWidget(digit_label)
self.countdown_label = QLabel("10")
self.countdown_label.setAlignment(Qt.AlignCenter)
layout.addWidget(self.countdown_label)
self.spin_button = QPushButton("Spin")
self.spin_button.clicked.connect(self.spin_button_clicked)
layout.addWidget(self.spin_button)
self.timer = QTimer()
self.timer.timeout.connect(self.update_digits)
self.countdown = 5 # Countdown time in seconds
def spin_button_clicked(self):
if self.timer.isActive():
self.timer.stop()
self.show_spin_button()
else:
self.spin_button.hide() # Hide the spin button
self.timer.start(10) # Adjust the interval for faster spinning (10 milliseconds)
self.start_countdown() # Start the countdown
def start_countdown(self):
self.countdown = 5
self.update_countdown()
def update_countdown(self):
self.countdown -= 1
self.countdown_label.setText(str(self.countdown))
if self.countdown == 0:
self.timer.stop()
self.show_spin_button()
winning_number = "0330"
for i, digit_label in enumerate(self.digits):
digit_label.setText(winning_number[i])
self.show_result_message(winning_number)
else:
QTimer.singleShot(1000, self.update_countdown) # Update countdown every 1 second
def show_spin_button(self):
self.spin_button.show()
def show_result_message(self, number):
msg_box = QMessageBox()
msg_box.setWindowTitle("Result")
msg_box.setText(f"Congratulations! You stopped at {number}. You're a winner!")
msg_box.exec()
def update_digits(self):
for i, digit_label in enumerate(self.digits):
self.digits[i].setText(str(random.randint(0, 9)))
def resizeEvent(self, event):
font = QFont("Arial", 48, QFont.Bold)
metrics = self.fontMetrics()
font.setStretch(metrics.horizontalAdvance("0") * 100 / metrics.boundingRect("0").width())
for digit_label in self.digits:
digit_label.setFont(font)
super().resizeEvent(event)
if __name__ == "__main__":
app = QApplication(sys.argv)
slot_machine = SlotMachine()
slot_machine.show()
sys.exit(app.exec())