Python 学習:GUI アプリ は PyQt4 に決め

2015-03-15 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
5、2、0、0、0、 1、1、0、0、0(41)で、換算ポイント 68pt 。
一昨日朝方「Firefox」がbg値変わらず7位にダウン。
以降、「C言語」「Firefox」「グルコサミン」「FM COCOLO」等々
上位のものはほぼ変わらず。
・-・ - -・

さて、本文。

前々回(2015-03-09)の記事:「Python 学習:wxPython で GUI アプリ
前回(2015-03-12)の記事:「Python 学習:PyQt4 で GUI アプリ

と、検討した結果、・・・・・

やはり、「WinPython」にデフォルトで入っている、
「PyQt4」で行くことにした。


取っ掛かりとしての学習教材は、
前回書いた、「PyQt4 tutorial
ですね。

そして、
本家ドキュメントは、
QLabel Class Reference
ページ等々の、「PyQt4 Reference Guide
ですね。

それで、
「PyQt4 tutorial」の「Drag and Drop in PyQt4
にあるコード:

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

import sys
from PyQt4 import QtGui

class Button(QtGui.QPushButton):
def __init__(self, title, parent):
super(Button, self).__init__(title, parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
if e.mimeData().hasFormat('text/plain'):
e.accept()
else:
e.ignore()
def dropEvent(self, e):
self.setText(e.mimeData().text())
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
edit = QtGui.QLineEdit('', self)
edit.setDragEnabled(True)
edit.move(30, 65)
button = Button("Button", self)
button.move(190, 65)
self.setWindowTitle('Simple drag & drop')
self.setGeometry(300, 300, 300, 150)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
if __name__ == '__main__':
main()


をじっくり学習。


以前、“GUI アプリは、Tkinter”と決めた時、
つまり、昨年4月(2014-04-23)の記事:
Python 学習:Tkinter の Geometry Manager
に対して、ファイルの“ドラッグ&ドロップ”対応版として、
“GUI アプリは、PyQt4”で決定。


必要なのは、
窓にドラッグ&ドロップしたファイル名の取得と、
「QtGui.QLabel」「QtGui.QLineEdit」「QtGui.QPushButton」の
3つの Widget でしょうか。

そこで、昨年の「Tkinter」版をベースに「PyQt4」版コンバータを作った。


以下のようなテキスト・ファイルを入力として、
“PyQt4”のプロフラムを出力する。

//Begin
s=''; f=''
//Main <窓のタイトル>, ( 200, 200, 600, 400 )

/Lbl Lbl1, 'File_Name:', ( 10, 10 )
/Lbl Lbl2, '?', ( 75, 10 )

/Ent Ent1, '', ( 10, 40 ), Ent1Changed
/Lbl Lbl3, '', ( 10, 70 )

/Btn Btn1, 'Go?', ( 40, 110 ), Btn1Clicked

//D&D e
files = [ unicode( u.toLocalFile() ) for u in e.mimeData().urls() ]
for ff in files:
$f = ff
$Lbl2.setText( ff )

/def Ent1Changed( text ):
$s = text

/def Btn1Clicked( ):
$Lbl3.setText( $s + $f )
//End


この場合の出力は、・・・・・

import sys
from PyQt4 import QtGui, QtCore
class MainW( QtGui.QWidget ):
s=''; f=''
def __init__( self ):
super( MainW, self ).__init__()
self.initUI()
def initUI( self ):
self.Lbl1=QtGui.QLabel( 'File_Name:', self )
self.Lbl1.move( 10, 10 )
self.Lbl2=QtGui.QLabel( '?', self )
self.Lbl2.move( 75, 10 )
self.Ent1=QtGui.QLineEdit( '', self )
self.Ent1.move( 10, 40 )
self.Ent1.textChanged[str].connect( self.Ent1Changed )
self.Lbl3=QtGui.QLabel( '', self )
self.Lbl3.move( 10, 70 )
self.Btn1=QtGui.QPushButton( 'Go?', self )
self.Btn1.move( 40, 110 )
QtCore.QObject.connect( self.Btn1, QtCore.SIGNAL("clicked()"), self.Btn1Clicked )
self.setWindowTitle( <窓のタイトル> )
self.setGeometry( 200, 200, 600, 400 )
self.setAcceptDrops( True )
def dragEnterEvent( self, e ):
if e.mimeData().hasUrls(): e.accept()
else: e.ignore()
def dropEvent( self, e ):
files = [ unicode( u.toLocalFile() ) for u in e.mimeData().urls() ]
for ff in files:
self.f = ff
self.Lbl2.setText( ff )
self.Lbl2.adjustSize()

def Ent1Changed( self, text ):
self.s = text

def Btn1Clicked( self ):
self.Lbl3.setText( self.s + self.f )
self.Lbl3.adjustSize()

app=QtGui.QApplication( sys.argv )
w=MainW(); w.show()
sys.exit( app.exec_() )


Layout management in PyQt4
は、「Absolute positioning」に決め。


「~.setText」に対しては、「~.adjustSize()」を生成。


追加で、“import”が必要なら、
「//Begin」の前に記述できる。


当面、
これだけあれば、ほぼ好きな事が出来そう???


更なる「PyQt4」の学習?


本日はここまで。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


150211Z,12P
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク