tonari-it.com
上記サイトはpyperclip
というツールによってコピペを行おうというもの.
他サイトもpyperclip
を使っているサイトが多いかな?
ただ,ここではwxPython
(wx
)を使ったやり方を示します.
参考
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.FileDialog
はwith
構文で実行できたけど,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"))