2010-01-01から1年間の記事一覧

str.format用の文字列から、正規表現を作る。

#encoding:shift-jis u""" str.format用の文字列から、format後の文字列にマッチする正規表現を作ります。 仕様:末尾まで完全に一致させます。 format後の文字列の末尾に余計な物がついていると、マッチしません。 仕様:str.formatのパラメータには数値の…

from ... import * で困ること

#egg.py from spam import Spam class Egg:pass #spam.py from egg import Egg class Spam:pass > python spam.py Traceback (most recent call last): ImportError: cannot import name Egg 解決法その1:import ... を使って、spam.Spamでアクセスする解…

try 〜 except 〜 except

いまさらながら、Pythonでexceptを複数書けるのに気がつきました。 自分で書くことも、他人のコードに複数のexceptが書いてあるのを見る機会も無かったもので。 try: #例外を投げる何か int("***") {}[0] except KeyError as e: print(repr(e)) except Value…

PIL.Image と PyQt4.QtGui.QImageの相互変換

下手なことをするより、素直に一度バッファに書き込むのが一番安全。 なお、***.save(fp, "BMP")と、"BMP"で読み書きしていますが、 アルファブレンドがある画像の場合は"PNG"で読み書きする必要があります。 ただ、"BMP"の方が速いです。 def pilimage_to_q…

IrfanViewで、画像ファイルのフォルダを選択した状態でエクスプローラを開く

どういうわけか"/"が入るとIrfanViewで起動できない?ようなので、 実行ファイルを作りました。ただ、それだけ。 //explorer-select-dir.cpp #include <string> #include <windows.h> #include <tchar.h> #include <cstdlib> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, L</cstdlib></tchar.h></windows.h></string>…

listを継承するとき

append extend など「全ての破壊的メソッドをラップ」するとき、 __iadd__を忘れずに

ウィジェットを偽造する

QStyleと、QStyleOptionのサブクラスを使うと、ウィジェットの表示を再現できます。 QStyleはQApplication.style()で取得。 QStyleOptionは、ウィジェット型ごとにサブクラスが違います。大量のウィジェットを実際に作ってしまうと遅くなるとき、などに使え…

PyQtでは循環参照に注意

Traceback (most recent call last): File "D:\Owner\temp\q.py", line 14, in callback self.setText(v) RuntimeError: underlying C/C++ object has been deleted PyQtを使った方なら、一度はこのRuntimeErrorに遭遇した事があると思います。 ウィジェット…

1266075553**** object has no attribute ***

def __getattr__(self, name): if spam(name): return egg raise AttributeError("'{0.__class__.__name__} object has no attribute '{1}''" .format(self, name)) といったコードは、委譲!委譲!委譲!を実践すると良く書きますが、 毎回、"'{0.__class__…

正方形のPushButton

文字の左右の空白が邪魔だったので、sizeHintを変更。 ただし、当然はみ出た文字は見えなくなる。 from PyQt4.QtCore import * from PyQt4.QtGui import * class SquareButton(QPushButton): def __init__(self, *a, **kw): QPushButton.__init__(self, *a, …

Singletonパターンの罠

Singletonでハマりました。 Singletonを書いたモジュールを、メインスクリプトとして実行したことが問題です。 #encoding:shift-jis """ singleton.py Singltonを定義したモジュール > python singleton.py とすると、ハマる """ from __future__ import div…

pyqtSignalで幸せになれる

QtはSignalでプログラミングすると言っても過言ではありません。 QObject.connect(self, SIGNAL("valueChanged(int)"), self.scrollBar.setValue) self.emit("valueChanged(int)", 10) が、一々、"QObject"と"SIGNAL"を書くのが面倒な上、Signal名を間違えて…

python3.1にeasy_installをインストール

まず、公式の3.1版は無いので、 ここ から、ダウンロード。 そして、解凍して出来たフォルダの中でpython setup.py buildpython setup.py install ・・・しかし、windowsでは途中で処理が止まってしまう。どうやらバイナリファイルをテキストモードで読もう…

Python3xでは暗黙の相対importは削除

今更ながら、暗黙の相対importについて気づきました。 例。このような構成のモジュールを考えます。 spam/ __init__.py egg.py ham.py eggからhamをimportしようととします。 #egg.py import ham カレントディレクトリがspamで無い限り、Python3xではエラー…

RSSとAtom生成

Webページをリニューアルしたついでに、Atomを配信することにしました。 今までRSSは配信していて"PyRSS2Gen"を使っていましたが、 Atomは生成できないようなので、PyPIを探してみました。 「atom」で検索しても大量に出てきてわけがわからないので、「gen a…

PythonでPythonを出力する

Pythonにはクラスや関数を動的に生成したり変更したりする機能があるので、 明示的にソースコードを生成してexecする必要は必ずしも無いです。 しかし、execの方がデバッグしやすい or 効率が良い場合もあります。 namedtupleやturtleはexecを使って実装され…

フォルダアイコンの設定と削除

メモメモ from win32api import * from win32con import * def set_folder_icon(dirpath, iconpath, iconindex=0): desktopini_path = os.path.join(dirpath, "desktop.ini") WriteProfileVal(".ShellClassInfo", "IconFile", iconpath, desktopini_path) Wr…

object.__getattr__

>>> class Spam(object): def __getattr__(self, name): return super(Spam, self).__getattr__(name) >>> Spam().egg Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> Spam().egg File "<pyshell#4>", line 3, in __getattr__ return super(Spam, self).__ge</pyshell#4></module></pyshell#5>…

6人ミーティング

先日の迷路と同じサイトが、今度は筆記試験の問題を出していました。 6人でミーティングをする。 6人でミーティングをする。どの2人を取っても、初対面か会ったことがあるかのいずれかである。このとき、「互いに初対面の3人組」か「互いに会ったことの…

2.6から、**に任意のmappingを使える!

今更ながら関数呼び出しの**にユーザー定義型を使えるようになっていたのに気づきました。 >>> from collections import * >>> class X(Mapping): ... def __getitem__(self, k): return 0 ... def __iter__(self): return iter("xyz") ... def __len__(self…

迷路問題

人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか を解いてみました。 迷路の最短経路を捜す問題です。 ************************** *S* * * * * * * ************* * * * * ************ * * * * ************** *********** * * ** *********…

10分でコーディングをPythonで

10分でコーディング|プログラミングに自信があるやつこい!! Pythonで書いてみました。 「すべてのプレイヤーは同じ枚数のカードを受け取らなければいけない」以外の部分はほとんど考える必要がありませんでした。むしろ、docstrings を書くほうに時間が…

PyQt4で色を選択するウィジェット

ダイアログを表示するのもいいですが、常に表示していてちょっとそこから選ぶ方が便利なので、 そういうのを作ってみました。 自作のユーティリティ(myutil、qutil)を使っているところもありますが、 書き直すのが面倒なので。 #encoding:shift-jis from __f…

正規表現を使ってコマンド行のような文字列を解析してリストに格納する

コマンド行のような文字列を解析してリストに格納する上でのメモ(後半) - 試験運用中なLinux備忘録 を正規表現を使って書いてみました。 re.splitだと、後でシングルクオートを追加したりするのが難しそうなので、 re.finditerでも書いてみました。 #encodin…

PyQtでファイルのドラッグ&ドロップ

スクリプトのアイコンにファイルを大量にドラッグ&ドロップしようとすると、 エラーが出るので、ウィンドウを作ってそこにD&D;させるスクリプトを書いてみました。 #encoding:shift-jis from __future__ import division, with_statement, print_function i…

キュートなタイマー

PyQtの練習でタイマーを作りました。日本語資料が少ないので大変。 それに、コンソール上Ctrl+Cで死んでくれない、 インタラクティブシェルでQApplicationを作ると入力が重くなって、 実質的にインタラクティブシェルでの実験は無理・・・ wxPythonより高度…

辞書をイテレートしながら変更すると危ない

#encoding:shift-jis from __future__ import division, with_statement, print_function # キーを 5 ずつずらそうとする d = dict.fromkeys([1, 3, 5]) for k in d: d[k + 5] = d.pop(k) print(d) # => {16: None, 18: None, 20: None} # !?!?!?!? printし…

かきぞめ

あけましておめでとうございます 寅年とは全く関係なく、金魚鉢のようなものを初めてのjavascriptで書いてみました。 Bloggerではjavascriptを投稿できないっぽいので、 ここに置いておきます。 本当は今日書いたのじゃないことなんて気にするのは私だけでし…