1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🌟Raspberry PiでSNSフォロワーカウンターシステムを作る【第4回:PyQt5で画面作成編】

Last updated at Posted at 2025-07-28

📝 はじめに

こんにちは、piyovateです!

第3回では、X(旧Twitter)およびQiitaのAPIを使ってSNSデータを取得し、コンソールに出力するところまでを行いました。

第4回となる今回は、Raspberry Piの実行環境を対象に、PyQt5を使ってSNSのフォロワー数(またはQiitaのいいね数)を表示する画面UIを構築します。
まずは仮の数値を用いたラベル表示を行い、APIとの接続は次回以降に予定しています。


🎯 今回の目的

  • PyQt5を使ったシンプルなUI画面の構築
  • Instagram、Qiita、X、Facebookのフォロー数をラベルで表示
  • Qiitaのみ「合計いいね数」として表記を変更
  • Escキーで「フルスクリーン ⇔ ウィンドウモード」の切り替え対応
  • Raspberry Piでも動作確認可能な構成とする

🛠️ 表示コード(PyQt5対応・Escトグル・アイコン付き)

import sys
from PyQt5.QtWidgets import (
    QApplication,
    QWidget,
    QGridLayout,
    QFrame,
    QVBoxLayout,
    QLabel
)
from PyQt5.QtGui import QFont, QPixmap
from PyQt5.QtCore import Qt


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.fullscreen = True
        self.initUI()

    def initUI(self):
        self.setWindowTitle("SNSフォロワー数")
        self.showFullScreen()

        grid = QGridLayout()
        self.setLayout(grid)

        sns_data = [
            ("Instagram", "13"),
            ("Qiita", "21"),  # 合計いいね数
            ("X", "8"),
            ("Facebook", "98"),
        ]

        for i, (sns, count) in enumerate(sns_data):
            frame = QFrame()
            frame.setFrameStyle(QFrame.Box | QFrame.Raised)

            layout = QVBoxLayout()

            icon_path = f"./asset/{sns.lower()}.png"
            icon_label = QLabel()
            pixmap = QPixmap(icon_path).scaled(64, 64, Qt.KeepAspectRatio, Qt.SmoothTransformation)
            icon_label.setPixmap(pixmap)
            icon_label.setAlignment(Qt.AlignCenter)

            name_label = QLabel(sns)
            name_label.setFont(QFont("Arial", 24, QFont.Bold))
            name_label.setAlignment(Qt.AlignCenter)

            if sns == "Qiita":
                count_label = QLabel(f"合計いいね数: {count}")
            else:
                count_label = QLabel(f"フォロワー数: {count}")
            count_label.setFont(QFont("Arial", 18))
            count_label.setAlignment(Qt.AlignCenter)

            layout.addWidget(icon_label)
            layout.addWidget(name_label)
            layout.addWidget(count_label)
            frame.setLayout(layout)

            grid.addWidget(frame, i // 2, i % 2)

        grid.setSpacing(10)
        grid.setContentsMargins(10, 10, 10, 10)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Escape:
            if self.fullscreen:
                self.showMaximized()
            else:
                self.showFullScreen()
            self.fullscreen = not self.fullscreen


app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())


💡 補足ポ秒ント

  • アイコンが表示されない場合は、ファイル名が小文字かつ拡張子が.pngであることを確認しましょう。
  • GUI実行はSSHではなく、HDMIディスプレイやVNCなどGUIログイン環境で行う必要があります。
  • PyQt5はRaspberry Piでもapt installで簡単に導入可能です。
  • アイコンは/asset配下を参照するようにしているので必要に応じて変更してください

🔜 次回の予定

  • API連携により、実際のフォロワー数やQiitaのいいね数を表示
  • SNSごとに15分の間隔で取得し、1時間に1回自動更新
  • フォロワー数の16進数表示や、SNS数の可変対応も今後の拡張として検討
  • 前日比・1時間前比の表示機能(推移の可視化)
  • 前回比で増加していた場合に効果音を再生する仕組み(暫定)

🔗 シリーズリンク

📚 シリーズ全記事はこちら:🌟 Raspberry PiでSNSフォロワーカウンターシステムを作る

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?