我想實現的阻力在wxPython中&下降,在同樣的方式工作,在寫字板/ Eclipse中等等。我指的是以下幾點:wxPython的拖放焦點問題
當事情被下降到寫字板,寫字板窗口添加焦點和文字的頂部。在Eclipse編輯器中粘貼文本,Eclipse窗口獲得焦點並處於頂部。
當我執行拖動&使用wxPython的目標窗口不會出現在前面。我實現拖動類似的方式&降(拖):
import wx
class DragFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
self.tree = wx.TreeCtrl(self, wx.ID_ANY)
root = self.tree.AddRoot("root item")
self.tree.AppendItem(root, "child 1")
self.tree.Bind(wx.EVT_TREE_BEGIN_DRAG, self.__onBeginDrag)
def __onBeginDrag(self, event):
tdo = wx.PyTextDataObject(self.tree.GetItemText(event.GetItem()))
dropSource = wx.DropSource(self.tree)
dropSource.SetData(tdo)
dropSource.DoDragDrop(True)
app = wx.PySimpleApp()
frame = DragFrame()
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()
第二套方案(下降):
import wx
class TextDropTarget(wx.TextDropTarget):
def __init__(self, obj):
wx.TextDropTarget.__init__(self)
self.obj = obj
def OnDropText(self, x, y, data):
self.obj.WriteText(data + '\n\n')
wx.MessageBox("Error", "Error", style = wx.ICON_ERROR)
class DropFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
text = wx.TextCtrl(self, wx.ID_ANY)
text.SetDropTarget(TextDropTarget(text))
app = wx.PySimpleApp()
frame = DropFrame()
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()
在運行兩個程序,在屏幕的中心位置的窗口(拖放窗口的一部分可見),然後將節點從拖動窗口拖放到拖放窗口 - 目標窗口顯示不可見的消息框,目標窗口隱藏在源窗口後面。
如何實現拖動&下降,將重點放在第二個(目標)窗口?我試着添加window.Show(),window.SetFocus(),甚至使用WinAPI的某些函數(通過win32gui)。我認爲應該有一些標準的做法。我錯過了什麼?
這不完全是我想要的 - 這個解決方案提出了窗口OnDragOver,而我想在OnDropText中做到這一點 - 當文本被丟棄(如寫字板) 。不幸的是移動到OnDropText不起作用:(。 – uhz 2009-09-23 08:12:23
好吧,這樣做與OnData的工作,因爲我想:)。謝謝你的提示 :) – uhz 2009-09-23 08:15:49