7

我是 gimp python-fu 编程的新手,我花了 4 天没有运气来找出最合适的函数,以便获取绘制路径的坐标并在 gtk 消息框上显示输出,如下图所示.

在此处输入图像描述

请考虑我在 Windows 机器上开发

我已经尝试过这样的代码:

import gtk, gimpui
from gimpfu import *

def debugMessage(Message):
    dialog = gtk.MessageDialog(None, 0, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, Message)
    dialog.run()
    dialog.hide()

def python_fu_mahdicoordinates(image, layer):
    vectors = pdb.gimp_image_get_active_vectors(image)
    nstrokes, strokes = pdb.gimp_vectors_get_strokes(vectors)
    stroke_type, n_points, cpoints, closed = pdb.gimp_vectors_stroke_get_points(vectors, strokes[0])
    x0 = cpoints[0]
    y0 = cpoints[1]
    x1 = cpoints[6]
    y1 = cpoints[7]
    x2 = cpoints[12]
    y2 = cpoints[13]
    x3 = cpoints[18]
    y3 = cpoints[19]
    debugMessage('(' + str(x0) + ', ' + str(y0) + ', '+str(x1) + ', '+str(y1) + ', '+str(x2) + ', '+str(y2) + ', '+str(x3) + ', '+str(y3) + ')')

    return

register(
    "python_fu_mahdicoordinates",
    "Mahdi Cooridnates",
    "Get Cooridnates of any path",
    "Mahdi Alkhatib", "Mahdi Alkhatib", "2016",
    "Mahdi Cooridnates...",
    "*",
    [],
    [],
    python_fu_mahdicoordinates,
    menu= "<Image>/Tools/Misc")

main()

有时插件本身不会显示在菜单中,有时根本没有输出。

4

1 回答 1

2

我一直在 Ubuntu 中测试这个问题(我知道它不一样)。但是,您的代码没有输出任何内容,因此我至少能够重现这部分问题。

你的函数有这个声明头:

def python_fu_mahdicoordinates(image, layer):

所以,register应该这样称呼:

register(
    "python_fu_mahdicoordinates",
    "Mahdi Cooridnates",
    "Get Cooridnates of any path",
    "Mahdi Alkhatib", "Mahdi Alkhatib", "2016",
    "Mahdi Cooridnates...",
    "*",
    [
        (PF_IMAGE, "image", "takes current image", None),
        (PF_LAYER, "layer", "takes current layer", None),
    ],
    [],
    python_fu_mahdicoordinates,
    menu= "<Image>/YourNewMenu")

在更改后的列表中,必须声明您的函数需要处理的参数。在您的情况下,图像和图层。这对我有用。

我不知道为什么插件有时不会出现在您的菜单中,但请尝试menu= "<Image>/YourNewMenu"使用您想要的任何名称进行声明。这应该会在菜单栏中生成一个新菜单,并且可能会完全解决您的问题。值得一试。

我希望这有帮助。

于 2016-02-15T16:34:44.083 回答