ドラッグ&ドロップをもっと細かく!
以前ファイルをドラッグ&ドロップするでQTreeViewからアイテムをドラッグ&ドロップする方法をメモりましたが、今回はドラッグ時の操作をもっと細かく制御したい場合の方法です。
忘れそうになるんで、今回もメモっときます。
ファイルをドラッグ&ドロップするでは主にドロップされる側の方がメインでしたが、今回はドロップする側がメインの話になります。
まずはサンプルコードから。
スポンサーサイト
Q~Viewシリーズのアイテムの挙動をまとめて制御する。
いきなりですが、Maya2017からPySide2になって面倒な事になりましたね。
Maya 2017 は PySide2 を使用します。スクリプト内で PySide を使用するには、次のように PySide からモジュールを読み込みます。こうすると、Maya 2017 と Maya 2017 より前のバージョンの両方に対してスクリプトの互換性が維持されます。
保守どうすんのやぁぁぁぁ・・・
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でウィジェットの大きさや位置を変更するには以下のような方法がメジャーですね。
moveメソッドとresizeメソッドによって位置と大きさを修正出来るわけですが、それ以外の方法としてQRectを用いてsetGeometryすると言う手があります。
内容は一緒ですが、書き方がだいぶ違いますね。
今回はこのQRectが便利だったよぉぉぉぉぉぉっ!! ってお話でございます。
# -*- 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がありますね。
QTextEditはリッチテキストも扱えるため、シンプルなテキストをセットする場合はsetPlainTextメソッドを使います。
QLineEditではsetTextだけで良かったので、ちょっと複雑になってますね。
さて、QTextEditでは自身のカーソル位置や選択状況などを操作するにはQTextCursorを使用します。
基本的に自身のQTextCursorを呼びだすにはQTextEditのtextCursorメソッドを使用します。
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_())

QTextEditはリッチテキストも扱えるため、シンプルなテキストをセットする場合はsetPlainTextメソッドを使います。
QLineEditではsetTextだけで良かったので、ちょっと複雑になってますね。
さて、QTextEditでは自身のカーソル位置や選択状況などを操作するにはQTextCursorを使用します。
基本的に自身のQTextCursorを呼びだすにはQTextEditのtextCursorメソッドを使用します。
Qtでウェブ!
久々のQtネタ!
ホントは一回ネタを書いたんだけど、アップ間際に自分の過去記事を調べてみたらダダ被りしていたと言う・・・
タイトルまでほぼ一緒(´・ω・`) どんだけ頭の中が変わってないんだよと言う・・・
さて今回のネタは「Qtでウェブを表示する!!」でございます。
QtにはQtWebKitと言うモジュールがついていて、これを使用すると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_())これでとりあえずはウェブを見れるようになりました。
