Determine which ellipse in click event
up vote
1
down vote
favorite
I'm very new to python and PyQT and have become stuck. So apologies if my code is a bit of a mess. I have spent quite some time searching but haven't yet found anything that helps my situation.
I'm trying to identify which ellipse was clicked.
I basically have a section that creates ellipses in a circle and prints text over it based on values from an array of lists:
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent = None ):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene())
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = list( {} for i in xrange(12) )
circX = 0
circY = 0
maxX = 0
maxY = 0
i = 0
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
font = QtGui.QFont('White Rabbit')
font.setPointSize(12)
arLights = getLights()
theta = radians(360)
columns = len(filter(None, arLights))
alpha = theta / columns
for a in range(columns):
angle = a * alpha
circX = (w + x) * cos(angle)
circY = (h + y) * sin(angle)
item = callbackEllipse(circX, circY, w, h) #(x+xi*(w+x), y+yi*(h+y), w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
self.scene().addItem(item)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.writeText(arrLight[i]['name'], circX + (w / 4), circY + (h * 0.75))
i = i + 1
This is my mouseReleaseEvent, where I am then trying to work out the name associated with that ellipse by using the same formula that I used to lay them out.
class callbackEllipse(QtWidgets.QGraphicsEllipseItem):
def mouseReleaseEvent(self, event):
# recolor on click
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
QtWidgets.QGraphicsEllipseItem.setBrush(self, brush)
theta = radians(360)
alpha = theta / arrRange
arrLights = getLights()
for a in xrange(0, len(filter(None, arrLights))):
if (event.scenePos().x() > ((w + x) * cos(a * alpha))
and event.scenePos().x() < (((w + x) * cos(a * alpha)) + w)
and event.screenPos().y() < ((h + y) * sin(a * alpha))
and event.screenPos().y() < (((h + y) * sin(a * alpha)) + h)
):
print(arrLights[a]['name'])
break
return QtWidgets.QGraphicsEllipseItem.mouseReleaseEvent(self, event)
This doesn't work as intended. I've tried .sceenPos() .screenPos() and .pos() but they don't appear to match up with the co-ordinates from when I created the ellipses, resulting in it identifying the wrong associated text or not finding a match at all.
Can anyone help me with a way to identify the ellipse or what why my code isn't working the way I want it to? There doesn't seem to be a way to 'name' them, which would be easier.
python pyqt pyqt5 qgraphicsview qgraphicsscene
add a comment |
up vote
1
down vote
favorite
I'm very new to python and PyQT and have become stuck. So apologies if my code is a bit of a mess. I have spent quite some time searching but haven't yet found anything that helps my situation.
I'm trying to identify which ellipse was clicked.
I basically have a section that creates ellipses in a circle and prints text over it based on values from an array of lists:
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent = None ):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene())
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = list( {} for i in xrange(12) )
circX = 0
circY = 0
maxX = 0
maxY = 0
i = 0
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
font = QtGui.QFont('White Rabbit')
font.setPointSize(12)
arLights = getLights()
theta = radians(360)
columns = len(filter(None, arLights))
alpha = theta / columns
for a in range(columns):
angle = a * alpha
circX = (w + x) * cos(angle)
circY = (h + y) * sin(angle)
item = callbackEllipse(circX, circY, w, h) #(x+xi*(w+x), y+yi*(h+y), w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
self.scene().addItem(item)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.writeText(arrLight[i]['name'], circX + (w / 4), circY + (h * 0.75))
i = i + 1
This is my mouseReleaseEvent, where I am then trying to work out the name associated with that ellipse by using the same formula that I used to lay them out.
class callbackEllipse(QtWidgets.QGraphicsEllipseItem):
def mouseReleaseEvent(self, event):
# recolor on click
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
QtWidgets.QGraphicsEllipseItem.setBrush(self, brush)
theta = radians(360)
alpha = theta / arrRange
arrLights = getLights()
for a in xrange(0, len(filter(None, arrLights))):
if (event.scenePos().x() > ((w + x) * cos(a * alpha))
and event.scenePos().x() < (((w + x) * cos(a * alpha)) + w)
and event.screenPos().y() < ((h + y) * sin(a * alpha))
and event.screenPos().y() < (((h + y) * sin(a * alpha)) + h)
):
print(arrLights[a]['name'])
break
return QtWidgets.QGraphicsEllipseItem.mouseReleaseEvent(self, event)
This doesn't work as intended. I've tried .sceenPos() .screenPos() and .pos() but they don't appear to match up with the co-ordinates from when I created the ellipses, resulting in it identifying the wrong associated text or not finding a match at all.
Can anyone help me with a way to identify the ellipse or what why my code isn't working the way I want it to? There doesn't seem to be a way to 'name' them, which would be easier.
python pyqt pyqt5 qgraphicsview qgraphicsscene
whats isgetLights
?
– eyllanesc
Nov 19 at 23:59
It’s a defined function that returns an array of dictionaries with details of Hive lights: [0] { “name” : “value”, “id” : “value”, “status” : Boolean, “brightness” : “value” }
– xnemesis
Nov 20 at 17:14
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I'm very new to python and PyQT and have become stuck. So apologies if my code is a bit of a mess. I have spent quite some time searching but haven't yet found anything that helps my situation.
I'm trying to identify which ellipse was clicked.
I basically have a section that creates ellipses in a circle and prints text over it based on values from an array of lists:
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent = None ):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene())
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = list( {} for i in xrange(12) )
circX = 0
circY = 0
maxX = 0
maxY = 0
i = 0
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
font = QtGui.QFont('White Rabbit')
font.setPointSize(12)
arLights = getLights()
theta = radians(360)
columns = len(filter(None, arLights))
alpha = theta / columns
for a in range(columns):
angle = a * alpha
circX = (w + x) * cos(angle)
circY = (h + y) * sin(angle)
item = callbackEllipse(circX, circY, w, h) #(x+xi*(w+x), y+yi*(h+y), w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
self.scene().addItem(item)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.writeText(arrLight[i]['name'], circX + (w / 4), circY + (h * 0.75))
i = i + 1
This is my mouseReleaseEvent, where I am then trying to work out the name associated with that ellipse by using the same formula that I used to lay them out.
class callbackEllipse(QtWidgets.QGraphicsEllipseItem):
def mouseReleaseEvent(self, event):
# recolor on click
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
QtWidgets.QGraphicsEllipseItem.setBrush(self, brush)
theta = radians(360)
alpha = theta / arrRange
arrLights = getLights()
for a in xrange(0, len(filter(None, arrLights))):
if (event.scenePos().x() > ((w + x) * cos(a * alpha))
and event.scenePos().x() < (((w + x) * cos(a * alpha)) + w)
and event.screenPos().y() < ((h + y) * sin(a * alpha))
and event.screenPos().y() < (((h + y) * sin(a * alpha)) + h)
):
print(arrLights[a]['name'])
break
return QtWidgets.QGraphicsEllipseItem.mouseReleaseEvent(self, event)
This doesn't work as intended. I've tried .sceenPos() .screenPos() and .pos() but they don't appear to match up with the co-ordinates from when I created the ellipses, resulting in it identifying the wrong associated text or not finding a match at all.
Can anyone help me with a way to identify the ellipse or what why my code isn't working the way I want it to? There doesn't seem to be a way to 'name' them, which would be easier.
python pyqt pyqt5 qgraphicsview qgraphicsscene
I'm very new to python and PyQT and have become stuck. So apologies if my code is a bit of a mess. I have spent quite some time searching but haven't yet found anything that helps my situation.
I'm trying to identify which ellipse was clicked.
I basically have a section that creates ellipses in a circle and prints text over it based on values from an array of lists:
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent = None ):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene())
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = list( {} for i in xrange(12) )
circX = 0
circY = 0
maxX = 0
maxY = 0
i = 0
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
font = QtGui.QFont('White Rabbit')
font.setPointSize(12)
arLights = getLights()
theta = radians(360)
columns = len(filter(None, arLights))
alpha = theta / columns
for a in range(columns):
angle = a * alpha
circX = (w + x) * cos(angle)
circY = (h + y) * sin(angle)
item = callbackEllipse(circX, circY, w, h) #(x+xi*(w+x), y+yi*(h+y), w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
self.scene().addItem(item)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.writeText(arrLight[i]['name'], circX + (w / 4), circY + (h * 0.75))
i = i + 1
This is my mouseReleaseEvent, where I am then trying to work out the name associated with that ellipse by using the same formula that I used to lay them out.
class callbackEllipse(QtWidgets.QGraphicsEllipseItem):
def mouseReleaseEvent(self, event):
# recolor on click
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
QtWidgets.QGraphicsEllipseItem.setBrush(self, brush)
theta = radians(360)
alpha = theta / arrRange
arrLights = getLights()
for a in xrange(0, len(filter(None, arrLights))):
if (event.scenePos().x() > ((w + x) * cos(a * alpha))
and event.scenePos().x() < (((w + x) * cos(a * alpha)) + w)
and event.screenPos().y() < ((h + y) * sin(a * alpha))
and event.screenPos().y() < (((h + y) * sin(a * alpha)) + h)
):
print(arrLights[a]['name'])
break
return QtWidgets.QGraphicsEllipseItem.mouseReleaseEvent(self, event)
This doesn't work as intended. I've tried .sceenPos() .screenPos() and .pos() but they don't appear to match up with the co-ordinates from when I created the ellipses, resulting in it identifying the wrong associated text or not finding a match at all.
Can anyone help me with a way to identify the ellipse or what why my code isn't working the way I want it to? There doesn't seem to be a way to 'name' them, which would be easier.
python pyqt pyqt5 qgraphicsview qgraphicsscene
python pyqt pyqt5 qgraphicsview qgraphicsscene
edited Nov 20 at 18:08
eyllanesc
69.8k93052
69.8k93052
asked Nov 19 at 21:04
xnemesis
404
404
whats isgetLights
?
– eyllanesc
Nov 19 at 23:59
It’s a defined function that returns an array of dictionaries with details of Hive lights: [0] { “name” : “value”, “id” : “value”, “status” : Boolean, “brightness” : “value” }
– xnemesis
Nov 20 at 17:14
add a comment |
whats isgetLights
?
– eyllanesc
Nov 19 at 23:59
It’s a defined function that returns an array of dictionaries with details of Hive lights: [0] { “name” : “value”, “id” : “value”, “status” : Boolean, “brightness” : “value” }
– xnemesis
Nov 20 at 17:14
whats is
getLights
?– eyllanesc
Nov 19 at 23:59
whats is
getLights
?– eyllanesc
Nov 19 at 23:59
It’s a defined function that returns an array of dictionaries with details of Hive lights: [0] { “name” : “value”, “id” : “value”, “status” : Boolean, “brightness” : “value” }
– xnemesis
Nov 20 at 17:14
It’s a defined function that returns an array of dictionaries with details of Hive lights: [0] { “name” : “value”, “id” : “value”, “status” : Boolean, “brightness” : “value” }
– xnemesis
Nov 20 at 17:14
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
Do not work 2 times unnecessarily, save a value reference and print it since mouseReleaseEvent()
will only be called if the item is pressed:
import math
from PyQt5 import QtCore, QtGui, QtWidgets
def getLights():
return [{"name": str(i)} for i in range(10)]
class CallbackEllipse(QtWidgets.QGraphicsEllipseItem):
def __init__(self, light, *args, **kwargs):
super(CallbackEllipse, self).__init__(*args, **kwargs)
self._light = light
def mouseReleaseEvent(self, event):
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
self.setBrush(brush)
print(self._light["name"])
super(CallbackEllipse, self).mouseReleaseEvent(event)
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent=None):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene(self))
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = getLights()
theta = math.radians(360)
filter_lights = list(filter(None, arLights))
num_of_columns = len(filter_lights)
delta = theta/num_of_columns
circX, circY = 0, 0
w, h, x, y = 100, 100, 100, 100
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
for i, light in enumerate(filter_lights):
angle = i*delta
circX = (w + x) * math.cos(angle)
circY = (h + y) * math.sin(angle)
item = CallbackEllipse(light, circX, circY, w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.scene().addItem(item)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MyFrame()
w.show()
sys.exit(app.exec_())
Thank you so much eyllanesc. It works perfectly. Now to study this carefully and work out exactly what is happening why it works.
– xnemesis
Nov 20 at 18:00
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Do not work 2 times unnecessarily, save a value reference and print it since mouseReleaseEvent()
will only be called if the item is pressed:
import math
from PyQt5 import QtCore, QtGui, QtWidgets
def getLights():
return [{"name": str(i)} for i in range(10)]
class CallbackEllipse(QtWidgets.QGraphicsEllipseItem):
def __init__(self, light, *args, **kwargs):
super(CallbackEllipse, self).__init__(*args, **kwargs)
self._light = light
def mouseReleaseEvent(self, event):
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
self.setBrush(brush)
print(self._light["name"])
super(CallbackEllipse, self).mouseReleaseEvent(event)
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent=None):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene(self))
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = getLights()
theta = math.radians(360)
filter_lights = list(filter(None, arLights))
num_of_columns = len(filter_lights)
delta = theta/num_of_columns
circX, circY = 0, 0
w, h, x, y = 100, 100, 100, 100
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
for i, light in enumerate(filter_lights):
angle = i*delta
circX = (w + x) * math.cos(angle)
circY = (h + y) * math.sin(angle)
item = CallbackEllipse(light, circX, circY, w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.scene().addItem(item)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MyFrame()
w.show()
sys.exit(app.exec_())
Thank you so much eyllanesc. It works perfectly. Now to study this carefully and work out exactly what is happening why it works.
– xnemesis
Nov 20 at 18:00
add a comment |
up vote
1
down vote
accepted
Do not work 2 times unnecessarily, save a value reference and print it since mouseReleaseEvent()
will only be called if the item is pressed:
import math
from PyQt5 import QtCore, QtGui, QtWidgets
def getLights():
return [{"name": str(i)} for i in range(10)]
class CallbackEllipse(QtWidgets.QGraphicsEllipseItem):
def __init__(self, light, *args, **kwargs):
super(CallbackEllipse, self).__init__(*args, **kwargs)
self._light = light
def mouseReleaseEvent(self, event):
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
self.setBrush(brush)
print(self._light["name"])
super(CallbackEllipse, self).mouseReleaseEvent(event)
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent=None):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene(self))
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = getLights()
theta = math.radians(360)
filter_lights = list(filter(None, arLights))
num_of_columns = len(filter_lights)
delta = theta/num_of_columns
circX, circY = 0, 0
w, h, x, y = 100, 100, 100, 100
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
for i, light in enumerate(filter_lights):
angle = i*delta
circX = (w + x) * math.cos(angle)
circY = (h + y) * math.sin(angle)
item = CallbackEllipse(light, circX, circY, w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.scene().addItem(item)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MyFrame()
w.show()
sys.exit(app.exec_())
Thank you so much eyllanesc. It works perfectly. Now to study this carefully and work out exactly what is happening why it works.
– xnemesis
Nov 20 at 18:00
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Do not work 2 times unnecessarily, save a value reference and print it since mouseReleaseEvent()
will only be called if the item is pressed:
import math
from PyQt5 import QtCore, QtGui, QtWidgets
def getLights():
return [{"name": str(i)} for i in range(10)]
class CallbackEllipse(QtWidgets.QGraphicsEllipseItem):
def __init__(self, light, *args, **kwargs):
super(CallbackEllipse, self).__init__(*args, **kwargs)
self._light = light
def mouseReleaseEvent(self, event):
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
self.setBrush(brush)
print(self._light["name"])
super(CallbackEllipse, self).mouseReleaseEvent(event)
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent=None):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene(self))
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = getLights()
theta = math.radians(360)
filter_lights = list(filter(None, arLights))
num_of_columns = len(filter_lights)
delta = theta/num_of_columns
circX, circY = 0, 0
w, h, x, y = 100, 100, 100, 100
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
for i, light in enumerate(filter_lights):
angle = i*delta
circX = (w + x) * math.cos(angle)
circY = (h + y) * math.sin(angle)
item = CallbackEllipse(light, circX, circY, w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.scene().addItem(item)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MyFrame()
w.show()
sys.exit(app.exec_())
Do not work 2 times unnecessarily, save a value reference and print it since mouseReleaseEvent()
will only be called if the item is pressed:
import math
from PyQt5 import QtCore, QtGui, QtWidgets
def getLights():
return [{"name": str(i)} for i in range(10)]
class CallbackEllipse(QtWidgets.QGraphicsEllipseItem):
def __init__(self, light, *args, **kwargs):
super(CallbackEllipse, self).__init__(*args, **kwargs)
self._light = light
def mouseReleaseEvent(self, event):
color = QtGui.QColor(QtCore.Qt.lightGray)
brush = QtGui.QBrush(color)
self.setBrush(brush)
print(self._light["name"])
super(CallbackEllipse, self).mouseReleaseEvent(event)
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent=None):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene(self))
self.setBackgroundBrush(QtGui.QColor(QtCore.Qt.darkGray))
self.setRenderHints(self.renderHints() | QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform)
arLights = getLights()
theta = math.radians(360)
filter_lights = list(filter(None, arLights))
num_of_columns = len(filter_lights)
delta = theta/num_of_columns
circX, circY = 0, 0
w, h, x, y = 100, 100, 100, 100
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.lightGray).darker(50))
brush = QtGui.QBrush(QtGui.QColor(QtCore.Qt.lightGray))
for i, light in enumerate(filter_lights):
angle = i*delta
circX = (w + x) * math.cos(angle)
circY = (h + y) * math.sin(angle)
item = CallbackEllipse(light, circX, circY, w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.scene().addItem(item)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MyFrame()
w.show()
sys.exit(app.exec_())
edited Nov 20 at 0:30
answered Nov 20 at 0:12
eyllanesc
69.8k93052
69.8k93052
Thank you so much eyllanesc. It works perfectly. Now to study this carefully and work out exactly what is happening why it works.
– xnemesis
Nov 20 at 18:00
add a comment |
Thank you so much eyllanesc. It works perfectly. Now to study this carefully and work out exactly what is happening why it works.
– xnemesis
Nov 20 at 18:00
Thank you so much eyllanesc. It works perfectly. Now to study this carefully and work out exactly what is happening why it works.
– xnemesis
Nov 20 at 18:00
Thank you so much eyllanesc. It works perfectly. Now to study this carefully and work out exactly what is happening why it works.
– xnemesis
Nov 20 at 18:00
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53382602%2fdetermine-which-ellipse-in-click-event%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
whats is
getLights
?– eyllanesc
Nov 19 at 23:59
It’s a defined function that returns an array of dictionaries with details of Hive lights: [0] { “name” : “value”, “id” : “value”, “status” : Boolean, “brightness” : “value” }
– xnemesis
Nov 20 at 17:14