PyQt 在 QDialog 的 QScrollArea 内部绘制
PyQt draw inside QScrollArea in a QDialog
我正在 QDialog 框内使用 PyQt5 绘图,但需要在添加到绘制的对象时添加滚动功能。似乎最好的选择可能是添加一个 QScrollArea 小部件并在其中绘制,但我一直无法找到任何告诉我如何这样做的东西。
我能够找到这个似乎与主题相关的问题,但它是针对 C++ 的,我不明白。
Qt - draw inside QScrollArea in a QDialog
有人可以将这意味着什么翻译成 Python 或解释在 QScrollArea 小部件内绘制或向 QDialog 添加滚动条需要什么?
每个 class 都有一个单一的职责,在这种情况下必须有 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_())
我正在 QDialog 框内使用 PyQt5 绘图,但需要在添加到绘制的对象时添加滚动功能。似乎最好的选择可能是添加一个 QScrollArea 小部件并在其中绘制,但我一直无法找到任何告诉我如何这样做的东西。 我能够找到这个似乎与主题相关的问题,但它是针对 C++ 的,我不明白。
Qt - draw inside QScrollArea in a QDialog
有人可以将这意味着什么翻译成 Python 或解释在 QScrollArea 小部件内绘制或向 QDialog 添加滚动条需要什么?
每个 class 都有一个单一的职责,在这种情况下必须有 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_())