PyQt4メモ1
最近PyQt4を使い始めたのでテキトーにメモしていきます。
[参考にしているサイト]
PyQt's Modules
PyQt Class Reference
[環境]
OS: Windows7
IDE: Pyscripter
Python: Python2.7
PyQt: PyQt4
Pyscripterのモジュールのメソッドの補完については
(手順1)
Pyscripterの起動 -> ツールタブ -> Edit Start Scripts
とすると pyscripter_init.py と python_init.py が開かれるので
python_init.pyの方に
import sys import PyQt4.QtGui as QtGui import PyQt4.QtCore as QtCore
を追加してファイルを上書き保存。
(手順2)
Pyscripterの起動 -> ツールタブ -> オプション -> IDEオプション
とするとIDEオプションのウィンドウが開かれるので
Code Completionの表の中の Special packagesにPyQt4を追加する
Special packages os, wx, PyQt4
となっていればOK
numpy, scipy, matplotlibなどを使いたいって時も同じ手順で行います。
これは何をやっているのというと、
Pyscripter上にあるPythonインタプリタに、初期設定でpython_init.pyでimportしまっせということらしい。
そしてコード補完はPyscripter上のインタプリタで定義された変数やクラスにしか作用しないということらしいです。
なのでpython_init.pyを起動時に読み込んであげて、変数・クラスを定義しますよ ということらしいです。
外部モジュールをpython_init.pyで読み込むには,手順2で設定してあげましょうね、ということらしいです。
合ってるかはワカリマセン。
では以下よりPyQtの話題
まずは基本の雛形
[mamo1_1.py]
import sys import PyQt4.QtGui as QtGui import PyQt4.QtCore as QtCore #基本のウィンドウの作成 これの上にボタンとかを載せていく class MainWidget(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self, parent=None) self.initUI() def initUI(self): self.show() def main(): app = QtGui.QApplication(sys.argv) main_widget = MainWidget() sys.exit(app.exec_()) #app.exec_()でメインループの開始 if __name__=="__main__": main()
これでとりあえず画面は表示される。
何も設定しない状態でデスクトップのどこに表示されるのかなどを比較したかったのでデスクトップごと映しました。
何もしなくても中心あたりに表示された。
GUIを作るんだったら静的にではなく動的にいろいろいじくりたいのでまず、ウィンドウの状態や状態の変更の仕方を知りたいです。
そしてウィンドウの状態の定義の仕方はどんなウィジェットでも一貫性のあるもののはずです。きっと。応用が効きまくるはずです。
サイズだとか位置だとかが必ずクラスで定義されているはずだし、英語だとpositionだからそれっぽい名前だろうということで、上記の参考サイトで調べるとありました。
(GoogleChromeでのキーワードの検索はWebページ上で Ctrl+F で行えます。画像のようになります)
QWidgetの位置はQPointというクラスで定義されているようです。
さらにQPointクラスについて調べてみると
QPoint Class Reference
英語読めないよ、という方はWebブラウザの翻訳機能を使いましょう。少ししょぼい翻訳ですが英語だけで読み切るよりはマシなはずです。
Methodsの項目だけみてればとりあえずOK。それっぽいのがありました
QPoint.setX(self, int xpos) QPoint.setY(self, int ypos) QPoint.x(self) QPoint.y(self)
setX,setYはウィジェットの位置を決めるメソッド
x,yはウィジェットの位置を返すメソッド
だと分かります。
QWidgetのサイズはQSizeというクラスで定義されているようです。
QSize Class Reference
QSize.setHeight(self, int h) QSize.setWidth(self, int w) QSize.height(self) QSize.width(self)
確かめてみましょう。上記のmemo1_1.pyにprintを追加しただけです。
[memo1_2.py]
import sys import PyQt4.QtGui as QtGui import PyQt4.QtCore as QtCore class MainWidget(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self, parent=None) self.initUI() print "x:",self.x() print "y;",self.y() print "widht:", self.width() print "height:", self.height() def initUI(self): self.show() def main(): app=QtGui.QApplication(sys.argv) main_class=MainWidget() sys.exit(app.exec_()) if __name__ == '__main__': main()
これでなんとかウィンドウの状態が取得できました。めでたしめでたし。
今回はデスクトップ上での位置だったけど、ウィジェットにウィジェットを入れ子にするのが普通なのでその場合は位置はどうなるのか気になるところです。
多分ウィジェット上での位置になるんだろうけど。