以下代码

import gtk
import nautilus
import os
def alert(message):
    """A function to debug"""
    dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, message)
    dialog.run()
    dialog.destroy()

class TestExtension(nautilus.MenuProvider):
    def __init__(self):
        pass

    def get_file_items(self, window, files):
        items = []
        """Called when the user selects a file in Nautilus."""
        item = nautilus.MenuItem("NautilusPython::test_item", "Test", "Test")
        item.connect("activate", self.menu_activate_cb, files)
        items.append(item)
        return items

    def menu_activate_cb(self, menu, files):
        """Called when the user selects the menu."""
        for name in files:
            alert(name)

不产生任何消息。
然而
import easygui
import nautilus
import os

def alert(message):
    """A function to debug"""
    easygui.msgbox(message)

class TestExtension(nautilus.MenuProvider):
    def __init__(self):
        pass

    def get_file_items(self, window, files):
        items = []
        """Called when the user selects a file in Nautilus."""
        item = nautilus.MenuItem("NautilusPython::test_item", "Test", "Test")
        item.connect("activate", self.menu_activate_cb, files)
        items.append(item)
        return items

    def menu_activate_cb(self, menu, files):
        """Called when the user selects the menu."""
        for name in files:
            alert(name)

工作良好并生成所请求的消息。
有人能解释一下吗-或者更好的-提供一个解决办法?
(更好的是,当将alert()-调用移动到get_file_items()时,消息将正确显示)

最佳答案

艾哈迈德·谢里夫发现了我的错误:
gtk.MessageDialog无法处理您的代码,因为第五个参数
必须是string或None,并且变量名的类型为
nautilus.fileinfo,这意味着您需要调用alert(name.get_name())
不仅仅是alert(name)
有关nautilus.fileinfo的更多信息,请参阅nautilus mailing list
感谢艾哈迈德指出这一点。
在athe docs中,ahmad解释了如何更好地调试:
我想如果你启动了Nautilus你就可以得到这样的调试信息
从终点站[…]
您应该先退出Nautilus(nautilus -q),然后启动它(nautilus --no-desktop)。
如果[Nautilus]在退出后[自动]重新生成,则应编辑
/usr/share/applications/nautilus.desktop如下(它的备份将
好主意):
将“x-gnome-autorestart=true”替换为“x-gnome-autorestart=false”
在这行的开头用“#”注释“X-GNOME-Autostart-Phase=Desktop”实际上我忘记了为什么这么做,但这就是我的配置:)。
添加此行“autostartcondition=gnome/apps/nautilus/preferences/show_desktop”
最后,您应该重新启动会话,然后尝试退出并再次启动。
对于重生解决方案,学分转到second posting[…]。
应用ahmad解释的步骤,我可以看到错误消息我的错误代码生成。

关于python - 使用python在nautilus扩展中使用gtk,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3325772/

10-12 19:50