PySide import 方法

   try:
       from PySide.QtCore import *
       from PySide.QtGui import *
       qt = 1
   except:
       try:
           from PyQt4.QtCore import *
           from PyQt4.QtGui import *
           qt = 2
       except:
           raise Exception('Error load PyQt or PySide')

PySide or PyQt? の使い分け

if use_pyside:
   from PySide import QtGui, QtCore
else:
   from PyQt4 import QtGui, QtCore

qt designer

Qt Designer を使った画面の作成と表示

PySide をインストールすると、一緒に Qt Designer も入っています。 場所はちょっとわかりづらいですがPython のインストール場所\Lib\site-packages\PySide内にdesigner.exeがあります。 英語ですが、特に問題なく使用できます。

ui ファイルを直接読み込む場合

   import os
   import sys
   from PySide import QtGui, QtUiTools
   if __name__ == "__main__":
       app = QtGui.QApplication(sys.argv)
       # Ui Loader
       loader = QtUiTools.QUiLoader()
       # Ui ファイルを読み込んでオブジェクトを取得
       ui = loader.load(os.path.dirname(os.path.abspath(sys.argv[0])) + "/Ui.ui")
       # 表示
       ui.show()
       # 各ウィジェットなどは、デザイナーで設定した名前でアクセスできる
       ui.exit_action.triggered.connect(app.quit)
       sys.exit(app.exec_())

.uiファイルを.pyファイルに変換して使う

pyside-uic.exe Ui.ui > Ui_.py
   from PySide.QtCore import *
   from PySide.QtGui import *

   from Ui_2 import *

   class MainWindow(QMainWindow, Ui_MainWindow):

       def __init__(self, parent=None):
           super(MainWindow, self).__init__(parent)
           self.setupUi(self)

   if __name__ == "__main__":
       app = QApplication([])
       w = MainWindow()
       w.show()
       sys.exit(app.exec_())

PySideでMaplotlibのウィジェットを使う方法

→Embed Matplotlib into PyQt as a custom widget

FigureCnavas?の継承クラス

→Custum FigureCanvas

QWidgetの背景色を変更する

  1. QPalleteを使う方法
widget = QWidget()
palette = QPalette()
palette.setColor(QPalette.Background, Qt.black
widget.setAutoFillBackground(True)
widget.setPalette(palette)
  1. スタイルシート(CSS)を使う方法
widget = QWidget()
widget.setStyleSheet("background-color:white;")
widget.show()

lineEditの文字が変更されたら、ラベルに追加

   self.line_edit = QLineEdit()
   layout.addWidget(self.line_edit)
   self.label = QLabel()
   layout.addWidget(self.label)
   self.line_edit.textChanged.connect(self.line_edit_text_changed)
   self.show()
   def line_edit_text_changed(self, text):
       self.label.setText(text)

ステータスバーにフラッシュ

self.statusbar.showMessage("Error!!! Please check Email and keyfile....")

SIGNALとSLOT

class MainWindow(QMainWindow, Ui_MainWindow):
   # シグナルを生成
   # ここじゃないとうまく動かない
   dataLoaded = Signal()
   dataLoaded = Signal(int)
   def analysis(self):
       # シグナル発行
       self.dataLoaded.emit()
   @Slot()
   def changeGAKey(self, key):
       self.ga_key = key
       print self.ga_key

PyInstaller? and PySide のPEMエラー google App API

NotImplementedError: PKCS12 format is not supported by the PyCrpto library. 

Try converting to a "PEM" (openssl pkcs12 -in xxxxx.p12 -nodes -nocerts > privatekey.pem) or using PyOpenSSL if native code is an option.

→SignedJwtAssertionCredentials on AppEngine doesn't recognize PEM key

p12ファイルを.pemに変更する

openssl pkcs12 -in privatekey.p12 -nodes -nocerts > privatekey.pem

pemをpemに

openssl pkcs8 -nocrypt -in privatekey.pem -passin pass:notasecret -topk8 -out pk.pem

PySideをCSSでデザイン変更する

→PySideのUIをCSSでアレンジしてみる

app = QtGui.QApplication(sys.argv)
# CSSをインポート
app.setStyleSheet(qcss13())
def qcss13():
    s = '''
    QMainWindow{
       background-color: #000;
    }'''
    return s

プログレスバーをステータスバーに表示する

       self.progressBar = QProgressBar()
       self.statusbar.addPermanentWidget(self.progressBar)
       self.progressBar.reset()
       self.progressBar.setVisible(False)
       self.progressBar.setValue(10)
       self.statusBar().showMessage("File opened"+self.fileName, 2000)

ドラッグ&ドロップ可能なツリービュー

http://melpystudio.blog82.fc2.com/blog-entry-115.html

ファイルリストを取り扱う QListView?

PySideでリストをカスタマイズするぞ! ~基礎編「model/viewアーキテクチャ」~

PySideでリストをカスタマイズするぞ! ~応用編「delegate」~

ドラッグアンドドロップを許可する方法

サイズの設定

def minimumSizeHint(self):
 """最小サイズ値の定義(オーバーライド)"""
 return QtCore.QSize(50, 50)
def sizeHint(self):
  """規定サイズ値の定義(オーバーライド)"""
 return QtCore.QSize(180, 180)

レンダリング時のアンチエイリアスの指定

       painter.setRenderHint(QtGui.QPainter.Antialiasing, self.antialiased)

座標値のオフセット(オブジェクトの中央に移動)

       painter.translate(0, self.height() / 2)

painterクックブック(QPen)

def settingLine(self, painter):
	    """ ラインを引く
	    ラインを引くためには、QPenオブジェクトを生成し、設定を行う
	    :link: https://srinikom.github.io/pyside-docs/PySide/QtGui/QPen.html
	    :link: http://zetcode.com/gui/pysidetutorial/drawing/
	    """
	    # QPenの生成
	    # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	    pen = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine)
	    # 線の太さの設定
	    pen.setWidth(3)
	    # Cap Style 線の端部の形状変更
	    pen.setCapStyle(QtCore.Qt.SquareCap)  # 四角
	    pen.setCapStyle(QtCore.Qt.FlatCap)  # 四角
	    pen.setCapStyle(QtCore.Qt.RoundCap)  # 丸
	    # Join Style: 線の角部の形状
	    pen.setJoinStyle(QtCore.Qt.BevelJoin)  # フラット
	    pen.setJoinStyle(QtCore.Qt.MiterJoin)  # 角
	    pen.setJoinStyle(QtCore.Qt.RoundJoin)  # 丸
	    # 線の種類の変更
	    pen.setStyle(QtCore.Qt.SolidLine)  # ソリッド
	    pen.setStyle(QtCore.Qt.DashLine)  # 破線
	    pen.setStyle(QtCore.Qt.DotLine)  # 点線
	    pen.setStyle(QtCore.Qt.DashDotLine)  # 1点破線
	    pen.setStyle(QtCore.Qt.DashDotDotLine)  # 2点は線
	    pen.setStyle(QtCore.Qt.CustomDashLine)  # ユーザ指定
	    pen.setDashPattern([1, 4, 5, 4])
	    # プロパティの適用 (おまじない)
	    painter.setPen(pen)
	    # drawLine(int,int,int,int)
	    painter.drawLine(0, np.ceil(self.height() / 2), self.width(), np.ceil(self.height() / 2))
  

painterクックブック(文字の書き方)

   def settingText(self, event, painter):
       """ 文字の書き方
       QtGui.QPainter.drawText(r, flags, text)
       :link: https://srinikom.github.io/pyside-docs/PySide/QtGui/QPainter.html?highlight=drawtext#PySide.QtGui.PySide.QtGui.QPainter.drawText
       """
       # 書きだす文字
       text = 'Graph Title'
       # 文字の色を設定
       painter.setPen(QtGui.QColor(168, 34, 3))
       # 文字のフォントと、文字サイズを設定
       painter.setFont(QtGui.QFont('Decorative', 30))
       # テキストの表示位置
       # :::::::::::::::::::::::::::::::::::
       # QtCore.Qt.AlignLeft
       # QtCore.Qt.AlignRight
       # QtCore.Qt.AlignHCenter
       # QtCore.Qt.AlignJustify
       # QtCore.Qt.AlignTop
       # QtCore.Qt.AlignBottom
       # QtCore.Qt.AlignVCenter
       # QtCore.Qt.AlignCenter
       # QtCore.Qt.TextDontClip
       # QtCore.Qt.TextSingleLine
       # QtCore.Qt.TextExpandTabs
       # QtCore.Qt.TextShowMnemonic
       # QtCore.Qt.TextWordWrap
       # QtCore.Qt.TextIncludeTrailingSpaces
       painter.drawText(event.rect(), QtCore.Qt.AlignHCenter, text)
       # painter.drawText(event.rect(), QtCore.Qt.AlignTop|QtCore.Qt.TextWordWrap, text)
       # painter.drawText(int(x0), int(y0), int(w), int(h), QtCore.Qt.AlignLeft, self.text)

painterクックブック

       pen.setColor(QtCore.Qt.black)
       pen.setWidth(2)
       painter.setPen(pen)
       painter.setBrush(QtGui.QBrush(QtCore.Qt.green, QtCore.Qt.Dense7Pattern))
      
     qpoints = [QtCore.QPointF(radius * np.sin(2. * np.pi / N * i)*self.rcData_normarized[i], -1. * radius * np.cos(2. * np.pi / N * i)*self.rcData_normarized[i]) for i in
                  range(0, N)]
       poly = QtGui.QPolygonF(qpoints)
       painter.drawPolygon(poly)
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS