PyQt4 win32 環境設定
Windows XP
Python 2.5 (win32)
に
PyQt-Py2.5-gpl-4.4.3-1.exe (Riverbank)
をインストール(ダブルクリックするだけ)する、だけ。で、デモが動くので、うまく行ったのだと思います。
コンパイル済みの SIP も Qt(Trolltech) runtime も入ってるので、文字通り、Python 本体以外は、本当に全部込みのパッケージでした。コンパイルなどの作業はありません。
Example フォルダ tutrial の E1 から E12 は Trolltech の Qt 大砲ゲームの C++ を Win32 Python で書き直してあるので、最後の行をコメントアウトすると Idle でも、そのまま実行できます。
最後の行がなんかエラー起こす理由が分からないのは、ただただ、私の勉強不足ですね。
ドキュメントは Unix/Linux 用のまま、なので、そのまま打ち込んでも動かない例もあります。
sys OS とか、その辺のちがいは、このE1-E12 よく見るとなんとなく分かるような、分からないないような。
さて、PyQt4 に決めたのは、とりあえず手数を少なく「Init、Start、Abort」程度のボタンを持つ 小さい GUI を今作るには、一番近道だったので、そうしたのです。
たかがそれだけのために、改めて .NET framework を機嫌よく動いてる XP にインストールする気にもなれず WxPython は外しました。
でも将来本気で GUI カリカリ攻めたい人には wxPython の方がいいかもしれません。(いや、それ以前に Python より Ruby にすべきかもしれません)
Qt がライセンスで、もめてる間に市民権を得た wx の方が文献やネット上の資料も多いし。
それだけではなく Enthought Python も現状 wxPython です。勢いが違います。
まぁ、Qt wx 両方入れることも出来るでしょうから(想像)時間があるうちに、ちまちま試すつもりです。
充分楽しんだら、Enthought Python を買うと思います。
今はなんとか、個人で把握できてますが、近い将来バージョンあわせのパニックになるのは目に見えていますので。
追記: Qt やめて Wx にします。 .Net は Agilent の I/O 何とかをインストールした時点で自分の PC に入っているようでした。ごめんなさい。
2008年9月26日金曜日
2008年9月25日木曜日
PyQt4 参考文献
- Rapid GUI Programming with Python and Qt
GUI を何らかの方法で、ということで、いろいろ考えましたが Qt にしました。PyQt4 で行きます。
追記:やめて WxPython にします。
Free ebooks からダウンロードしました。広告多いです。
Windows, Python, Qt の環境設定の方法などが、事前に読めて助かりました。
すぐ切れるかも知れませんが、直リンク。きれたら消します。
http://knowfree.net/2008/02/29/rapid-gui-programming-with-python-and-qt.kf
SRA さんの Qt Whitepaper の日本語訳も助かります。
- Qt 4.3 Whitepaper/日本語 PDF
気をつけないといけないのは、 多くのドキュメント、Help が
Qt はC++ を前提にしている。
QtPy も Linux を前提にしている。
その中から、Windows Python で Qt の情報をさがすのに手間がかかります。
自分が変なことをしようとしている、という認識を持って慎重に行きましょう。
2008年9月23日火曜日
Python から ctypes で .dll を使う
ctypes で .dll を使う
Python でプリンターポートを制御する方法、その2
io.dll という、プリンターポートを制御するダイナミックリンクライブラリ、を Python から利用して LPT ポートの各信号を制御します。
もちろん Windows XP です。
Python2.5 の標準 ctypes モジュールを使います。
2.4 以前の Python から使うには win32all を別途インストールして ctypes モジュールを用意します。
io.dll を Geekhideout からダウンロードして \windows\system32 のフォルダにコピーします。
動作確認、とアドレスの確認のために 同じく Geekhideout から parmon.exe をダウンロードして実行します。parmon.exe と以下の Python コードは同時に実行できます。シリアルポートと違って緩いようです。
事前に parmon.exe を実行して、parmon からパラレルポートのアドレスをもらいます、自分の目で読みます。parmon.exe に表示されている 16進数のプリンターポートのアドレスをそのまま利用して動作確認をします。
サンプルのコードは
-------
from ctypes import *
port = 0x378 # in Hex, 0x3BC
data = 0x00 # in Hex, 0xAA 0x55 0xFF
windll.io.PortOut(port,data)
print 'data = ',data
raw_input()
-------
data を適当に AA とか 55 とかにも変えて、parmon.exe で状態が変わるのを見て下さい。
io.dll の使い方(下のほう)に、 C から呼び出すサンプルとか VB から使うサンプルがあります。
PortOut 以外にも PortIn とか色々あって便利です。
真面目に使うには、データタイプをあわせる (argなんとか) とか、あるらしいのですが ctypes は上手にこなしてくれるので任せます。これは Windows だけの特権だそうです。うれしいかぎりです。
データの読み込みを行うと、下位 8bit の上にどこから来たの分からないデータがありますので、ビット演算でマスクすると使いやすいデータになります。こんな方法で本当にいいのか、は分かりません。。。
この方法で、Km2Net さんの USB-IO を バケさんの vbausbio.dll を利用して制御すること、等も出来そうです。買って確かめたら、報告します。
Python でプリンターポートを制御する方法、その2
io.dll という、プリンターポートを制御するダイナミックリンクライブラリ、を Python から利用して LPT ポートの各信号を制御します。
もちろん Windows XP です。
Python2.5 の標準 ctypes モジュールを使います。
2.4 以前の Python から使うには win32all を別途インストールして ctypes モジュールを用意します。
io.dll を Geekhideout からダウンロードして \windows\system32 のフォルダにコピーします。
動作確認、とアドレスの確認のために 同じく Geekhideout から parmon.exe をダウンロードして実行します。parmon.exe と以下の Python コードは同時に実行できます。シリアルポートと違って緩いようです。
事前に parmon.exe を実行して、parmon からパラレルポートのアドレスをもらいます、自分の目で読みます。parmon.exe に表示されている 16進数のプリンターポートのアドレスをそのまま利用して動作確認をします。
サンプルのコードは
- ctypes モジュールをインポート
- port にプリンターポートのアドレスを 16進数で設定(0x:ゼロエックス) 378 は parmon で表示された私のPCのプリンターポートのアドレスです。
- data にデータを 16進数で設定(0x) 00 (ゼロゼロ) で D0-D7 を全て Low レベルに
- ctypes の windll で IO.dll の PortOut を使い 2. のport(ポート) に 3.のdata(データ)を出力します。
- 書き込んだ値を表示(10進)
- キー待ち、で一時停止
-------
from ctypes import *
port = 0x378 # in Hex, 0x3BC
data = 0x00 # in Hex, 0xAA 0x55 0xFF
windll.io.PortOut(port,data)
print 'data = ',data
raw_input()
-------
data を適当に AA とか 55 とかにも変えて、parmon.exe で状態が変わるのを見て下さい。
io.dll の使い方(下のほう)に、 C から呼び出すサンプルとか VB から使うサンプルがあります。
PortOut 以外にも PortIn とか色々あって便利です。
真面目に使うには、データタイプをあわせる (argなんとか) とか、あるらしいのですが ctypes は上手にこなしてくれるので任せます。これは Windows だけの特権だそうです。うれしいかぎりです。
データの読み込みを行うと、下位 8bit の上にどこから来たの分からないデータがありますので、ビット演算でマスクすると使いやすいデータになります。こんな方法で本当にいいのか、は分かりません。。。
この方法で、Km2Net さんの USB-IO を バケさんの vbausbio.dll を利用して制御すること、等も出来そうです。買って確かめたら、報告します。
2008年5月5日月曜日
言い訳とお願い
ちょっと言い訳がましいことを
GPIB と これからの ctypes 使った IO.dll の内容はちょっとミスがあるかもしれません。タイプミスがあるかもしれません。というのも、自宅には GPIBな環境もないし、自宅PCはノートなのでプリンタポートが無いからです。
私は、企業に勤める身なので、会社で開発したソースを外に持ち出せません。それをすると、会社で給料をもらっている作業時間を外部に持ち出す、詐取行為になるからです。
そのため、ここで公開しているコードは、基本的に全て自宅で記憶を元に一からコーディングしているのですが、確認(ベリフィケイション)できているかというと、物理的に出来ないからです。自宅PC にはプリンタポートもGPIB環境も無いからです。
そこでお願いなのですが、もし確認できる環境にある人がいれば、タイプミスや不具合を報告して欲しいのです。会社から自分の(この)ブログにアクセスして確認することも出来るのですが、僕はまだ現職を失いたくないのでそれはしていません。勝手なお願いですが協力していただけると非常にありがたいです。
HandyMan
GPIB と これからの ctypes 使った IO.dll の内容はちょっとミスがあるかもしれません。タイプミスがあるかもしれません。というのも、自宅には GPIBな環境もないし、自宅PCはノートなのでプリンタポートが無いからです。
私は、企業に勤める身なので、会社で開発したソースを外に持ち出せません。それをすると、会社で給料をもらっている作業時間を外部に持ち出す、詐取行為になるからです。
そのため、ここで公開しているコードは、基本的に全て自宅で記憶を元に一からコーディングしているのですが、確認(ベリフィケイション)できているかというと、物理的に出来ないからです。自宅PC にはプリンタポートもGPIB環境も無いからです。
そこでお願いなのですが、もし確認できる環境にある人がいれば、タイプミスや不具合を報告して欲しいのです。会社から自分の(この)ブログにアクセスして確認することも出来るのですが、僕はまだ現職を失いたくないのでそれはしていません。勝手なお願いですが協力していただけると非常にありがたいです。
HandyMan
2008年5月4日日曜日
Python 効果的勉強方法
たまたま自分の都合で、Python を目的にしていますが、勉強するにあたり、資料が少なく、つまることも多いと思います。もちろんPython のマニュアルを読むこと、は、はじめにすることです、が。それでもつまった時、息抜きに他のオブジェクト指向言語やスクリプト言語の解説やチュートリアルを読むと、開けることがあります。
Ruby のチュートリアル とか Matlab の GettingStarted あたりを、ふと流すと、あ?これと同じことか!と目が開くこともままあります。同じ事を違う表現で書いてあるだけで容易に理解できるようになる、ことがあるからです。
私も、本当なら目的に最短の手段(言語)を使いたいのですが、環境(職場やライセンスフィー)がそれを許さないこともあり Python を選び勉強中ですが、「使えるモノは親でも使え!」※1 です。
それ以前にですが、日本で Ruby でなく Python 使う理由、他人を納得させられる理由、「同僚が使うのを嫌がるかもしれない」を越える理由、を考えてから Python を勉強し始めるべきですね。
「流行ってるから」「流行りそうだから」(笑
でも、「楽しそうだから」は、、アリかも。
※1
あなたがコタツに入って紅白歌合戦を見ているとき、ミカンが食べたくなりました。
ミカンは食器棚の上、手が届きません。でもコタツから出たくありません。
そこに、父親がトイレから帰ってきました。
「お父さん、ミカンとってー」
Ruby のチュートリアル とか Matlab の GettingStarted あたりを、ふと流すと、あ?これと同じことか!と目が開くこともままあります。同じ事を違う表現で書いてあるだけで容易に理解できるようになる、ことがあるからです。
私も、本当なら目的に最短の手段(言語)を使いたいのですが、環境(職場やライセンスフィー)がそれを許さないこともあり Python を選び勉強中ですが、「使えるモノは親でも使え!」※1 です。
それ以前にですが、日本で Ruby でなく Python 使う理由、他人を納得させられる理由、「同僚が使うのを嫌がるかもしれない」を越える理由、を考えてから Python を勉強し始めるべきですね。
「流行ってるから」「流行りそうだから」(笑
でも、「楽しそうだから」は、、アリかも。
※1
あなたがコタツに入って紅白歌合戦を見ているとき、ミカンが食べたくなりました。
ミカンは食器棚の上、手が届きません。でもコタツから出たくありません。
そこに、父親がトイレから帰ってきました。
「お父さん、ミカンとってー」
2008年5月2日金曜日
CSVファイルの作成
Python file IO でCSV ファイルを出力する。
測定器からのデータなどを .CSV ファイルに書いてみます。
測定器からのデータなどを .CSV ファイルに書いてみます。
- 初期設定、現在時刻等を元にファイル名とかを決めます。
- Data というリストを、読み込みのバッファにします。
- ファイルを開きます。
- Data に測定器からのデータを入れます。
- Data をカンマを区切りにした文字列にしてファイルに書き込みます
- ファイルを閉じます
追記:標準 CSVモジュールを使った記事はこちら。
##
from time import time, strftime, localtime
TimeStart = time()
NameTime = strftime('%Y%m%d_%H%M%S_', localtime(TimeStart))
NamePlant = r'test'
Ext1 = r'.csv'
Dlm = r','
CR = '\n'
Data = [0.0 for i in range(4)]
NameFile1 = NameTime + NamePlant + Ext1
print '\nFile name : ', NameFile1
FileOut1 = open(NameFile1,'w')
##FileOut1.write( CR )
## 1st sample
Data[0] = time()
Data[1] = 1.0 ## inst1.read
Data[2] = 1.5 ## inst2.read
FileOut1.write(str(Data[0])+ Dlm +
str(Data[1])+ Dlm +
str(Data[2])+ Dlm +
str(Data[3])+ Dlm +
CR)
## 2nd sample
Data[0] = time()
Data[1] = 2.0 ## inst1.read
Data[2] = 1.6 ## inst2.read
StrData = (str(Data[0])+ Dlm +
str(Data[1])+ Dlm +
str(Data[2])+ Dlm +
str(Data[3])+ Dlm +
CR)
FileOut1.write(StrData)
##FileOut1.write( CR )
FileOut1.close()
##raw_input()
2008年5月1日木曜日
PyVISA でGPIB測定器の制御 その1
機能確認編
前にも書きましたけど PyVISA を試すには VISA32.dll か相当のDLLが必要なので、NI か Agilent から入手してください。測定器を何か買うとそれ風の CD がついてきます。もちろん PyVISA もダウンロードしてインストールしてください。
Agilent の場合、 Agilent connection expert 14.0 という CDがあって、それを CDインストールすると、各種ファイルやツールがインストールされます。
ソフトを試す前に、PC と計測器が GPIBケーブルや、USB、シリアルケーブルで正しく接続され認識されているか確かめます。
Agilent の場合 Agilent IO control というツールが使えます。NI は なんたらSPY とかいうソフトだったと思います。それをつかって VISA リソースネームを調べます。ついでに VISA32.dll の場所やパスも分かると楽です。
では、
「スクリプト言語だから遅い」というのは昔の話で、YouTube の動画見れるくらいの PC なら Windows でも大丈夫です。
シリアルケーブルで、測定器を制御するには、測定器側の追加の設定も結構必要です。 Agilent IO control とか SPY ソフト?できちんと認識されるレベルまでセットアップしてから、自分のソフトを試しましょう。Agilent のマルチメータは、REMOTE コマンド送ってから1秒くらい sleep() 入れたらうまく動きました。
前にも書きましたけど PyVISA を試すには VISA32.dll か相当のDLLが必要なので、NI か Agilent から入手してください。測定器を何か買うとそれ風の CD がついてきます。もちろん PyVISA もダウンロードしてインストールしてください。
Agilent の場合、 Agilent connection expert 14.0 という CDがあって、それを CDインストールすると、各種ファイルやツールがインストールされます。
ソフトを試す前に、PC と計測器が GPIBケーブルや、USB、シリアルケーブルで正しく接続され認識されているか確かめます。
Agilent の場合 Agilent IO control というツールが使えます。NI は なんたらSPY とかいうソフトだったと思います。それをつかって VISA リソースネームを調べます。ついでに VISA32.dll の場所やパスも分かると楽です。
では、
- PyVISA をインポートします。
- 周波数カウンターとマルチメータのVISAリソースを設定します。
- 周波数カウンターとマルチメータを初期化します。
- 測定値を読みます。
「スクリプト言語だから遅い」というのは昔の話で、YouTube の動画見れるくらいの PC なら Windows でも大丈夫です。
シリアルケーブルで、測定器を制御するには、測定器側の追加の設定も結構必要です。 Agilent IO control とか SPY ソフト?できちんと認識されるレベルまでセットアップしてから、自分のソフトを試しましょう。Agilent のマルチメータは、REMOTE コマンド送ってから1秒くらい sleep() 入れたらうまく動きました。
## $Id$
##
## Win32 (Win XP)
## Python2.5 (for win32)
## PyVISA1.1 (for win32 Python2.5)
##
from pyvisa.vpp43 import visa_library
visa_librery.load_library(r'c:\WINDOWS\system32\agvisa32.dll')
from visa import *
from time import time
## initialize
M1 = instrument('GPIB::22') # multimeter Agilent 34401A
C1 = instrument('GPIB::4') # counter Agilent 53132A
M1.write('*RST')
M1.write('*CLS')
M1.write('VOLT:DC:NPLC 1')
M1.write('VOLT:DC:RANG 10')
C1.write('*RST')
C1.write('*CLS')
C1.write(':FUNC "FREQ 1"')
C1.write(':FREQ:ARM:STAR:SOUR IMM')
C1.write(':FREQ:ARM:STOP:SOUR TIM')
C1.write(':FREQ:ARM:STOP:TIM 0.1')
## measure
M1.write('READ?')
print M1.read()
print time()
C1.write('READ?')
print C1.read()
print time()
raw_input()
登録:
投稿 (Atom)