wxPythonでドラッグ&ドロップ+クリップボード

[pukiwiki]
livedoorリーダーなどに巡回先を登録中
あわせて、blog更新を少し楽に~~~ってことで、wxPythonを使ってblog更新用のミニツールを書いてみました
(余計に時間食ってるって気も)

以下コード
[/pukiwiki]

[pukiwiki]
*参考ページ
-[[wxPython Index(日本語チュートリアル):http://www.harukaze.net/%7Eharuka/wxpython/index.html]]
ほとんど、こちらのページのコードのコピペです。。。
-[[wxpita – Google Code:http://code.google.com/p/wxpita/]]
デコレータを使って、wxPythonプログラミングをラクラクにするライブラリ、らしい。
こちらは、今回は使ってないですが、今度ためしてみたい。
*つかいかた
-Webページ中のリンク部分を単独でドラッグ&ドロップするとリンクとして記憶
-選択した文章をD&Dすると、文章のみを記憶(リンクやスタイルは反映されず)
-ボタンを押すと、記憶した内容をまとめてクリップボードにコピー
-Python&wxPythonが必要
-Idleから起動すると固まります。
-拡張子をpywで保存すると、黒い窓無しで起動できます
-wxPythonだから、Windows以外でも動く、はず。。。
[/pukiwiki]

# -*- coding: utf-8 -*-
import wx

class MyTextDropTarget(wx.TextDropTarget):
    def __init__(self, WinObj):
        wx.TextDropTarget.__init__(self)
        self.WinObj = WinObj
    def OnDropText(self, x, y, text):
        self.WinObj.AppendText("¥n")
        if text.lower().startswith("http") :
            t=text.splitlines()
            t.append("¥n")
            self.WinObj.AppendText('<a href="%s">%s</a>¥n%s¥n'%(t[0],t[1],"¥n".join(t[2:])))
            #うちはPukiWiki書式つかってるのでこっちを使用
            #self.WinObj.AppendText("*[[%s:%s]]¥n%s¥n" %(t[1],t[0],"¥n".join(t[2:])))
        else :
            self.WinObj.AppendText(text)
            
class MyApp(wx.PySimpleApp):
    def OnInit(self):
        Frm = wx.Frame(None, -1, "wxPython", size=(450, 150),pos=(850,700))
        #うちの環境にあわせて座標を決め打ちしてあります。適当に直してください
        #デスクトップサイズの取得などは勉強中。。。
        self.Btn = wx.Button(Frm, -1, u"クリップボードにコピー")
        self.Btn.Bind(wx.EVT_BUTTON, self.OnButton)
        self.TxtCtrTo = wx.TextCtrl(Frm, -1, u"", pos=(10,30),¥
                size=(430,70),¥
                style=wx.TE_MULTILINE|wx.HSCROLL|wx.TE_PROCESS_ENTER)
        Frm.SetDropTarget(MyTextDropTarget(self.TxtCtrTo))
        #Frm.SetTransparent(200)
        Frm.Show()
        return 1

    def OnButton(self,event):
        t=self.TxtCtrTo.GetValue()
        wx.TheClipboard.SetData(wx.TextDataObject(t))
	#クリップボードへ
        #生の文字列ではなく、wx.TextDataObjectへ変換する必要がある
        
app = MyApp()
app.MainLoop()

コメントを残す

メールアドレスが公開されることはありません。