以下代码
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/