简单的 Qt 小部件来绘制线条和形状(如 tkinter canvas)?
easy Qt widget to draw lines and shapes (like the tkinter canvas)?
我曾经使用 tkinter 创建 GUI,但我正在尝试切换到 PySide2(更可定制)但是找不到任何 PySide2 小部件来替换我使用 tkinter 的 tkinter.canvas .
我尝试使用 QtGui.Qpainter 小部件,但与 tkinter canvas 相比它似乎非常复杂,我无法弄清楚它是如何工作的。
有人知道一个易于使用的 pyside 小部件吗?可以让我在上面画线和形状?
类似于 Tkinter Canvas Widget is Qt Graphics Framework 的东西,它使用类似于 Canvas 项目的 QGraphicsItems。由于您不要求具体示例,因此我将从 Tkinter 文档到 Qt 实现一个示例:
try:
from Tkinter import *
except ImportError:
from tkinter import *
master = Tk()
w = Canvas(master, width=200, height=100)
w.pack()
w.create_line(0, 0, 200, 100)
w.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))
w.create_rectangle(50, 25, 150, 75, fill="blue")
mainloop()
import sys
from PySide2 import QtCore, QtGui, QtWidgets
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
scene = QtWidgets.QGraphicsScene(QtCore.QRectF(0, 0, 200, 100))
view = QtWidgets.QGraphicsView(
scene, alignment=QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter
)
view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
view.setBackgroundBrush(
QtWidgets.QApplication.style()
.standardPalette()
.brush(QtGui.QPalette.Background)
)
view.setWindowTitle("Qt")
line1 = scene.addLine(0, 0, 200, 100)
line2 = scene.addLine(0, 100, 200, 0)
pen = QtGui.QPen()
pen.setDashPattern((4, 4))
pen.setColor(QtGui.QColor("red"))
line2.setPen(pen)
rect = scene.addRect(QtCore.QRectF(QtCore.QPointF(50, 25), QtCore.QPointF(150, 75)))
rect.setBrush(QtGui.QColor("blue"))
view.resize(200, 100)
view.show()
sys.exit(app.exec_())
等效项
| Tk Items | Qt Items |
|-----------|---------------------------------------------------------------|
| arc | QGraphicsEllipseItem, QGraphicsPathItem |
| bitmap | QGraphicsPixmapItem |
| image | QGraphicsPixmapItem |
| line | QGraphicsLineItem, QGraphicsPathItem |
| oval | QGraphicsEllipseItem, QGraphicsPathItem |
| polygon | QGraphicsPolygonItem, QGraphicsPathItem |
| rectangle | QGraphicsRectItem, QGraphicsPathItem |
| text | QGraphicsSimpleTextItem, QGraphicsTextItem, QGraphicsPathItem |
| window | QGraphicsProxyWidget |
我曾经使用 tkinter 创建 GUI,但我正在尝试切换到 PySide2(更可定制)但是找不到任何 PySide2 小部件来替换我使用 tkinter 的 tkinter.canvas .
我尝试使用 QtGui.Qpainter 小部件,但与 tkinter canvas 相比它似乎非常复杂,我无法弄清楚它是如何工作的。
有人知道一个易于使用的 pyside 小部件吗?可以让我在上面画线和形状?
类似于 Tkinter Canvas Widget is Qt Graphics Framework 的东西,它使用类似于 Canvas 项目的 QGraphicsItems。由于您不要求具体示例,因此我将从 Tkinter 文档到 Qt 实现一个示例:
try:
from Tkinter import *
except ImportError:
from tkinter import *
master = Tk()
w = Canvas(master, width=200, height=100)
w.pack()
w.create_line(0, 0, 200, 100)
w.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))
w.create_rectangle(50, 25, 150, 75, fill="blue")
mainloop()
import sys
from PySide2 import QtCore, QtGui, QtWidgets
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
scene = QtWidgets.QGraphicsScene(QtCore.QRectF(0, 0, 200, 100))
view = QtWidgets.QGraphicsView(
scene, alignment=QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter
)
view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
view.setBackgroundBrush(
QtWidgets.QApplication.style()
.standardPalette()
.brush(QtGui.QPalette.Background)
)
view.setWindowTitle("Qt")
line1 = scene.addLine(0, 0, 200, 100)
line2 = scene.addLine(0, 100, 200, 0)
pen = QtGui.QPen()
pen.setDashPattern((4, 4))
pen.setColor(QtGui.QColor("red"))
line2.setPen(pen)
rect = scene.addRect(QtCore.QRectF(QtCore.QPointF(50, 25), QtCore.QPointF(150, 75)))
rect.setBrush(QtGui.QColor("blue"))
view.resize(200, 100)
view.show()
sys.exit(app.exec_())
等效项
| Tk Items | Qt Items |
|-----------|---------------------------------------------------------------|
| arc | QGraphicsEllipseItem, QGraphicsPathItem |
| bitmap | QGraphicsPixmapItem |
| image | QGraphicsPixmapItem |
| line | QGraphicsLineItem, QGraphicsPathItem |
| oval | QGraphicsEllipseItem, QGraphicsPathItem |
| polygon | QGraphicsPolygonItem, QGraphicsPathItem |
| rectangle | QGraphicsRectItem, QGraphicsPathItem |
| text | QGraphicsSimpleTextItem, QGraphicsTextItem, QGraphicsPathItem |
| window | QGraphicsProxyWidget |