はんぎょねこの憂鬱

耳から変な汁が出てきた

PySide

PySide 編集可能なQTreeWidgetを作る

import sys from PySide import QtCore, QtGui class MyTreeWidget(QtGui.QTreeWidget): def __init__(self): super().__init__() self.setHeaderHidden(True) self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.con…

PySide movable and resizable widget without frame

import sys, enum from PySide import QtCore, QtGui class Item(QtGui.QLabel): Manipilate = enum.Enum('Manipilate', 'none move resize_l resize_r') def __init__(self, text): super().__init__(text) self.setStyleSheet('background-color: white; b…

PySide Progressbarを表示してみる

QProgressDialogを使うと一番簡単であります import sys from PySide import QtGui app = QtGui.QApplication(sys.argv) prog = QtGui.QProgressDialog('何か処理しています...', 'キャンセル', 0, 100, None, 0) prog.show() prog.setValue(50) sys.exit(ap…

QScrollAreaに固定されたヘッダーを表示する

import sys from PySide import QtGui class MyTable(QtGui.QWidget): def __init__(self): super().__init__() lo = QtGui.QHBoxLayout() lo.setContentsMargins(0, 0, 0, 0) lo.setSpacing(0) self.setLayout(lo) self._header = QtGui.QLabel('header') s…

PySide ドラッグでデータ受け渡し

import sys from PySide import QtCore, QtGui # ドラッグ&ドロップで色を受け渡す class WidgetItem(QtGui.QLabel): def __init__(self, color): super().__init__('') self._color = color self.setStyleSheet('border: 1px solid black;') self.setFixed…

PySide ドラッグでWidgetを移動させる

import sys from PySide import QtCore, QtGui # ドラッグで動くWidget class WidgetItem(QtGui.QLabel): def __init__(self): super().__init__('') self.setStyleSheet('border: 1px solid black; background-color: red;') self.setFixedSize(32, 32) sel…

PySide: Asynchronously Text Filtering

QThreadを使った非同期テキストフィルタ ほしいもの 別スレッドで実行されるテキストフィルタ 一定時間ごとにフィルタリング済みのデータを返す 途中でキャンセルもしたい コード from PySide import QtCore, QtGui import datetime import time class Filte…

PySide: Save and Restore QDockWidgets

Dockの生成削除込みでQSettings保存 適当に調べた QSettingsを使用してWidgetの位置やサイズを保存できる 復元する前にWidgetを生成してobjectNameを設定しておく必要がある DockWidgetを追加・削除できるプログラムではその状況も保存する必要がある QMainW…

PySide: Suppress the clicked signal when emitting a contextMenuRequested signal

右クリックでコンテキストメニューを出すときに一緒にclickedシグナルが発信されると困るケースがあった。mousePressEventとmouseReleaseEventを継承して左クリックのみに反応するようにしてこれを回避した from PySide import QtGui, QtCore import sys cla…

PySide リソース一覧の取得

qrcファイルの中身がこんな感じだったら <RCC version="1.0"> <qresource> <file>folder/hogehoge.txt</file> <file>folder/fugafuga.bin</file> <file>folder/piyopiyo.jpg</file> </qresource> </RCC> こんな感じでpyに変換すると思うのですが pyside-rcc -o resource.py -py3 resource.qrc こんな感じで一覧を取得できます from PySide import QtCo…

QTreeWidgetItemでアイコン複数表示

HTMLを表示するdelegateを用意するのが手っ取り早い コードはここらへんを参考に stackoverflow.com PyQt版の回答をゴニョゴニョして作成 import sys from PySide import QtCore, QtGui class RichTextDelegate(QtGui.QStyledItemDelegate): def paint(self,…

PySide ドラッグ&ドロップ

忘れがちなポイント setAcceptDrops(True) 各イベントでevent.accept ファイルパスはTextじゃなくてURL from PySide import QtCore, QtGui import sys, os class DragAndDrop(QtGui.QLabel): def __init__(self): super().__init__() self.setText('Drag and…

QMessageBoxでチョロっとダイアログ表示

import sys from PySide import QtGui app = QtGui.QApplication(sys.argv) icon = None QtGui.QMessageBox.about(icon, 'About', 'Hello.') QtGui.QMessageBox.question(icon, 'Question', 'Are you dead?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)…

Pythonでウインドウハンドル取得してGetClientRectしてみる

WIN32から離れられない貴方へ import sys from PySide import QtGui import ctypes class RECT(ctypes.Structure): _fields_ = [('left', ctypes.c_long), ('top', ctypes.c_long), ('right', ctypes.c_long), ('bottom', ctypes.c_long)] class TestWidget(…

Widgetを等倍で中央寄せさせておきたい!

QScrollAreaのresizeEventを継承してゴニョゴニョしたら割と簡単にできた import sys from PySide import QtCore, QtGui class AlwaysCenterAlign(QtGui.QScrollArea): def __init__(self): super().__init__() self.setAlignment(QtCore.Qt.AlignCenter) se…

QActionでコードもすっきり

メニューやツールバーを実装するときはQPushButtonやコールバックをガリガリ書くのではなくQActionを作る。QActionオブジェクトを作成しておけば、複数のメニューやツールバーをまたいでも、ひとつのQActionオブジェクトで挙動を定義できるし、QActionGroup…

QDockWidgetに追加したWidgetが表示されないとき

setWidget()を使え

QListWidget コンテキストメニュー

# conding: utf-8 import sys from PySide.QtCore import * from PySide.QtGui import * # 右クリックでカレントの行を削除 def customMenu(widget, pos): if len(widget.selectedItems()) == 0: return action = QAction('Remove', widget) action.triggere…

QScrollAreaの罠にハマる

いつものようにLayoutにButtonを追加するが 一定サイズ以下に縮まないしスクロールバーも出ない # conding: utf-8 import sys from PySide.QtCore import * from PySide.QtGui import * # entry point if __name__ == '__main__': myapp = QApplication(sys.…

QListWidget 文字列フィルタリングしてみる

文字列でフィルタリングできるリストビューがあれば 人生の複雑な状況も整理できるかもしれない # conding: utf-8 import sys from PySide.QtCore import * from PySide.QtGui import * class MyListWidget(QWidget): def __init__(self, data, parent=None)…

QComboboxにはOrderedDictが良さげ

Comboboxのインデックスと処理が1:1だと便利 dictは追加した要素を不定の順序でイテレートするので 挿入順を保存したい場合は OrderedDict を使う # conding: utf-8 import sys from PySide.QtCore import * from PySide.QtGui import * import collections …

Signalの使いかたをよく忘れるのでメモ

これでGUIピタゴラ装置作ったら仕事してる振りできる # conding: utf-8 import sys from PySide.QtCore import * from PySide.QtGui import * # ほげ~ class Hoge(QLabel): # 文字列を引数に渡すシグナルを定義 textChanged = Signal(str) # 初期化 def __i…

QPixmap from PIL Image

PILで作った画像を表示するときに便利 # conding: utf-8 import sys from PySide.QtCore import * from PySide.QtGui import * from PIL import Image, ImageQt # entry point if __name__ == '__main__': myapp = QApplication(sys.argv) # PILで画像読み込…

PySide Dock配置とメニューからの表示切替

よく使うので自分用にメモ # conding: utf-8 import sys from PySide.QtCore import * from PySide.QtGui import * # entry point if __name__ == '__main__': myapp = QApplication(sys.argv) wnd = QMainWindow() # Dock Widgets wnd.__c = QTextEdit(wnd)…

PySideでDirectXウインドウを表示してみる

↑PySideで表示したWindowにDirectXの画面を表示しています。 C++ pyd用のプロジェクトを作成 DirectXのTutorialをコピペしてInitWindow、WinProcなどの不要な関数を削除 InitDeviceでウインドウハンドルを受け取るように変更 boost::pythonを使ってDirectXの…