Python tkinter でクリップボードのデータを扱う

先日 VBScript で作ったツールとほぼ同じものを Python でも作ってみました。

というか、もともとは Python で書いたちょっとしたスクリプトがあってそれをもう少し発展させたものが欲しいというのが出発点でした。 最初は Python で実現できないかなとやっていたのですが、自分だけでなく社内で共用する可能性を考えると Windows マシンなら標準で動く VBScript の方が適していると思ってそちらに舵を切ったのです。

で、Python でも調べていて、クリップボードのデータを扱うのには tkinter を使うのが手軽そうでした。

import tkinter

root = tkinter.Tk()

# ウィンドウの表示を抑制
root.withdraw()

# クリップボードから読み込み
cb = root.clipboard_get()

こんな感じで OK でした。クリップボードにデータをセットするのも root.clipboard_append() でできるらしいのですが、私の環境ではうまくいきませんでした。

more ...

VBScript でクリップボードのデータを扱う

先日やっていた仕事で使うスクリプトでクリップボードのデータを読み込んだり、クリップボードにデータをセットしたりという処理を書きました。あ、今回扱ったのはテキストデータのみです。

クリップボードのテキストを取得する

' クリップボードのテキストを取得する
Function GetClipboardText()
    Dim objHTML
    Set objHTML = CreateObject("htmlfile")
    GetClipboardText = Trim(objHTML.ParentWindow.ClipboardData.GetData("text"))
End Function

いくつかアプローチの種類がありそうでしたが、htmlfile オブジェクトを作って ParentWindow.ClipboardData.GetData("text") というメソッドを使えば OK です。

この辺を見るとよさそうでした。

調べているときに見つけた別アプローチです。

クリップボードにテキストをコピーする

' 引数 str をクリップボードにコピーする
Sub ...
more ...

Mac でアクティブなウィンドウ以外を隠す

下記ショートカットキーで非アクティブなアプリケーションのウィンドウをすべて隠すことができます。ひとつの作業に集中して取り組みたいときなどに便利です。

option + shift + H

個人的には Emacs で何かを書いているときに使用することが多いですね。ブラウザや Twitter クライアントなどが表示されているとどうしてもそちらにも注意が向くので意識が散漫になってしまいます。

シングルタスクで進めたいときには効果てきめんだと思いますのでこれからも積極的に利用していきたいところです。

more ...

Python でユーザーからの入力を受け取る

ちょっとした作業用のスクリプトなどで実行するたびにキーボードからの入力を受け取って処理に使いたい場合があります。 Python 3.x では input() という関数で簡単に実現できます。ちなみに Python 2.x では raw_input() でした。括弧の中に表示したいプロンプトを書いて、左辺に変数を置いて代入すれば OK です。

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

import os

def main():
    input_data = input("type your name: ")
    result = 'Your name is ' + input_data
    print(result)


if __name__ == '__main__':
    main()

都度処理内容を変更したい場合など、ちょっとした対話形式のインターフェイスも作れそうですね。

more ...

Excel VBA で画面の描画を抑制する

Excel でちょっとしたマクロを書いて操作を自動化することがあります。VBA は他のプログラミング言語と比べると実行速度があまり速くないらしいということは何となく聞いたことがありましたので、多少待たされることがあってもまぁこんなものかと思っていたのですが処理中の画面の描画を抑制することでスピードアップが望めることを知りました。

' 画面描画を抑制
Application.ScreenUpdating = False

' 何か処理を書く

' 画面描画を再開
Application.ScreenUpdating = True

Application.ScreenUpdating = False とするとそれ以降は VBA での処理は進んでいても画面は更新されません。必要な処理が終わった後で True に戻しておけば OK です。

処理内容によって様々かとは思いますが私の場合は体感で半分くらいの時間で完了するようになり、だいぶ快適になりました。これからも、重めの処理をする場合は忘れずに設定しようと思います。

more ...

Python Tkinter を使ってみる

Python で GUI プログラムを作る Tkinter を触ってみます。 標準モジュールだと聞いたので import Tkinter としたところエラーになりました。少しググると Python 3.x からは tkinter と小文字になっていると読んだので import tkinter としてみるとやはりエラー。

>>> import tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/ython3.3/tkinter/__init__.py", line ...
more ...

Git 管理したくないファイルを指定する

Git で管理したくないファイルを指定する方法について調べました。 Emacs のバックアップファイルだったり Mac の .DS_Store などアプリケーションやシステムの方で自動的に作成されるファイルがあります。Git のリポジトリ内でこれらのファイルができて git status のたびに表示されたりするとだいぶ邪魔な感じになるので、.gitignore 等のファイルで設定してみます。

調べるとリポジトリ内の .gitignore に書いたり、.git/info/exclude に書いたりと何種類か方法があって優先順位なども変わってくるようです。以下のエントリに詳しく載っていました。

ひとまず今のところは ~/.gitconfig の中に excludesfile という項目を書いておきます。

[core]
        excludesfile = ~/.gitignore

そこで指定した ~/.gitignore に無視したいファイルのパターンを書きます。

.DS_Store
~*
more ...

Python で素数を数え上げる

Project Euler で素数(prime number)を求める必要があったので考えて何とかやってみました。 ググってしまえばすぐに先人の素敵なプログラムを参照できるところですがそれだと自分の勉強にならないので何も見ずに考えたところ、以下のようになりました。

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

import sys

argvs = sys.argv
arg = int(argvs[1])

def old_primes(arg):
    counter = 0
    primes = [2]
    def is_prime(arg):
        nonlocal counter
        counter += 1
        if arg % 2 == 0:
            return False
        else:
            for i in range(3, arg ...
more ...