2012-01-20 16 views
2

私は、他のWindowsアプリケーションにドラッグ&ドロップすることができ、選択したボタンに応じてこの他のアプリケーションが特定の文字列を受け取れるようなボタンを提供する簡単なGUIを作りたいと考えています。シンプルなGUI Windowsドラッグアンドドロップ

このドラッグアンドドロップが可能なPython用の最も簡単なGUIフレームワークは何でしょうか?

+1

あなたはあなたと仕事をしていますが、何を試しましたか? wxPythonは、ドラッグ&ドロップイベントと、回答に記載されているその他のイベントを完全にサポートしています。 –

+0

私はいくつかのTkInterをやっただけです。私はとにかくそれを新たに学ばなければならないと思います。だから私は、ウィジェットをドラッグ可能にして、ドラッグでテキストを提供する方法を示すオンラインの例を見つける機会がある非常に単純なものが必要です。私はドラッグ可能なテキストを提供するボタンのリストが必要です。 – Gerenuk

答えて

1

いずれのUIライブラリでも、これをサポートする可能性があります。 wxPythonでは、List Itemsをさまざまなリストの間で移動することができます。物事は次のようになります。

class JobList(VirtualList): 
    def __init__(self, parent, colref = 'job_columns'): 
    VirtualList.__init__(self, parent, colref) 

    def _bind(self): 
    VirtualList._bind(self) 
    self.Bind(wx.EVT_LIST_BEGIN_DRAG, self._startDrag) 

    def _startDrag(self, evt): 
    # Create a data object to pass around. 
    data = wx.CustomDataObject('JobIdList') 
    data.SetData(str([self.data[idx]['Id'] for idx in self.selected])) 

    # Create the dropSource and begin the drag-and-drop. 
    dropSource = wx.DropSource(self) 
    dropSource.SetData(data) 
    dropSource.DoDragDrop(flags = wx.Drag_DefaultMove) 

を次に、リストへの物事の落下を容易にListDropクラスがあります:

class ListDrop(wx.PyDropTarget): 
    """ 
    Utility class - Required to support List Drag & Drop. 
    Using example code from http://wiki.wxpython.org/ListControls. 
    """ 
    def __init__(self, setFn, dataType, acceptFiles = False): 
    wx.PyDropTarget.__init__(self) 

    self.setFn = setFn 

    # Data type to accept. 
    self.data = wx.CustomDataObject(dataType) 

    self.comp = wx.DataObjectComposite() 
    self.comp.Add(self.data) 

    if acceptFiles: 
     self.data2 = wx.FileDataObject() 
     self.comp.Add(self.data2) 

    self.SetDataObject(self.comp) 

    def OnData(self, x, y, d): 
    if self.GetData(): 
     if self.comp.GetReceivedFormat().GetType() == wx.DF_FILENAME: 
     self.setFn(x, y, self.data2.GetFilenames()) 
     else: 
     self.setFn(x, y, self.data.GetData()) 

    return d 

そして最後に、物事がドロップすることができるリスト:

は、
class QueueList(VirtualList): 
    def __init__(self, parent, colref = 'queue_columns'): 
    VirtualList.__init__(self, parent, colref) 

    self.SetDropTarget(ListDrop(self.onJobDrop, 'JobIdList', True)) 

    def onJobDrop(self, x, y, data): 
    idx, flags = self.HitTest((x, y)) #@UnusedVariable 

    if idx == -1: # Not dropped on a list item in the target list. 
     return 

    # Code here to handle incoming data. 
+0

有望なのでしょうか?イントラwxPythonですか、それとも他のWindows Appsなぜなら私が本当に必要とするのは、Windowsアプリケーション上にドロップインするときに文字列を挿入するドラッグ可能なラベルだからです。だから私は落とされる心配はありません。複雑なオブジェクトは必要ありません... – Gerenuk

+0

@ Gerenuk - CustomDataObjectはもっと良い選択でしたが、 'wx.TextDataObject'や' wx.PyTextDataObject'も使用できます。詳細はこちらhttp://wiki.wxpython.org/ListControls#Drag_and_Drop_with_lists –

1
+0

私は:)を参照してくださいしかし、私は見つけることができませんし、ドラッグ(ドロップではない)と定義されたテキストを提供する。私は参照を見つけるのを助けることができますか?私はこのフレームワークを知りません:(....編集:ああ、次のページに:)それが助けてくれることを願って... – Gerenuk

+1

うわー、PyQtは複雑に思えます:(私はドラッグを行う簡単な方法が表示されません: ( – Gerenuk

+0

それは入手するのと同じくらい簡単です –

1

理論的には、グラフィカルなドラッグ・アンド・ドロップのデザイナーが存在する任意のライブラリを使用することができます。このようなツールは、ライブラリが解析するマークアップ言語を生成することが多く、時にはコードを直接生成することもあります。後者は言語に依存しますが、前者はそうしてはいけません。いずれにせよ、あなたはPythonでそれを行う方法を見つけるでしょう。

実際には、一部のライブラリでは他のライブラリよりも優れたビジュアル設計ツールを使用しています。 WinFormsのデザイナーは、私が使った時、とてもエレガントでシームレスだったので、おそらくIronPythonですか? PyGTK、Glade、または前述のPyQtはどうですか?たぶんNetBeansで設計されたSwingを使っているJython?

EDIT:おっと、私は質問を正しく読まなかった。あなたが探しているのはドラッグ・アンド・ドロップ機能を備えたフレームワーク、つまりそのほとんどです。しかし、考慮すべき点はたくさんあります。例えば、宛先ウィンドウとソースウィンドウは同じプロセスから来るでしょうか?彼らは同じ枠組みで書かれますか?これらの事柄は、それがどのように書かれているかに応じて、関連しているかどうかは関係ありません。

+0

基本的には、任意のWindowsアプリケーションにテキスト文字列をドロップしたいのですが、ほとんどはそれをサポートしています... – Gerenuk

関連する問題