首页 > 解决方案 > SVG 加载到 Frame

问题描述

我正在尝试在我的 Krita 泊坞窗中加载一个 svg 小部件以充当光标。Krita 是一个绘画程序,它使用 python 和 PyQt5 来加载插件。我制作了一个空白泊坞窗,它的加载最低限度。如果有任何添加将在标有“测试”的区域中。

然而,与其他参考相比,我的 SVG 加载方法似乎不起作用,我认为它可能是框架本身的路径,因为我试图放置我加载的查看器。

# Import Krita
from krita import *
from PyQt5 import QtWidgets, QtCore, QtGui, QtSvg, uic
import os.path

from PyQt5 import QtWidgets, QtSvg

# Set Window Title Name
DOCKER_NAME = "Blank"

# Create Docker
class BlankDocker(DockWidget):
    """
    Comments
    """
    # Initialize the Dicker Window
    def __init__(self):
        super(BlankDocker, self).__init__()

        # Window Title
        self.setWindowTitle(DOCKER_NAME)
        # Widget
        self.window = QWidget()
        self.layout = uic.loadUi(os.path.dirname(os.path.realpath(__file__)) + '/blank.ui', self.window)
        self.setWidget(self.window)

        # TESTING###################################################################################

        self.viewer = QtSvg.QSvgWidget()
        self.viewer.load('C:/Users/EyeOd/AppData/Roaming/krita/pykrita/blank/Notes/cursor_lmb.svg')
        self.viewer.setGeometry(QtCore.QRect(0,0,200,200))

        self.layout.frame.addWidget(self.viewer) #??

        ############################################################################################
    # Change the Canvas
    def canvasChanged(self, canvas):
        pass

我加载的 *.UI 文件感兴趣的区域是 QFrame = "frame",我想在其中放置小部件以在其中移动。 http://pasteall.org/pic/show.php?id=b7083dbb5e13adafcddb9ee9fdfa8fcd

标签: pythonpython-3.xpyqtpyqt5

解决方案


QFrame 没有任何名为 addWidget 的方法,因此您应该有一个例外。因此,如果您想将 QSvgWidget 放在 QFrame 中,您有两种选择:

  • 设置为 QFrame 的 QSvgWidget 的父级。

    self.viewer = QtSvg.QSvgWidget(self.window.frame)
    self.viewer.load('C:/Users/EyeOd/AppData/Roaming/krita/pykrita/blank/Notes/cursor_lmb.svg')
    self.viewer.setGeometry(QtCore.QRect(0, 0, 200, 200))
  • 使用布局:

    self.viewer = QtSvg.QSvgWidget()
    self.viewer.load('C:/Users/EyeOd/AppData/Roaming/krita/pykrita/blank/Notes/cursor_lmb.svg')
    lay = QVBoxLayout(self.window.frame)
    lay.addWidget(self.viewer)

注意:如果你使用self.layout = uic.loadUi(..., self.window)那么你会看到 self.layout 是同一个 self.window 对象,所以为了避免混淆,建议使用uic.loadUi(..., self.window)


推荐阅读