【问题标题】:QPaintEvent disables QLineEdit when painting on stackedWidget - PyQtQPaintEvent 在stackedWidget上绘画时禁用QLineEdit - PyQt
【发布时间】:2017-01-05 20:44:38
【问题描述】:

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

【问题讨论】:

    标签: python qt pyqt


    【解决方案1】:

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

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

    【讨论】:

    • 好的,我现在明白了。非常感谢,我明白我的错误在哪里。所以我希望它是这样的:由 Painter 类在页面顶部绘制的图表(例如在 QFrame 或类似的东西上绘制)和页面底部的 QLineEdit,这样我的图表就不会坐在上面QLineEdit 了。你知道我怎样才能存档吗?任何提示都会有所帮助,谢谢:)
    • 我现在想通了。谢谢你的帮助@goug
    猜你喜欢
    • 2016-09-04
    • 2014-04-19
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多