pyQt

はじめに


画面をまずは作ろうと思い、pyQt5を勉強することにしました。 動きが見えた方がやる気が出るので(笑)

pyQt5の説明からすると、 Qt(キュート)というC++GUIツール開発のための クロスプラットフォームフレームワークPython向けにバインディングしたものです。

要は、簡単にGUIツールが作れるフレームワークということです。

環境整備


Anacondaを使って行きます。Spyderで実行します。 Anacondaについてもいずれ軽く触れたいですね。

AnacondaをインストールしていればpyQt5はすでに使用できるはずです。

※使用するにはPython 2.6以上が必要

pyQt5を動かしていきましょう!


以下が基本的な書き方となる

import sys
from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':

    app = QApplication(sys.argv)
    widget = QWidget()
    widget.resize(250, 150)
    widget.move(300, 300)
    widget.setWindowTitle('sample')
    widget.show()
    sys.exit(app.exec_())

実行すると以下の画面が表示される f:id:glegle-official:20200715144131p:plain

解説


appを宣言

    app = QApplication(sys.argv)

画面を定義

    widget = QWidget()
    widget.resize(250, 150)
    widget.move(300, 300)
    widget.setWindowTitle('sample')

表示(show)

    widget.show()

終了処理

    sys.exit(app.exec_())

画面はクラス化して管理!

先ほどと同じ画面が表示される

import sys
from PyQt5.QtWidgets import QApplication, QWidget

class ExampleWidget(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(250, 150)
        self.move(300, 300)
        self.setWindowTitle('sample')
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ew = ExampleWidget()    
    sys.exit(app.exec_())
    

pyQt5でアプリを作ってみよう!


Qtの3大機能


Qtの重要な機能は、「signal」「connect」「slot」の3つである。 特定のイベントを「signal」に、イベントをトリガに呼び出す関数を「slot」に定義する。 「signal」と「slot」を結びつけるのが「connect」である。

以下を実行すると、 「Clear!!」ボタンを押すことで、「connected」の文字が消える機能を持った画面が作成されます

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel

class ExampleWidget(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(250, 150)
        self.move(300, 300)
        self.setWindowTitle('sample')

        # buttonの設定
        self.button = QPushButton('Clear!!')
        self.label = QLabel('connected')

        # buttonのclickでラベルをクリア
        self.button.clicked.connect(self.label.clear)

        # レイアウト配置
        self.grid = QGridLayout()
        self.grid.addWidget(self.button, 0, 0, 1, 1)
        self.grid.addWidget(self.label, 1, 0, 1, 2)
        self.setLayout(self.grid)

        # 表示
        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ew = ExampleWidget()    
    sys.exit(app.exec_())

f:id:glegle-official:20200715141406p:plain

「Clear!!」ボタン押下 f:id:glegle-official:20200715141749p:plain

各関数の使い方


マニュアルのリンクを貼っておきます。
PyQt5 Reference Guide — PyQt v5.15.0 Reference Guide

実際にボタンなどを配置してみたソースも参考程度に貼っておきます。 解説はまた時間があるときにでも。。

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QMainWindow,
                             QPushButton, QMessageBox, QLineEdit,
                             QAction, QTableWidget, QTableWidgetItem,
                             QVBoxLayout
                             )
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QIcon

class App(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = "PyQt5 status bar example - pythonspot.com"
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()

    def initUI(self):
        # ステータスバー配置
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.statusBar().showMessage("Message in statusbar.")

        # メニューバー配置
        mainMenu = self.menuBar() 
        fileMenu = mainMenu.addMenu("File")
        editMenu = mainMenu.addMenu("Edit")
        viewMenu = mainMenu.addMenu("View")
        searchMenu = mainMenu.addMenu("Search")
        toolsMenu = mainMenu.addMenu("Tools")
        helpMenu = mainMenu.addMenu("Help")

        exitButton = QAction("Exit", self)
        exitButton.setShortcut("Ctrl+Q")
        exitButton.setStatusTip("Exit application")
        exitButton.triggered.connect(self.close)
        fileMenu.addAction(exitButton)
        mainMenu.setNativeMenuBar(False) #macではこのコマンドがないと表示されない
        
        # テキストボックス配置
        self.textbox = QLineEdit(self)
        self.textbox.move(20, 20)
        self.textbox.resize(280,40)

        # ボタン配置
        self.button = QPushButton("Show text", self)
        self.button.move(20,80)
        self.button.clicked.connect(self.on_click)

        # 画面表示
        self.show()

    @pyqtSlot()
    def on_click(self):
        textboxValue = self.textbox.text()
        QMessageBox.question(self, "Message - pythonspot.com",
                             "You typed: " + textboxValue, 
                             QMessageBox.Ok, QMessageBox.Ok
                             )
        self.textbox.setText("")
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

資産形成についても勉強をしています。

pythonの記事が全然かけていない中、新しいカテゴリに挑戦です。 pythonの勉強はしてはいますが、記事になかなかできていません。。。言い訳です。

単純にお金が好きなので、お金を増やす方法として資産形成をしようと決心しました。

資産形成について調べたこと、実際にやってみた感想・実績を書いていけたらなと思っています。

最終目標としては、配当金のみでも生活できるようにしたいです!!

すでに、高配当株をいくつか購入し、wealthNaviも始めました。

詳細はいずれ記事にしようと思います。

まずは形から

f:id:glegle-official:20200705113335p:plain

MacBookAir

MacBookAirを購入しました!!!

AirPods Proも欲しくてついでに買っちゃいました(笑)

 

ビッグカメラで分割手数料0円キャンペーンをやっていたので、24回分割しました。

月々8000円くらいだったかな。

 

私は形から入るタイプなので、こういう良いものを買って、

モチベーションをあげないと頑張れません(笑)

 

AirPodsでノイキャンしながら、このMacBookAirで

Pythonの勉強していこうと思います!

 

URL貼っておきますので、どんなの買ったの!?ってかたは

以下から見れますよ〜

MacBookAir

https://www.apple.com/jp/macbook-air/ 

AirPods

https://www.apple.com/jp/airpods-pro/