在stackedWidget上绘制时,QPaintEvent禁用QLineEdit - PyQt

时间:2017-01-05 20:44:39

标签: python qt pyqt

我试图在我的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工作正常。我想知道为什么会这样,以及如何解决这个问题?任何帮助都感激不尽。感谢

1 个答案:

答案 0 :(得分:1)

You Painter是一个QWidget,它位于QLineEdit之上,因此Painter获取了所有鼠标事件。如果你想在QLineEdit之上绘画,我建议继承QLineEdit并覆盖它的paint方法。

我也在想你可以让Painter成为事件过滤器而不是QWidget,并拦截你的QLineEdit绘制事件,但我相信首先会有Painter绘制,然后是QLineEdit。这可能不是你想要的。