FrontPage / Python / PySideその2

[[FrontPage/Python/PySide]]

** 自動終了 [#bf3dac04]
        # デバッグ用) 自動終了
        self.timer = QTimer()
        self.timer.singleShot(20*1000, self.close)

** QListViewの最速利用法 [#s22e7f8b]

 # :: FileListView
 self.model = QStringListModel()
 self.listView = QListView()
 self.listView.setModel(self.model)
  self.model.setStringList(["abc", "def", "ghi", "jkl"])
 self.listView.clicked.connect(self.flush_listitem)

    @Slot()
    def flush_listitem(self, index):
        sel1 = index.data(Qt.DisplayRole)
        sel2 = [i.data(Qt.DisplayRole) for i in self.listView.selectedIndexes()]
        print sel1
        print sel2

** Qt CSS Style一覧 [#r45ed1a1]
https://wiki.qt.io/Style-CSSBased

** QObject.sender() [#y76464fa]
シグナルの発行元オブジェクトを取得したい場合
https://wiki.qt.io/PySide-Pitfalls-Japanese

(注意) sender()は@Slotを実装してるメソッド内でのみ動く

 class Listener(QObject):
        @Slot()
        def on_signal(self,*args):
                print args
                print self.sender()
 listner = Listener()
 btn.someSignal.connect(listener.on_signal)

** QtCore.Property [#reed123c]
プロパティのセッターにより,値が変更されると,シグナルを発行できる.

 from PySide.QtCore import QObject, Property
 
 class MyObject(QObject):
        def __init__(self, startval=42):
                QObject.__init__(self)
                self.ppval = startval
        def readPP(self):
                return self.ppval
        def setPP(self,val):
                self.ppval = val
        pp = Property(int, readPP, setPP)
 
        obj = MyObject()
        obj.pp = 47

** タスクトレイアプリ [#z3c0d513]

基本形
http://flame-blaze.net/archives/3094

Threadを使って実用的。ただコード動かない。
http://woodboy644.hatenablog.com/entry/2013/07/30/001910

** qApp.quitの注意点。 [#aae207c4]
self.connectでつながないと動かない
        # : Quitアクション作成
        self.quitAction = QAction("&Quit", self)
        self.connect(self.quitAction, SIGNAL('triggered()'), qApp, SLOT('quit()'))
        # self.quitAction.triggered.connect(qApp.quit)

** 画面サイズの保存 [#x1301a45]

 def __init__():
         # 設定を読み込む
        self.mySettings = QSettings("my company", "hoge Analyser") # レジストリ
       self.mySettings = QSettings("myMDIApp.ini", QSettings.IniFormat) # iniファイル
        self.restoreGeometry(self.mySettings.value("abc/geometry")) # QWidgetとQMainWIndow
        self.restoreState(self.mySettings.value("abc/windowState")) # QMainWindow

 # ウインドウを閉じた時
 def closeEvent(self, event):
        self.mySettings.setValue("abc/geometry", self.saveGeometry())
        self.mySettings.setValue("abc/windowState", self.saveState())
        # 終了処理
        qApp.quit()

# QML式でのプロパティ
* QML式でのプロパティ [#ke38ba37]
もし、QML式の中でオブジェクトのプロパティを使いたいなら、
そのプロパティはNOTIFYableでなくてはなりません。
(訳注:NOTIFYable=通知可能。ここではProperty関数のnotify引数が与えられている事)
以下は、シンプルなシグナルを使用する例です。

 class Person(QtCore.QObject):
    def __init__(self, name):
        QtCore.QObject.__init__(self)
        self._person_name = name
  
    def _name(self):
        return self._person_name
     
    @QtCore.Signal 
    def name_changed(self): 
        pass
     
    name = QtCore.Property(unicode, _name, notify=name_changed)

** 更なる使い方 [#j6576345]
http://nullege.com/codes/search/PySide.QtCore.Property
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS