【问题标题】:easy Qt widget to draw lines and shapes (like the tkinter canvas)?简单的 Qt 小部件来绘制线条和形状(如 tkinter 画布)?
【发布时间】:2020-06-02 20:22:47
【问题描述】:

我曾经使用 tkinter 创建 GUI,但我正在尝试切换到 PySide2(它更可定制)但找不到任何 PySide2 小部件来替换我使用 tkinter 使用的 tkinter.canvas。

我尝试使用 QtGui.Qpainter 小部件,但与 tkinter 画布相比,它似乎非常复杂,我无法弄清楚它是如何工作的。

有人知道一个易于使用的 pyside 小部件,它可以让我在其上绘制线条和形状吗?

【问题讨论】:

    标签: python pyside2


    【解决方案1】:

    类似于Tkinter Canvas Widget 的东西是Qt Graphics Framework,它使用类似于Canvas Items 的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                                          |
    

    【讨论】:

      猜你喜欢
      • 2019-08-14
      • 2018-09-29
      • 1970-01-01
      • 2021-10-30
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多