芋の独り言

当ブログへのアクセスは当ブログのプライバシーポリシーに同意したものとみなします.

クリップボードにペースト

tonari-it.com 上記サイトはpyperclipというツールによってコピペを行おうというもの. 他サイトもpyperclipを使っているサイトが多いかな?

ただ,ここではwxPythonwx)を使ったやり方を示します.

参考

pashango-p.hatenadiary.org wxpython.org 【Python】with構文とは?知らなくてもいいけど知るとお得な書き方! | プログラミングで遊ブログ

スクリプト

wxでコピペするには,まず,app=wx.App()を必ず実行します. wxのメッソドやクラスはどんなものでもapp=wx.App()を実行しとかないとエラーになるものと思われます.

app=wx.App()を実行せずにwx.TheClipboard.Open()を実行すると,

AttributeError: 'NoneType' object has no attribute 'Open'

とエラーが出てしまいます.

そして,wx.TheClipboard.Open()でクリップボートとのやり取りを開始し, コピペ等の操作が終わったらwx.TheClipboard.Close()を実行して終了させます. そのことを踏まえると公式サイトに書いてある例になります.ここではメソッドにしておきます.

def clip(text:str)->str:
    app = wx.App()
    if wx.TheClipboard.Open():
        wx.TheClipboard.SetData(wx.TextDataObject(text))
        wx.TheClipboard.Close()
clip("text")

wx.FileDialogwith構文で実行できたけど,wx.TheClipboardも同じようにできないかなぁと思ったのですが, それはできませんでした...
代わりにクラスを自作することでwith構文を使ったwxによるコピペを疑似的に行うことができます.

class clip(object):
    def __enter__(self):
        app=wx.App()
        wx.TheClipboard.Open()
        
    def __exit__(self, exc_type, exc_val, exc_tb):
        wx.TheClipboard.Close()

with clip() as c:
    wx.TheClipboard.SetData(wx.TextDataObject("text"))