mercoledì 30 gennaio 2013

Drag & drop

In questi giorni Bit3Lux è in giro e allora dovete accontentarvi del mio contributo. L'argomento di oggi è il drag and drop, cioè trascinare (drag) un oggetto in una certa posizione e lasciarlo cadere (drop). Operazione che facciamo sovente quando dobbiamo spostare file da una cartella a un'altra.
Vediamo un esempio piccolissimo, di nessuna utilità se non per impratichirci sull'argomento.


#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx, os.path

class FileDrop(wx.FileDropTarget):
    def __init__(self, window):
        wx.FileDropTarget.__init__(self)
        self.window = window

    def OnDropFiles(self, x, y, filenames):

        for name in filenames:
            try:
                self.window.WriteText(name + ':\n')
                file = open(name, 'r')
                text = file.read()
                self.window.WriteText(text.strip())
                file.close()
                self.window.WriteText('\n\n*** ' + 
                               os.path.basename(name) + '\n\n')
            except IOError, error:
                dlg = wx.MessageDialog(None, 'Error opening file\n' + 
                                                             str(error))
                dlg.ShowModal()
            except UnicodeDecodeError, error:
                dlg = wx.MessageDialog(None, 
                            'Cannot open non ascii files\n' + str(error))
                dlg.ShowModal()

class DropFile(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size = (450, 400))

        self.text = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE)
        dt = FileDrop(self.text)
        self.text.SetDropTarget(dt)
        self.Centre()
        self.Show(True)

app = wx.App()
DropFile(None, -1, 'filedrop.py')
app.MainLoop()

Come vedete è semplicissimo, dai ormai dovreste sapere tutto quanto!

 Indice di "Mission Python" qui.

Alla prossima.

Nessun commento:

Posta un commento