Я хотел бы реализовать перетаскивание в wxPython, который работает аналогично WordPad / Eclipse и т. Д. Я имею в виду следующее:
когда что-то перетаскивается в WordPad, окно WordPad вверху с фокусом и добавляется текст. В редакторе 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). Я думаю, что должен быть какой-то стандартный способ сделать это. Чего мне не хватает?