ドラッグ&ドロップをもっと細かく!

     以前ファイルをドラッグ&ドロップするでQTreeViewからアイテムをドラッグ&ドロップする方法をメモりましたが、今回はドラッグ時の操作をもっと細かく制御したい場合の方法です。
     忘れそうになるんで、今回もメモっときます。

     ファイルをドラッグ&ドロップするでは主にドロップされる側の方がメインでしたが、今回はドロップする側がメインの話になります。

    qDrag001.png 

     まずはサンプルコードから。

    続きを読む

    スポンサーサイト

    Q~Viewシリーズのアイテムの挙動をまとめて制御する。

    いきなりですが、Maya2017からPySide2になって面倒な事になりましたね。
    保守どうすんのやぁぁぁぁ・・・


    Maya 2017 は PySide2 を使用します。スクリプト内で PySide を使用するには、次のように PySide からモジュールを読み込みます。こうすると、Maya 2017 と Maya 2017 より前のバージョンの両方に対してスクリプトの互換性が維持されます。
    try:
        from PySide2.QtCore import * 
        from PySide2.QtGui import * 
        from PySide2.QtWidgets import *
        from PySide2 import __version__
        from shiboken2 import wrapInstance 
    except ImportError:
        from PySide.QtCore import * 
        from PySide.QtGui import * 
        from PySide import __version__
        from shiboken import wrapInstance 
     なんてとんでもない事書いてますけど、「import *」はPythonでは推奨されていませんからね!!!!!!! 

    一般的には、モジュールやパッケージから * を import するというやり方には賛同できません。 というのは、この操作を行うとしばしば可読性に乏しいコードになるからです。 

     とは言え、ちゃんと対応しようと思ったらとっても大変なんで、その時が来るまでここは目をつぶることにします・・・(Qt用のqtlibモジュール作って、その中でPySide1系のモジュールを擬似的にPySide2系のモジュール名に合わせるしかないかも・・・)

     と、しょっぱなから話しはそれましたが・・・あ、
    新年明けましておめでとうございます。
     この年になるとなんにもおめでたくないんですが、一応・・・

     さて、QtのQ~Viewシリーズ(QTreeView、QListView、QTableViewなど)に表示するアイテムはラベルの編集や選択の可否、有効/無効などさまざまな状態に設定する事が出来ます。

    続きを読む

    QRectが便利な件

     いきなりですが、Qtでウィジェットの大きさや位置を変更するには以下のような方法がメジャーですね。
    # -*- coding:utf-8 -*-
    import sys
    from PySide import QtGui, QtCore
    
    app = QtGui.QApplication(sys.argv)
    widgetA = QtGui.QWidget()
    widgetA.show()
    
    widgetA.move(100, 50)     # ウィジェットの位置を指定
    widgetA.resize(400, 300)  # ウィジェットの大きさを指定
    
    sys.exit(app.exec_())
    

     moveメソッドとresizeメソッドによって位置と大きさを修正出来るわけですが、それ以外の方法としてQRectを用いてsetGeometryすると言う手があります。
    # -*- coding:utf-8 -*-
    import sys
    from PySide import QtGui, QtCore
    
    app = QtGui.QApplication(sys.argv)
    widgetA = QtGui.QWidget()
    widgetA.show()
    
    rect = QtCore.QRect(100, 50, 400, 300)
    widgetA.setGeometry(rect)
    
    sys.exit(app.exec_())
    

     内容は一緒ですが、書き方がだいぶ違いますね。
     今回はこのQRectが便利だったよぉぉぉぉぉぉっ!! ってお話でございます。

    続きを読む

    QTextCursorでQTextEditを制す!

    今回はPySideのお話。

    Qtには複数行の文字列を表示・編集する事ができるQTextEditがありますね。
    # -*- coding:utf-8 -*-
    import sys
    from PySide import QtGui, QtCore
    
    class SampleTextEdit(QtGui.QWidget):
        def __init__(self, parent=None):
            super(SampleTextEdit, self).__init__(parent)
            self.setWindowTitle('Sample Text Editor')
    
            self.editor = QtGui.QTextEdit()
            # 文字列をエディタにセットして表示する。
            self.editor.setPlainText('Hellow PySide!!')
    
            layout = QtGui.QVBoxLayout(self)
            layout.addWidget(self.editor)
    
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        editor = SampleTextEdit()
        editor.show()
    
        sys.exit(app.exec_())
    
    qtextCursor001.png
    QTextEditはリッチテキストも扱えるため、シンプルなテキストをセットする場合はsetPlainTextメソッドを使います。
    QLineEditではsetTextだけで良かったので、ちょっと複雑になってますね。


     さて、QTextEditでは自身のカーソル位置や選択状況などを操作するにはQTextCursorを使用します。
     基本的に自身のQTextCursorを呼びだすにはQTextEditのtextCursorメソッドを使用します。

    続きを読む

    Qtでウェブ!

     久々のQtネタ!
     ホントは一回ネタを書いたんだけど、アップ間際に自分の過去記事を調べてみたらダダ被りしていたと言う・・・
     タイトルまでほぼ一緒(´・ω・`) どんだけ頭の中が変わってないんだよと言う・・・

     さて今回のネタは「Qtでウェブを表示する!!」でございます。
     QtにはQtWebKitと言うモジュールがついていて、これを使用するとQtのインターフェース上でネットが見れちゃいますぜ。
     では早速シンプルなソースコードを・・・
    # -*- coding:utf-8 -*-
    import sys
    # 普段のQtGui,QtCoreとは別に、QtWebKitも読み込む必要がある。
    from PySide import QtGui, QtCore, QtWebKit
    
    class WebViewer(QtGui.QWidget):
        '''メインのウィジェット。'''
        def __init__(self, parent=None):
            super(WebViewer, self).__init__(parent)
            
            # QWebViewを作成して外部URL(今回はこのブログのトップ)を設定する。
            webview = QtWebKit.QWebView()
            webview.setUrl('http://melpystudio.blog82.fc2.com/')
    
            # レイアウトを作成し、先に作ったQWebViewをセットする。
            layout = QtGui.QVBoxLayout(self)
            layout.addWidget(webview)
    
    
    if __name__ == '__main__':
        # いつもの作成部分。
        app = QtGui.QApplication(sys.argv)
        widget = WebViewer()
        widget.show()
    
        sys.exit(app.exec_())
    
     これでとりあえずはウェブを見れるようになりました。
    qwebview01_001.jpg

    続きを読む

    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR