我试图在我的GUI中的堆叠小部件上的一个页面上绘制图表。 我有一个像这样的画家课:
class Painter(QtGui.QWidget):
def __init__(self):
super(Painter, self).__init__()
def paintEvent(self, e):
qp = QtGui.QPainter(self)
self.draw_lines(qp)
def draw_lines(self, qp):
pen = QtGui.QPen(QtCore.Qt.blue, 2, QtCore.Qt.SolidLine) # draw graph
qp.setPen(pen)
qp.drawLine(80, 209, 150, 209)
qp.drawLine(150, 209, 220, 60)
qp.drawLine(430, 60, 500, 209)
qp.drawLine(500, 209, 570, 209)
qp.drawLine(220, 60, 430, 60)
然后我有一个类,我的堆栈小部件中有一个页面,我称之为Painter类:
# create page 2
self.page_2 = QtGui.QWidget()
self.main_layout = QtGui.QGridLayout()
self.page_2.setLayout(self.main_layout)
# create group box
self.group_box = QtGui.QGroupBox(self.page_2)
# add plot diagram
self.PaintPanel = diagram.Painter()
self.PaintPanel.close()
self.main_layout.addWidget(self.PaintPanel, 0, 0)
# set text field
self.text = QtGui.QLineEdit(self.group_box)
self.text.setGeometry(QtCore.QRect(160, 330, 41, 21))
self.stackedWidget.addWidget(self.page_2)
我的问题是当我添加Painter类小部件时,QLineEdit变为非活动状态(阻塞/冻结了?)。没有这个,QLineEdit工作正常。我想知道为什么会这样,以及如何解决这个问题?任何帮助都感激不尽。感谢
答案 0 :(得分:1)
You Painter是一个QWidget,它位于QLineEdit之上,因此Painter获取了所有鼠标事件。如果你想在QLineEdit之上绘画,我建议继承QLineEdit并覆盖它的paint方法。
我也在想你可以让Painter成为事件过滤器而不是QWidget,并拦截你的QLineEdit绘制事件,但我相信首先会有Painter绘制,然后是QLineEdit。这可能不是你想要的。