如何解决在Python中使用QtGui.QPainter更改点对象的颜色
我正在使用qtpy的多个模块在Python中开发地图可视化程序。有一个主窗口界面,该界面在屏幕上显示包含多个地理位置点的背景图。每个点的位置由外部.csv文件确定,该文件具有有关纬度,经度和其他文本属性的信息。每次实例化地图窗口时,程序都会读取该文件。打开地图窗口时,每个点的颜色默认为红色,但是我想根据存储在.csv文件中的元数据将每个点更改为不同的颜色。例如,文件中有一个名为“颜色”的标头,并且每个点都有编码的文本字符串“红色”,“绿色”或“蓝色”。这是到目前为止我一直在研究的代码部分...
# Initialize all points to default color.
color = QtCore.Qt.red
for i,p in zip(range(len(self.points)),self.points):
if lb_lat <= stn_lat and stn_lat <= ub_lat and window_rect.contains(*self.transform.map(stn_x,stn_y)):
if p['color'] == 'green':
color = QtCore.Qt.green
elif p['color'] == 'blue':
color = QtCore.Qt.blue
elif p['color'] == 'red':
color = QtCore.Qt.red
else:
color = QtCore.Qt.white
qp.setPen(QtGui.QPen(color,self.scale))
qp.setBrush(QtGui.QBrush(color))
qp.drawEllipse(QtCore.QPointF(stn_x,stn_y),size,size)
点列表存储在变量self.points中,我试图遍历此列表,并使用QtGui.QPen和QBrush将正确的颜色应用于每个点。发生的情况是,如果.csv文件中点1的color属性具有文本字符串“ green”,则整个点阵列将变为绿色,而不仅仅是该点。在if ... else语句之后查看代码,我一直无法找到一种方法来为有问题的点“索引” setPen和setBrush命令。着色方法将整个点阵列作为一个不可分割的单元,而不是按预期的方式分别作用于每个点。也许有人会知道使用Qt框架进行此操作的方法吗?请让我知道是否提供其他代码可能有助于澄清问题或提供更好的上下文,因为我很乐意这样做。
解决方法
我可以通过删除循环遍历self.points中项目的循环结构来解决我遇到的问题。我已经有一个较高级别的“ for”循环,这导致每次将点绘制到屏幕时都引用不正确的数组索引。现在,每个点都将更改为适当的颜色。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。