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)

运行良好并生成请求的消息。

有人可以解释这一点 - 或更好地 - 提供解决方法吗?

(更好的是,将警报()调用移动到get_file_items()消息中时会正确显示)

4

1 回答 1

2

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

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

感谢艾哈迈德指出这一点。

第二篇文章中, 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 解释的步骤,我能够看到错误代码生成的错误消息。

于 2010-08-22T19:40:28.243 回答