PyQt在QDialog的QScrollArea内部绘制

时间:2018-12-19 02:40:05

标签: python pyqt pyqt5 qscrollarea

我正在QDialog框内绘制PyQt5,但需要添加滚动功能,因为我要添加到绘制的对象中。似乎最好的选择似乎是添加一个QScrollArea小部件并在其中进行绘制,但是我一直找不到任何告诉我该怎么做的东西。 我能够找到似乎在主题上的问题,但该问题是针对C ++的,我不理解。

Qt - draw inside QScrollArea in a QDialog

有人能够将其翻译成Python或解释在QScrollArea小部件内绘制或向QDialog添加滚动条的必要条件吗?

1 个答案:

答案 0 :(得分:2)

每个类都有一个职责,在这种情况下,必须有2个小部件:绘制它的小部件和具有QScrollArea的小部件:

from PyQt5 import QtCore, QtGui, QtWidgets

class DrawWidget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super(DrawWidget, self).__init__(*args, **kwargs)
        self.setFixedSize(640, 480)

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        painter.setBrush(QtGui.QBrush(QtCore.Qt.darkMagenta))
        painter.setPen(QtCore.Qt.NoPen)
        path = QtGui.QPainterPath()
        path.addText(QtCore.QPoint(10, 100), QtGui.QFont("Times", 40, QtGui.QFont.Bold), "Stack Overflow and Qt")
        painter.drawPath(path)

class Dialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        scroll_area = QtWidgets.QScrollArea(widgetResizable=True)
        draw_widget = DrawWidget()
        scroll_area.setWidget(draw_widget)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(scroll_area)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Dialog()
    w.resize(320, 240)
    w.show()
    sys.exit(app.exec_())