min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

macOSのPython3のGUI(Qt5)で数学的幾何学模様を描いてみたい(Kritaとか使わずに)

結論

うまくいった。

きっかけ・経緯

この記事おもしろそう。てかThinkITサイト最近お気に入り。

thinkit.co.jp

 

ほいでmacOSでこれ試したい。

qiita.com

 

しかし出勤の時間が来たようだ。

早出して早帰りして夜試そう。

大成功

とりあえず動いた(ChatGPTに聞いた)

手順

まずはQt5をmacOSにインストール。

$ python3 -m pip install PyQt5  --break-system-packages

min117.hatenablog.com

入った。

 

ソースはこれ

冒頭の記事のコードをKritaとやらを使わないで動くようにChatGPTに書き換えてもらった。

thinkit.co.jp

from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPen, QBrush, QColor, QPainterPath, QPixmap
from PyQt5.QtCore import QPoint

class DrawWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Draw Fukidashi")
        self.setGeometry(100, 100, 800, 800)
        self.image = self.create_image(800, 800)
        
    def create_image(self, width, height):
        # キャンバスとなるピクスマップを作成
        pixmap = QPixmap(width, height)
        pixmap.fill(QColor(255, 255, 255))  # 背景を白で塗りつぶす
        painter = QPainter(pixmap)
        self.draw_fukidashi(painter)
        painter.end()
        return pixmap

    def draw_fukidashi(self, painter):
        # アンチエイリアスを有効にする
        painter.setRenderHint(QPainter.Antialiasing, True)

        # ペンを設定
        pen = QPen(QColor(0, 0, 0))
        pen.setWidth(4)
        painter.setPen(pen)

        # 塗りつぶし用のブラシを設定
        brush = QBrush(QColor(255, 255, 255))
        painter.setBrush(brush)

        # フキダシをベジェ曲線で描画
        path = QPainterPath()
        path.moveTo(100, 400)
        path.quadTo(100, 700, 400, 700)
        path.quadTo(700, 700, 700, 400)
        path.quadTo(700, 100, 400, 100)
        path.quadTo(100, 100, 100, 400)
        painter.drawPath(path)

        # フキダシから出る円を描画
        painter.drawEllipse(QPoint(660, 660), 30, 30)
        painter.drawEllipse(QPoint(710, 710), 20, 20)

    def paintEvent(self, event):
        # 画面に画像を描画
        painter = QPainter(self)
        painter.drawPixmap(0, 0, self.image)

def main():
    app = QApplication([])
    window = DrawWidget()
    window.show()
    app.exec_()

if __name__ == "__main__":
    main()





 

 



1,000万円を超えたbitcoinを少しだけどもらえるURL

https://bitflyer.com/invitation?id=l50e5ljw&lang=ja-JP

ハピタスからポイントもらえるURL

その買うを、もっとハッピーに。|ハピタス