-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathringgui.py
107 lines (90 loc) · 3.66 KB
/
ringgui.py
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
from PyQt5 import QtWidgets, QtCore
class YourWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
nLedsX = 8
nLedsY = 8
self.grid = QtWidgets.QGridLayout()
self.setLayout(self.grid)
self.createConcentricRings(nLedsX, nLedsY)
self.createButtons(nLedsX)
self.createSlider()
self.setMaximumSize(500, 500)
def createConcentricRings(self, nLedsX, nLedsY):
# Create dictionary to hold buttons
self.leds = {}
# Create grid layout for leds (buttons)
gridLayout = self.grid
# Calculate the number of LEDs in each ring
ring1_leds = 1
ring2_leds = 8
ring3_leds = 15
# Create LEDs and add them to the grid layout
for ix in range(nLedsX):
for iy in range(nLedsY):
distance = max(abs(ix - nLedsX // 2), abs(iy - nLedsY // 2))
if distance == 0:
ring = 1
elif distance <= 2:
ring = 2
else:
ring = 3
corrds = str(nLedsX * iy + ix)
self.leds[corrds] = QtWidgets.QPushButton(corrds)
self.leds[corrds].setSizePolicy(
QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding
)
self.leds[corrds].setCheckable(True)
self.leds[corrds].setStyleSheet(
"""background-color: grey; font-size: 15px"""
)
self.leds[corrds].setMaximumSize(25, 25)
# Add button/label to layout
gridLayout.addWidget(self.leds[corrds], iy, ix)
# Store the LEDs for each ring
self.ring_leds = {1: [], 2: [], 3: []}
for corrds, button in self.leds.items():
distance = max(
abs(button.pos().x() - nLedsX // 2), abs(button.pos().y() - nLedsY // 2)
)
self.ring_leds[1 if distance == 0 else (2 if distance <= 2 else 3)].append(
button
)
def createButtons(self, nLedsX):
self.ButtonAllOn = QtWidgets.QPushButton("All On")
self.ButtonAllOn.setMaximumSize(25, 50)
self.ButtonAllOn.clicked.connect(self.turnOnAll)
self.grid.addWidget(self.ButtonAllOn, 0, nLedsX)
self.ButtonAllOff = QtWidgets.QPushButton("All Off")
self.ButtonAllOff.setMaximumSize(25, 50)
self.ButtonAllOff.clicked.connect(self.turnOffAll)
self.grid.addWidget(self.ButtonAllOff, 1, nLedsX)
self.ButtonSubmit = QtWidgets.QPushButton("Submit")
self.ButtonSubmit.setMaximumSize(25, 50)
self.grid.addWidget(self.ButtonSubmit, 2, nLedsX)
self.ButtonToggle = QtWidgets.QPushButton("Toggle")
self.ButtonToggle.setMaximumSize(25, 50)
self.grid.addWidget(self.ButtonToggle, 3, nLedsX)
def createSlider(self):
self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal, self)
self.slider.setFocusPolicy(QtCore.Qt.NoFocus)
self.slider.setMinimum(0)
self.slider.setMaximum(255)
self.slider.setTickInterval(5)
self.slider.setSingleStep(5)
self.slider.setValue(255)
self.grid.addWidget(self.slider, 9, 0, 1, 4)
def turnOnAll(self):
for button in self.leds.values():
button.setChecked(True)
def turnOffAll(self):
for button in self.leds.values():
button.setChecked(False)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
widget = YourWidget()
widget.show()
sys.exit(app.exec_())