mieki256's diary



2016/10/11(火) [n年前の日記]

#1 [python] PySide勉強中

Python + PySide を使って、マウスボタンを押してドラッグするとウインドウ内に何かを描く、みたいな処理をしてみたい。

こんな感じだろうか…。

_drawing_pyside_3.py
"""
PySideでウインドウに描画。
空の QPixmap を作ってそこに描画する例。
マウス左ボタンを押して動かすとその位置に円を描画する。

参考ページ:

「プログラムでシダを描画する」をPythonで描画過程まで出力する - Qiita
http://qiita.com/tatuno/items/23d291dd3bf01693bde4

[Python][PySide] 簡単なメニュー付きウィンドウを表示する | unlinked log
http://log.noiretaya.com/?p=250

PyQtでのグラフィックス その1 (QWidgetに直接描画する) - bravo's blog
http://bravo.hatenablog.jp/entry/2016/02/07/084048
"""

import sys
from PySide.QtCore import *
from PySide.QtGui import *

width = 480
height = 360

brush_use = True
brush_filename = "ball.png"


class MyWidget(QWidget):

    """描画担当ウィジェット"""

    def __init__(self, parent):
        super(MyWidget, self).__init__(parent)
        self.mouseOnFlag = False

        # 空のQPixmapを生成。以後はここに描画していく
        self.pixmap = QPixmap(width, height)
        self.pixmap.fill()

        # ブラシ画像を読み込み
        self.brush_pixmap = QPixmap(brush_filename)

    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)
        qp.drawPixmap(0, 0, self.pixmap)
        qp.end()

    def mousePressEvent(self, event):
        """ マウスボタンを押した """
        if event.button() == Qt.LeftButton:
            self.mouseOnFlag = True
            self.mydraw(event)

    def mouseMoveEvent(self, event):
        """ マウスを動かした """
        if self.mouseOnFlag:
            self.mydraw(event)

    def mouseReleaseEvent(self, event):
        """ マウスボタンを離した """
        if event.button() == Qt.LeftButton:
            self.mouseOnFlag = False

    def mydraw(self, event):
        """ 描画処理 """
        qp = QPainter()
        qp.begin(self.pixmap)

        # マウス座標取得
        x = event.pos().x()
        y = event.pos().y()

        if brush_use:
            # ブラシ画像で描画
            x -= self.brush_pixmap.width() / 2
            y -= self.brush_pixmap.height() / 2
            qp.drawPixmap(x, y, self.brush_pixmap)
        else:
            # 円を描画
            qp.setBrush(QColor(0, 0, 128))
            qp.setPen(QColor(0, 64, 255))
            qp.drawEllipse(event.pos(), 20, 20)

            # 点を描画する例
            # qp.drawPoint(x, y)

        qp.end()
        self.repaint()


class MainWindow(QMainWindow):

    """ メインウインドウ """

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.resize(width, height)
        # self.setFixedSize(width, height)
        # self.refresh_rate = 200

        # メニューバー作成
        menubar = QMenuBar()
        file_menu = QMenu("&File", self)
        exit_action = file_menu.addAction("&Exit")
        exit_action.setShortcut("Ctrl+Q")
        exit_action.triggered.connect(qApp.quit)
        menubar.addMenu(file_menu)
        self.setMenuBar(menubar)

        # ステータスバー作成
        self.statusBar()

        # 描画するウィジェットを作成して真ん中に配置
        widget = MyWidget(self)
        self.setCentralWidget(widget)


def main():
    app = QApplication(sys.argv)
    window = MainWindow()
    app.setActiveWindow(window)
    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
使ったブラシ画像は以下。

_ball.png

pyside_draw_ss01.gif

#2 [nitijyou] 市の健康診断に行ってきた

AM09:30-AM10:40まで。それほど混雑してる感じではなかったけど、血圧測定と血液検査で待たされて、1時間以上かかった感じ。

毎年、北団地の集会所で受けてたけど、今年は期日を把握してなくてうっかり機会を逃してしまい、もう少し遠い、森宿区民会館で受けることに。場所も把握してなければ中に入ったこともなかったけど、結構綺麗な建物だなと感心(?)を。

親父さんの電動自転車を借りて行ってきたけど…。区民会館が面してる道路が、歩道が無いぐらいに細いのに何故か異様に車の通行量が多く、しかもどの車もビュンビュン飛ばすので、自転車で通るのも一苦労。あの調子だといつか事故が起きそうな気がする。かといってどう見ても道路を広げる等の工事ができそうにない状態だし。一般住宅に加えて工場までギリギリに建ってるし。どうするんだろ。どうしようもないか。

以上、1 日分です。

過去ログ表示

Prev - 2016/10 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project