【发布时间】:2016-11-21 14:48:21
【问题描述】:
我想在一个小部件上画一条线:
from PyQt4 import QtGui, QtCore
class LineLabel(QtGui.QLabel):
def __init__(self,parent=None):
super(LineLabel,self).__init__(parent)
self.setMinimumSize(100,100)
self.setMaximumSize(100,100)
def paintEvent(self,e):
painter=QtGui.QPainter(self)
pen = QtGui.QPen()
pen.setWidth(5)
painter.setPen(pen)
painter.drawLine(10,10,90,90)
painter.end()
def test():
form = QtGui.QWidget()
label = LineLabel(form)
form.show()
return form
import sys
app = QtGui.QApplication(sys.argv)
window =test()
sys.exit(app.exec_())
获取线所覆盖的像素列表的最佳方法是什么?
来自 cmets 的更新:
- 我不需要直接知道起点和终点之间的像素,而是所有那些变为黑色的像素(因为线条有一定宽度,所以像素更多)。
- 我的总体目标是快速了解小部件上的哪些像素是黑色的。迭代图像的像素并查询颜色比从存储颜色的列表中读取颜色值要慢得多:对我来说,100 万像素的图像需要 1.9 秒,而 100 万条目的列表需要 0.23 秒.因此,每次更改小部件上的图像后,我必须更新该列表,例如画一条线。
- 在 QGraphicsScene 中引用 QGraphicsItem 的答案也很有帮助。
【问题讨论】:
-
这个答案可能对你有帮助:stackoverflow.com/a/12362480/2531279
-
确实是同一个问题。对 QImage.scanLine 的引用有所帮助,但答案仍然不能令人满意,因为迭代像素真的很慢。与答案相比,将迭代的区域限制在图像的可能部分(由线的起点和终点定义)使其更快。