Je voudrais mettre en œuvre glisser & baisse de wxPython qui fonctionne de manière similaire dans WordPad/Eclipse etc je veux dire les éléments suivants:wxpython drag & drop problème de mise au point
quand quelque chose est tombé à WordPad, fenêtre WordPad est en haut avec la mise au point et le texte est ajouté. Dans le texte de l'éditeur Eclipse est collé, la fenêtre Eclipse gagne le focus et est en haut.
Lorsque j'implante glisser & drop utilisant la fenêtre cible wxPython n'est pas amené à l'avant. J'ai mis en drag & baisse de manière similaire à (drag):
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()
programme Second (drop):
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()
Lorsque vous exécutez les deux programmes, les fenêtres de place dans le centre de l'écran (une partie de la fenêtre de dépôt est visible), puis faites glisser un noeud depuis la fenêtre de déplacement pour faire tomber la fenêtre - la fenêtre cible affiche la boîte de message qui n'est pas visible, la fenêtre cible est cachée derrière la fenêtre source.
Comment implémenter glisser & drop qui se concentrera sur la deuxième fenêtre (cible)? J'ai essayé d'ajouter window.Show(), window.SetFocus(), même en utilisant certaines fonctions de WinAPI (via win32gui). Je pense qu'il devrait y avoir une façon standard de le faire. Qu'est-ce que je rate?
Ce n'est pas exactement ce que je voulais - cette solution soulève la fenêtre OnDragOver, alors que je voudrais le faire dans OnDropText - quand le texte est supprimé (comme dans WordPad) . Malheureusement, déplacer ceci vers OnDropText ne fonctionne pas :(. – uhz
Ok, faire cela avec OnData fonctionne comme je le voulais :). Merci pour le conseil :) – uhz