使用Python编写Nautilus扩展程序时如何使用GTK

4
以下是代码:
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()中,消息将正确显示,这样会更好)

1个回答

2
nautilus 邮件列表 上,Ahmad Sherif 发现了我的错误:

gtk.MessageDialog 与您的代码不兼容,因为第五个参数必须是字符串或 None,而变量名的类型是 nautilus.FileInfo,这意味着您需要调用 alert(name.get_name()) 而不仅仅是 alert(name)
请参阅有关 nautilus.FileInfo 的更多信息,请参考文档

感谢 Ahmad 指出这一点。
第二篇文章 中,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"
  • 最后,您应该重新启动会话,然后尝试退出和再次启动。

感谢wrc1944提供的重启解决方案。

应用 Ahmad 解释的步骤,我能够看到我的错误代码生成的错误消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接