pygtk 拖放问题:文件到 GtkFileChooserButton

1 投票
1 回答
504 浏览
提问于 2025-04-17 11:18

我的应用程序里有一个GtkFileChooserButton,用户可以用它打开一个选择窗口,挑选一个文件,然后对这个文件进行操作。这一切都正常。

我还给这个按钮添加了拖放功能。虽然它能工作,但有点小问题。

简单来说,第一次拖放文件到FileChooserButton上时,会触发一个信号,表面上看起来是成功的,——文件名从“( None )”变成了文件的名字,如果你再点击这个按钮,就会弹出一个选择窗口,显示你选中的文件;但是,正如下面的调试输出所示,get_filename()却没有返回文件名! 至少第一次是这样。

第二次把文件拖放到按钮上(无论是不同的文件还是同一个文件),一切都正常,get_filename()能返回文件名。为什么会这样呢?

这是我在按钮上依次拖放三个文件时的调试输出:

[on_file-set] FileChooserButton.get_filename() output:
None

[on_file-set] FileChooserButton.get_filename() output:
'/home/ryran/Desktop/priv.txt'

[on_file-set] FileChooserButton.get_filename() output:
'/home/ryran/Desktop/kinamppost'

顺便说一下,当我这样做时,第一次和第二次拖放的其实是同一个文件。

如果你想看看这个应用程序的完整运行,可以去http://github.com/ryran/pyrite,我很想分享代码,但其实没什么好分享的!!我没有使用drag_dest_set(),因为FileChooserButton本身就支持拖放。所以我做的只是为FileChooserButton的文件设置信号定义了一个回调函数。嗯……这是那个:

def action_chooserbtn_file_set(self, widget):
    print "[on_file-set] FileChooserButton.get_filename() output:\n{!r}\n".format(widget.get_filename())

为了记录,我也尝试过和定义drag_dest_set一起做这些,但结果还是一样。

1 个回答

2

结果发现这确实是GTK+的一个错误。我在IRC上和一位开发者聊了聊。他帮我意识到这一点,然后鼓励我去提交一个错误报告,我也照做了 -- https://bugzilla.gnome.org/show_bug.cgi?id=669718

撰写回答