解释如何在 GTK+3.0 上拖放

Posted

技术标签:

【中文标题】解释如何在 GTK+3.0 上拖放【英文标题】:Explain how works Drag 'n Drop on GTK+3.0 【发布时间】:2013-06-05 02:56:02 【问题描述】:

大约两个星期以来,我一直在学习 GTK +3.0。我想做一个好的桌面应用程序,但是越来越觉得GTK,比较神秘,我一直是为web开发的,6个多月的android开发,我有一年Windows Presentation Foundation的经验,从来没有发现这么难做任何事情,比如 GTK,它现在试图在应用程序中实现拖动文件,最后我找到了一个示例,虽然它的工作原理并不完全理解对某些代码行的需求。

需要的解释是关于方法Gtk.Window.drag_dest_setWindow.on_drag_motionWindow.on_drag_drop

为什么必须使用Gdk.drag_status? 为什么我必须做widget.drag_get_data(context, context.list_targets()[-1], time)

from gi.repository import Gtk, Gdk

class Window(Gtk.Window):
    '''
    Main Window
    '''
    def __init__(self):
        super(Window, self).__init__(title=TITLE)

        self.connect('delete-event', Gtk.main_quit)

        '''
        set up drag
        '''
        self.connect('drag-motion', self.on_drag_motion)
        self.connect('drag-drop', self.on_drag_drop)
        self.connect('drag-data-received', self.on_drag_data_received)
        self.drag_dest_set(0, [], 0)

        self.show()
        Gtk.main()

    def on_drag_motion(self, widgt, context, c, y, time):
        Gdk.drag_status(context, Gdk.DragAction.COPY, time)
        return True

    def on_drag_drop(self, widget, context, x, y, time):
        widget.drag_get_data(context, context.list_targets()[-1], time)

    def on_drag_data_received(self, widget, drag_context, x, y, data, info, time):
        files = data.get_text().rstrip('\n').split('\n')

        for file in files:
            print(file)

if __name__ == '__main__':
    Window()

【问题讨论】:

好问题,令人惊讶的是该示例如何让您在应用程序中拖动,但不能将文件拖动到上面。如果你想知道Gtk.Window.drag_dest_set 和类似的东西是做什么的,运行Gtk.Window.drag_dest_set.__doc__ 看看它需要什么参数。 【参考方案1】:

也许与上一个版本相比有所改变:http://python-gtk-3-tutorial.readthedocs.org/en/latest/drag_and_drop.html

一开始有一个关于在特定情况下使用某些方法的小说明。

【讨论】:

是的,但在小部件之间

以上是关于解释如何在 GTK+3.0 上拖放的主要内容,如果未能解决你的问题,请参考以下文章

如何在散点图上拖放

如何在 OSX 上拖放期间检测 META 按键

如何在 Objective-C 中的地图上拖放和拖动图钉

如何在listview - WPF MVVM上拖放后更新codeBehind中的ObservableCollection

在触摸屏上拖放

无法在 AEM 新页面上拖放组件