2021年3月31日水曜日

WnckとPythonを使用してアプリケーションが閉じられるまで待機する

WnckとPythonを使用してアプリケーションが閉じられるまで待機するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行して、application-closedシグナルに対応する関数に関連付けます。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()

def application_closed(screen, app):
  print("application-closed:{}".format(app.get_name()))
  Gtk.main_quit()

screen.connect("application-closed", application_closed)
Gtk.main()

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでキャンバス要素を作成して直線を描画する

PySimpleGUIでキャンバス要素を作成して直線を描画するには、 tkiner Canvasを取得してcreate_lineメソッドを使用します。

サンプル実行手順

以下のファイルを保存して、実行します。
canvas_line.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
canvas = sg.Canvas(size=(200,200))
layout = [[canvas]]

window = sg.Window('サンプル', layout, finalize=True)
# 直線を描画
canvas.tk_canvas.create_line(0, 0, 200, 200, fill='red', width=3)

# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python canvas_line.py

〇実行結果

関連情報

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月30日火曜日

WnckとPythonを使用してアクティブなワークスペースが変わるまで待機する

WnckとPythonを使用してアクティブなワークスペースが変わるまで待機するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行して、active-workspace-changedシグナルに対応する関数に関連付けます。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()

def active_workspace_changed(screen, window):
  print("active-workspace-changed:{}".format(screen.get_active_workspace().get_name()))
  Gtk.main_quit()

screen.connect("active-workspace-changed", active_workspace_changed)
Gtk.main()

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでラジオボタン要素のパディングを指定する

PySimpleGUIでラジオボタン要素のパディングを指定するには、padパラメータで指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
radio_pad.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
left=32
right=32
top=8
bottom=8
layout = [[sg.Radio(text='選択肢1', group_id='A', pad=((left,right),(top,bottom)) )],
    [sg.Radio(text='選択肢2', group_id='A', pad=((left,right),(top,bottom)) )],
    [sg.Radio(text='選択肢3', group_id='A', pad=((left,right),(top,bottom)) )]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python radio_pad.py

〇実行結果

関連情報

PySimpleGUIでラジオボタン要素の初期選択状態を設定する

PySimpleGUIでラジオボタン要素のフォント・フォントサイズを指定する

PySimpleGUIでラジオボタン要素の幅を指定する

PySimpleGUIでラジオボタン要素の文字色・背景色を指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月29日月曜日

WnckとPythonを使用してアクティブなウインドウが変わるまで待機する

WnckとPythonを使用してアクティブなウインドウが変わるまで待機するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行して、active-window-changedシグナルに対応する関数に関連付けます。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()

def active_window_changed(screen, window):
  print("active-window-changed:{}".format(window.get_name()))
  Gtk.main_quit()

screen.connect("active-window-changed", active_window_changed)
Gtk.main()

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでラジオボタン要素のフォント・フォントサイズを指定する

PySimpleGUIでラジオボタン要素のフォント・フォントサイズを指定するには、fontパラメータにフォント名とサイズをタプルで指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
radio_font.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Radio(text='選択肢1', group_id='A', font=('Noto Serif CJK JP', 18)) ],
    [sg.Radio(text='選択肢2', group_id='A', font=('Noto Serif CJK JP', 18)) ],
    [sg.Radio(text='選択肢3', group_id='A', font=('Noto Serif CJK JP', 18)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python radio_font.py

〇実行結果

関連情報

PySimpleGUIでラジオボタン要素の初期選択状態を設定する

PySimpleGUIでラジオボタン要素の幅を指定する

PySimpleGUIでラジオボタン要素の文字色・背景色を指定する

PySimpleGUIでラジオボタン要素のパディングを指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月28日日曜日

WnckとPythonを使用して新しいウインドウがクローズするまで待機する

WnckとPythonを使用して新しいウインドウがクローズするまで待機するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行して、window-closedシグナルに対応する関数に関連付けます。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()

def closed(screen, window):
  print("window-closed:{}".format(window.get_name()))
  Gtk.main_quit()

screen.connect("window-closed", closed)
Gtk.main()

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでラジオボタン要素の幅を指定する

PySimpleGUIでラジオボタン要素の幅を指定するには、sizeパラメータに幅・高さをタプルで指定します(高さは1と同じになります)。

サンプル実行手順

以下のファイルを保存して、実行します。
radio_size.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Radio(text='選択肢1', group_id='A', size=(20,1)) ],
    [sg.Radio(text='選択肢2', group_id='A', size=(20,1)) ],
    [sg.Radio(text='選択肢3', group_id='A', size=(20,1)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python radio_size.py

〇実行結果

関連情報

PySimpleGUIでラジオボタン要素の初期選択状態を設定する

PySimpleGUIでラジオボタン要素のフォント・フォントサイズを指定する

PySimpleGUIでラジオボタン要素の文字色・背景色を指定する

PySimpleGUIでラジオボタン要素のパディングを指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月27日土曜日

WnckとPythonを使用して新しいウインドウがオープンするまで待機する

WnckとPythonを使用して新しいウインドウがオープンするまで待機するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行して、window-openedシグナルに対応する関数に関連付けます。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()

def opened(screen, window):
  print("window-opend:{}".format(window.get_name()))
  Gtk.main_quit()

screen.connect("window-opened", opened)
Gtk.main()

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでラジオボタン要素の文字色・背景色を指定する

PySimpleGUIでラジオボタン要素の文字色・背景色を指定するには、text_colorパラメータで文字色、background_colorパラメータで背景色を指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
radio_text_color.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Radio(text='選択肢1', group_id='A', text_color='#3366ee', background_color='#ffffcc') ],
    [sg.Radio(text='選択肢2', group_id='A', text_color='#3366ee', background_color='#ffffcc') ],
    [sg.Radio(text='選択肢3', group_id='A', text_color='#3366ee', background_color='#ffffcc') ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python radio_text_color.py

〇実行結果

関連情報

PySimpleGUIでラジオボタン要素の初期選択状態を設定する

PySimpleGUIでラジオボタン要素のフォント・フォントサイズを指定する

PySimpleGUIでラジオボタン要素の幅を指定する

PySimpleGUIでラジオボタン要素のパディングを指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月26日金曜日

WnckとPythonを使用してウインドウアプリケーション名を列挙する

WnckとPythonを使用してウインドウアプリケーション名を列挙するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_windows()メソッドで全ウインドウを取得します。
その後、各ウインドウのget_application()メソッドでアプリケーション情報を取得し、get_name()で名称取得します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
windows = screen.get_windows()
for window in windows:
  print(window.get_application().get_name())

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでラジオボタン要素の初期選択状態を設定する

PySimpleGUIでラジオボタン要素の初期選択状態を設定するには、defaultパラメータにTrue/Falseで指定します。
ラジオボタンのグループはgroup_idを同じ値に設定します。

サンプル実行手順

以下のファイルを保存して、実行します。
radio_group.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Radio(text='選択肢A-1', group_id='A', default=True)],
  [sg.Radio(text='選択肢A-2', group_id='A', default=False)],
  [sg.Radio(text='選択肢B-1', group_id='B', default=True)],
  [sg.Radio(text='選択肢B-2', group_id='B', default=False)],
  [sg.Radio(text='選択肢B-3', group_id='B', default=False)]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python radio_group.py

〇実行結果

関連情報

PySimpleGUIでラジオボタン要素のフォント・フォントサイズを指定する

PySimpleGUIでラジオボタン要素の幅を指定する

PySimpleGUIでラジオボタン要素の文字色・背景色を指定する

PySimpleGUIでラジオボタン要素のパディングを指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月25日木曜日

Raspberry Pi ZeroとGrove Base HAT for Raspberry Piと光センサーで、明るさを取得する

Raspberry Pi ZeroとGrove Base HAT for Raspberry Piと光センサーで、明るさを取得するには、以下の手順を実行します。

実装手順

1. 部品の用意と配線
以下の部品を用意して、下記回路図に基づいて接続します。

・Grove Base HAT for Raspberry Pi Zero
https://akizukidenshi.com/catalog/g/gM-13879/

・GROVE - 光センサ v1.2
https://www.switch-science.com/catalog/3284/

〇Raspberry Pi ZeroとGrove Base HAT for Raspberry Piと光センサーを接続した写真

※Grove HATのA0に光センサーを接続します。

2. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

3. Seeed-grove.pyモジュールがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、Seeed-grove.py用の仮想環境を作成します。
mkdir -p ~/grovepi

cd ~/grovepi

pipenv --python 3

pipenv install Seeed-grove.py==0.3

pipenv shell

4. 明るさを取得するプログラムの作成と実行
以下のプログラムを保存して実行します

grove_light_sensor.py
from grove.grove_light_sensor_v1_2 import GroveLightSensor
import time

PIN_A0 = 0
sensor = GroveLightSensor(PIN_A0)
while True:
  print("light: {}".format(sensor.light))
  time.sleep(1)

以下のコマンドでプログラムを実行して明るさを表示します
python3 grove_light_sensor.py

関連情報

・基板を見えないようにするためにGrove Light Sensorのケースを作成する場合は以下の記事を参照してください。
OpenSCADとUltimaker Curaを使用してGrove Light Sensorのケースを作成する

Groveデバイスまとめ

WnckとPythonを使用して最小化しているウインドウを最小化解除する

WnckとPythonを使用して最小化しているウインドウを最小化解除するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_windows()メソッドで全ウインドウを取得します。
その後、各ウインドウのis_minimized()メソッドで最初化判定を行い、unminimize()で最小化解除します。また、Raspberry PiのOpenboxでは、現在のデスクトップ画面(ワークスペース)でないと最小化解除できないようです。

サンプルコード

以下のサンプルコードを保存・実行します。
import time
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
windows = screen.get_windows()
for window in windows:
  if window.is_minimized():
    window.unminimize(int(time.time()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでコンボボックス要素のフォント・フォントサイズを指定する

PySimpleGUIでコンボボックス要素のフォント・フォントサイズを指定するには、fontパラメータにフォント名とサイズをタプルで指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
combo_font.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
values = ['項目1', '項目2', '項目3']
layout = [[sg.Combo(values, font=('Noto Serif CJK JP', 20),
  default_value="入力してください。", size=(20,1)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python combo_font.py

〇実行結果

関連情報

PySimpleGUIでコンボボックス要素の文字色・背景色を指定する

PySimpleGUIでコンボボックス要素の初期値を指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月24日水曜日

WnckとPythonを使用して全ウインドウを最小化する

WnckとPythonを使用して全ウインドウを最小化するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_windows()メソッドで全ウインドウを取得します。
その後、各ウインドウのminimize()メソッドで最小化します。また、Raspberry PiのOpenboxでは、現在のデスクトップ画面(ワークスペース)でないと最小化できないようです。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
windows = screen.get_windows()
for window in windows:
  window.minimize()

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでコンボボックス要素の文字色・背景色を指定する

PySimpleGUIでコンボボックス要素の文字色・背景色を指定するには、text_colorパラメータで文字色、background_colorパラメータで背景色を指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
combo_text_color.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
values = ['項目1', '項目2', '項目3']
layout = [[sg.Combo(values, text_color='#3366ee', background_color='#ffffcc',
  default_value="入力してください。", size=(20,1)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python combo_text_color.py

〇実行結果

関連情報

PySimpleGUIでコンボボックス要素のフォント・フォントサイズを指定する

PySimpleGUIでコンボボックス要素の初期値を指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月23日火曜日

WnckとPythonを使用して全ウインドウのプロセスIDを取得する

WnckとPythonを使用して全ウインドウのプロセスIDを取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_windows()メソッドで全ウインドウを取得します。
その後、各ウインドウのget_pid()メソッドでプロセスIDを取得します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
windows = screen.get_windows()
for window in windows:
  print("{} - {}".format(window.get_pid(),window.get_name()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでコンボボックス要素の初期値を指定する

PySimpleGUIでコンボボックス要素の初期値を指定するには、default_valueパラメータを指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
combo_default.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
values = ['項目1', '項目2', '項目3']
layout = [[sg.Combo(values, default_value="入力してください。", size=(20,1)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python combo_default.py

〇実行結果

関連情報

PySimpleGUIでコンボボックス要素のフォント・フォントサイズを指定する

PySimpleGUIでコンボボックス要素の文字色・背景色を指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月22日月曜日

WnckとPythonを使用して全ウインドウの座標・幅・高さを取得する

WnckとPythonを使用して全ウインドウの座標・幅・高さを取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_windows()メソッドで全ウインドウを取得します。
その後、各ウインドウのget_geometry()メソッドで座標(xpとyp)・幅(widthp)・高さ(heightp)を取得します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
windows = screen.get_windows()
for window in windows:
  print("{} - {}".format(window.get_geometry(),window.get_name()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでチェックボックス要素の文字色・背景色を指定する

PySimpleGUIでチェックボックス要素の文字色・背景色を指定するには、text_colorパラメータで文字色、background_colorパラメータで背景色を指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
checkbox_text_color.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Checkbox("項目1", text_color='#3366ee', background_color='#ffffcc') ],
  [sg.Checkbox("項目2", text_color='#ee9977', background_color='#ffffcc',)]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python checkbox_text_color.py

〇実行結果

関連情報

PySimpleGUIでチェックボックス要素のフォント・フォントサイズを指定する

PySimpleGUIでチェックボックス要素の初期値を指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月21日日曜日

python用音響効果モジュールpysndfxのまとめ

pythonとpysndfxで音楽ファイルに様々な効果をつける事ができます。

スピードなどの変更

音楽ファイルのスピードやピッチを変更するには以下の記事を参照してください。

pythonとpysndfxでスピードを変更する

pythonとpysndfxでピッチを変更する

pythonとpysndfxでテンポを変更する

音響効果

残響効果やエコーの効果などをつけるには、以下の記事を参照してください。

pythonとpysndfxで音楽ファイルに残響効果をつける(pipenv版)
pythonとpysndfxで音楽ファイルに残響効果をつける(poetry版)

pythonとpysndfxでコダマのように音を繰り返す効果をつける

pythonとpysndfxで音が歪んだ状態に加工する

pythonとpysndfxで音楽ファイルの内容を反転する

pythonとpysndfxでノーマライズ(音量正規化)の効果をつける

特定周波数に対するフィルター

指定した周波数に対するフィルターには以下の様なものがあります。

pythonとpysndfxでハイパスフィルターの効果をつける

pythonとpysndfxでローパスフィルターの効果をつける

pythonとpysndfxでハイシェルフフィルターの効果をつける

pythonとpysndfxでローシェルフフィルターの効果をつける

pythonとpysndfxでバンドリジェクトフィルター効果をつける

pythonとpysndfxでバンドパスフィルター効果をつける

pythonとpysndfxでイコライザー効果をつける

WnckとPythonを使用して最大化したウインドウ一覧を取得する

WnckとPythonを使用して最大化したウインドウ一覧を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_windows()メソッドで全ウインドウを取得します。
その後、各ウインドウのis_maximized()メソッドで最大化されているか判定します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
windows = screen.get_windows()
for window in windows:
  if window.is_maximized():
    print(window.get_name())

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでチェックボックス要素のフォント・フォントサイズを指定する

PySimpleGUIでチェックボックス要素のフォント・フォントサイズを指定するには、fontパラメータにフォント名とサイズをタプルで指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
checkbox_font.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Checkbox("項目1", font=('Noto Serif CJK JP',22)) ],
  [sg.Checkbox("項目2", font=('Noto Serif CJK JP',22))]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python checkbox_font.py

〇実行結果

関連情報

PySimpleGUIでチェックボックス要素の文字色・背景色を指定する

PySimpleGUIでチェックボックス要素の初期値を指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月20日土曜日

WnckとPythonを使用して最小化したウインドウ一覧を取得する

WnckとPythonを使用して最小化したウインドウ一覧を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_windows()メソッドで全ウインドウを取得します。
その後、各ウインドウのis_minimized()メソッドで最小化されているか判定します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
windows = screen.get_windows()
for window in windows:
  if window.is_minimized():
    print(window.get_name())

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

Raspberry Pi ZeroとBME680センサーで、温度・気圧・湿度・ガスの情報を返すREST APIを作成する

Raspberry Pi ZeroとBME680センサーで、温度・気圧・湿度・ガスの情報を返すREST APIを作成するには、以下の手順を実行します。

※Raspberry Pi ZeroとBME680の接続は「Raspberry Pi ZeroにBME680を接続して、温度・気圧・湿度・ガスの値を取得する」を参照してください。

開発手順

1. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. bme680モジュールとflaskがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、bme680とflask用の仮想環境を作成します。
mkdir -p ~/bme680_flask

cd ~/bme680_flask

pipenv --python 3

pipenv install bme680 flask smbus

pipenv shell

3. Flask REST APIアプリケーションの作成
/bme680にアクセスされたとき、温度・気圧・湿度・ガスの情報を取得してJSONで返すコードを実装します。

app.py
from flask import Flask, jsonify, request
import bme680

try:
    sensor = bme680.BME680(bme680.I2C_ADDR_PRIMARY)
except IOError:
    sensor = bme680.BME680(bme680.I2C_ADDR_SECONDARY)

sensor.set_humidity_oversample(bme680.OS_2X)
sensor.set_pressure_oversample(bme680.OS_4X)
sensor.set_temperature_oversample(bme680.OS_8X)
sensor.set_filter(bme680.FILTER_SIZE_3)
sensor.set_gas_status(bme680.ENABLE_GAS_MEAS)

sensor.set_gas_heater_temperature(320)
sensor.set_gas_heater_duration(150)
sensor.select_gas_heater_profile(0)

app = Flask(__name__)

@app.route('/bme680')
def get_bme680():
  data = {}
  while True:
    if sensor.get_sensor_data():
      if sensor.data.gas_resistance:
        data = {"temperature":sensor.data.temperature, "pressure":sensor.data.pressure, "humidity":sensor.data.humidity, "gas":sensor.data.gas_resistance}
      break
  return jsonify(data)

4. 実行
Flaskを実行するには、以下のコマンドを実行します。
export FLASK_APP=app.py

flask run -h 0.0.0.0

次に、ブラウザから以下のアドレスにアクセスして、温度・気圧・湿度・ガスの情報をjsonで返すことを確認します。
http://<Raspberry Piのホスト名またはIPアドレス>:5000/bme680

関連情報

・bme680-pythonのgithubリポジトリ
https://github.com/pimoroni/bme680-python

PySimpleGUIでチェックボックス要素の初期値を指定する

PySimpleGUIでチェックボックス要素の初期値を指定するには、defaultパラメータを指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
checkbox_default.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Checkbox("項目1", default=True) ],
  [sg.Checkbox("項目2", default=False)]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python checkbox_default.py

〇実行結果

関連情報

PySimpleGUIでチェックボックス要素の文字色・背景色を指定する

PySimpleGUIでチェックボックス要素のフォント・フォントサイズを指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月19日金曜日

WnckとPythonを使用してスクリーンのウインドウ一覧を取得する

WnckとPythonを使用してスクリーンのウインドウ一覧を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_windows()メソッドを使用します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
windows = screen.get_windows()
for window in windows:
  print(window.get_name())

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

Raspberry Pi Zeroに接続したBME680センサーのデータをPostgreSQLに保存する

BME680で取得したの温度・気圧・湿度・ガスのデータをPostgreSQLに保存するには以下の手順を実行します。
Raspberry Pi ZeroとBME680の接続は「Raspberry Pi ZeroにBME680を接続して、温度・気圧・湿度・ガスの値を取得する」を参照してください。

実行手順

1. データ保持用のテーブル作成
PostgreSQL側でデータ保持用のテーブルをあらかじめ作成しておきます。テーブル名称は適宜変更してください。

create table test_sensor
(
  device_name varchar(30) not null,
  data_ts timestamp not null,
  temperature float,
  atmospheric_pressure float,
  humidity float,
  gas float,
  constraint pk_test_sensor primary key (device_name, data_ts)
);

2. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

3. bme680とpsycopg2モジュールがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、bme680用の仮想環境を作成します。
sudo apt-get -y install libpq-dev

mkdir -p ~/bme680_pg

cd ~/bme680_pg

pipenv --python 3

pipenv install bme680 psycopg2-binary smbus

pipenv shell

4. センサーデータ取得・記録プログラム
以下のプログラムを保存します。

record_bme680.py
import os
import psycopg2
import psycopg2.extras
import bme680

try:
    sensor = bme680.BME680(bme680.I2C_ADDR_PRIMARY)
except IOError:
    sensor = bme680.BME680(bme680.I2C_ADDR_SECONDARY)

sensor.set_humidity_oversample(bme680.OS_2X)
sensor.set_pressure_oversample(bme680.OS_4X)
sensor.set_temperature_oversample(bme680.OS_8X)
sensor.set_filter(bme680.FILTER_SIZE_3)
sensor.set_gas_status(bme680.ENABLE_GAS_MEAS)

sensor.set_gas_heater_temperature(320)
sensor.set_gas_heater_duration(150)
sensor.select_gas_heater_profile(0)

while True:
  if sensor.get_sensor_data():
    print("temperature:{0:.2f}".format(sensor.data.temperature))
    print("atmospheric_pressure:{0:.2f}".format(sensor.data.pressure))
    print("humidity:{0:.3f}".format(sensor.data.humidity))

    if sensor.data.gas_resistance:
      print("gas: {} Ohms".format(sensor.data.gas_resistance))

      device_name = 'test device'
      sql = """insert into test_sensor values (%s, current_timestamp, %s, %s, %s, %s)"""

      conn = psycopg2.connect(host=os.environ['PG_HOST'], port=os.environ["PG_PORT"], database=os.environ['PG_DB'], user=os.environ['PG_USER'], password=os.environ['PG_PASS'])
      with conn.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur:
        cur.execute(sql , (device_name, sensor.data.temperature, sensor.data.pressure, sensor.data.humidity, sensor.data.gas_resistance))
      conn.commit()
      break

5. プログラムの実行
データベースの接続情報を環境変数に設定してrecord_bme860.pyを実行します。
export PG_HOST=データベースホスト名またはIP
export PG_PORT=データベースのポート番号(※通常5432)
export PG_DB=データベース名
export PG_USER=ユーザ名
export PG_PASS=パスワード

python record_bme680.py

関連情報

・bme680-pythonのgithubリポジトリ
https://github.com/pimoroni/bme680-python

PySimpleGUIで複数行入力フィールド要素のパディングを指定する

PySimpleGUIで複数行入力フィールド要素のパディングを指定するには、padパラメータを指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
multiline_pad.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
left=32
right=16
top=8
bottom=4
layout = [[sg.Multiline(default_text="サンプル\nデータ", pad=((left,right),(top,bottom)), size=(10,3)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python multiline_pad.py

〇実行結果

関連情報

PySimpleGUIで複数行入力フィールド要素のフォント・フォントサイズを指定する

PySimpleGUIで複数行入力フィールド要素の文字色・背景色を指定する

PySimpleGUIで複数行入力フィールド要素の幅・高さを指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月18日木曜日

WnckとPythonを使用してアクティブなワークスペースを切り替える

WnckとPythonを使用してアクティブなワークスペースを切り替えるには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行して、アクティブなworkspaceを取得してからactivate()メソッドを使用します。
サンプルでは、0番目のワークスペースに切り替えています。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
import time
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
workspace = screen.get_workspace(0)
workspace.activate(int(time.time()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

Raspberry Pi ZeroにBME680を接続して、温度・気圧・湿度・ガスの値を取得する

Raspberry Pi ZeroにBME680を接続して、温度・気圧・湿度・ガスの値を取得するには、以下の手順を実行します。
BME680は秋月電子さんの「BME680使用 温湿度・気圧・ガスセンサモジュールキット」を使用しました。
https://akizukidenshi.com/catalog/g/gK-14469/

セットアップ手順

1. I2Cの有効化
1.1.raspi-configを実行して、I2Cを有効化します。
sudo raspi-config

1.2.上下キーで3 Interface Optionsに移動して、リターンキーを押します

1.3.上下キーでP5 I2Cに移動して、リターンキーを押します

1.4.左右キーでYesに移動して、リターンキーを押します

1.5.リターンキーを押します

1.6.Tabキーを1回押してから、左右キーで「Finish」に移動して、リターンキーを押します

2. 配線
一度でシャットダウンしてから、Raspberry Pi ZeroとBME680を接続します

SDカードスロット上にして下図ピンを参考に、以下の様に接続します
Raspberry Pi 3.3Vピン(ピン1) -> BME680のVIN
Raspberry Pi GPIO 2/SDAピン(ピン3) -> BME680のSDA
Raspberry Pi GPIO 3/SCLピン(ピン5) -> BME680のSCL
Raspberry Pi Groundピン(ピン9) -> BME680のGND

3. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

4. bme680用の仮想環境作成
pipenvを使用する場合は以下のコマンドで、bme680用の仮想環境を作成します。
mkdir -p ~/bme680

cd ~/bme680

pipenv --python 3

pipenv install bme680 smbus

pipenv shell

5. サンプルの実行
wget https://github.com/pimoroni/bme680-python/raw/master/examples/read-all.py

python read-all.py
実行すると、温度・気圧・湿度・ガスの値が表示されます。Ctrl+Cで終了します。

関連情報

・BME680センサーのデータをデータベースに記録したい場合は、以下の記事を参照してください。
Raspberry Pi Zeroに接続したBME680センサーのデータをPostgreSQLに保存する

・BME680センサーのデータをREST APIで提供したい場合は、以下の記事を参照してください。
Raspberry Pi ZeroとBME680センサーで、温度・気圧・湿度・ガスの情報を返すREST APIを作成する

・bme680-pythonのgithubリポジトリ
https://github.com/pimoroni/bme680-python

・写真のRaspberry Piのケースは3Dプリンタで作成しました。
OpenSCADとUltimaker Curaを使用してRaspberry Pi Zero WHのケースを作成する

PySimpleGUIで複数行入力フィールド要素のフォント・フォントサイズを指定する

PySimpleGUIで複数行入力フィールド要素のフォント・フォントサイズを指定するには、fontパラメータにフォント名とサイズをタプルで指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
multiline_font.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Multiline(default_text="サンプル\nデータ", font=('Noto Serif CJK JP',22), size=(10,3)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python multiline_font.py

〇実行結果

関連情報

PySimpleGUIで複数行入力フィールド要素のパディングを指定する

PySimpleGUIで複数行入力フィールド要素の文字色・背景色を指定する

PySimpleGUIで複数行入力フィールド要素の幅・高さを指定する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年3月17日水曜日

WnckとPythonを使用してワークスペースのlayout位置を取得する

WnckとPythonを使用してワークスペースのlayout位置を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_layout_row()/get_layout_column()メソッドを使用します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
workspace = screen.get_active_workspace()
print("workspace layout(row,col):{}, {}".format(workspace.get_layout_row(), workspace.get_layout_column()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

MicroPythonを使用してmicro:bitに接続したGrove光センサーの値を取得・USBシリアルで送信する

micro:bitはMicroPythonでプログラミングする事もできます。micro:bitに接続した光センサーの値を取得しUSBシリアルで送信して、PCで受信するには、以下のプログラムを実行します。

〇Micro:bitに接続したGrove光センサー
P0/P14ポートに接続します。

光センサーの値を取得して、USBシリアル送信するMicroPythonプログラム

micro:bitとPCを接続して、Thonnyなどで以下のプログラムをmain.pyとして保存します。
from microbit import *

uart.init(115200)
display.show(Image.TRIANGLE)
while True:
    val = pin0.read_analog()
    uart.write("light sensor:" + str(val) + "\n")
    if button_a.is_pressed() and button_b.is_pressed():
        display.clear()
        uart.write("stop.\n")
        break
    sleep(1000)
uart.init(115200)

その他のPC側の受信設定などは「micro:bitのA/Bボタンの状態をMicroPythonを使用して取得・USBシリアルで送信する」の手順を参考にして設定します。

関連情報

・Thonnyに関する記事は、こちらを参照してください。

・Micro:bitに関する記事は、こちらを参照してください。

・Raspberry Pi ZeroとGrove Base HATを利用してGrove Light Sensorを接続する場合は、以下の記事を参照してください。
Raspberry Pi ZeroとGrove Base HAT for Raspberry Piと光センサーで、明るさを取得する

Groveデバイスまとめ

PySimpleGUIで複数行入力フィールド要素の文字色・背景色を指定する

PySimpleGUIで複数行入力フィールド要素の文字色・背景色を指定するには、text_colorパラメータで文字色、background_colorパラメータで背景色を指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
multiline_text_color.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Multiline(default_text="サンプル\nデータ", text_color='#3366ee', background_color='#ffffcc', size=(10,3)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python multiline_text_color.py

〇実行結果

関連情報

PySimpleGUIで複数行入力フィールド要素のパディングを指定する

PySimpleGUIで複数行入力フィールド要素のフォント・フォントサイズを指定する

PySimpleGUIで複数行入力フィールド要素の幅・高さを指定する

2021年3月16日火曜日

WnckとPythonを使用してワークスペース名を変更する

WnckとPythonを使用してワークスペース名を変更するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してchange_name()メソッドを使用します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
workspace = screen.get_active_workspace()
workspace.change_name("テストワークスペース")

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

MicroPythonを使用してmicro:bitに接続したGroveボタンの状態を取得・USBシリアルで送信する

micro:bitはMicroPythonでプログラミングする事もできます。micro:bitに接続したGroveボタンの状態を取得しUSBシリアルで送信して、PCで受信するには、以下のプログラムを実行します。

〇Micro:bitに接続したGroveボタン
P0/P14ポートに接続します。

Groveボタンの状態を取得して、USBシリアル送信するMicroPythonプログラム

micro:bitとPCを接続して、Thonnyなどで以下のプログラムをmain.pyとして保存します。
from microbit import *

uart.init(115200)
display.show(Image.TRIANGLE)
while True:
    val = pin0.read_digital()
    uart.write("grove button:" + (" pressed" if val == 1 else " not pressed" ) + "\n")
    if button_a.is_pressed() and button_b.is_pressed():
        display.clear()
        uart.write("stop.\n")
        break
    sleep(1000)
uart.init(115200)

その他のPC側の受信設定などは「micro:bitのA/Bボタンの状態をMicroPythonを使用して取得・USBシリアルで送信する」の手順を参考にして設定します。

関連情報

・Thonnyに関する記事は、こちらを参照してください。

・Micro:bitに関する記事は、こちらを参照してください。

Groveデバイスまとめ

PySimpleGUIで複数行入力フィールド要素の幅・高さを指定する

PySimpleGUIで複数行入力フィールド要素の幅・高さを指定するには、sizeパラメータをタプル(幅、高さ)で指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
multiline_size.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Multiline(default_text="サンプル\nデータ", size=(10,3)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python  multiline_size.py

〇実行結果

関連情報

PySimpleGUIで複数行入力フィールド要素のパディングを指定する

PySimpleGUIで複数行入力フィールド要素のフォント・フォントサイズを指定する

PySimpleGUIで複数行入力フィールド要素の文字色・背景色を指定する

2021年3月15日月曜日

WnckとPythonを使用してワークスペース名を取得する

WnckとPythonを使用してワークスペース名を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_name()メソッドを使用します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
workspace = screen.get_active_workspace()
print("workspace name:{}".format(workspace.get_name()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

MicroPythonを使用してmicro:bitに接続したタッチセンサーの値を取得・USBシリアルで送信する

micro:bitはMicroPythonでプログラミングする事もできます。micro:bitに接続したタッチセンサーの値を取得しUSBシリアルで送信して、PCで受信するには、以下のプログラムを実行します。

〇Micro:bitに接続したタッチセンサー
P0/P14ポートに接続します。

タッチセンサーの値を取得して、USBシリアル送信するMicroPythonプログラム

micro:bitとPCを接続して、Thonnyなどで以下のプログラムをmain.pyとして保存します。
from microbit import *

uart.init(115200)
display.show(Image.TRIANGLE)
while True:
    val = pin0.read_digital()
    uart.write("touch sensor:" + str(val) + "\n")
    if button_a.is_pressed() and button_b.is_pressed():
        display.clear()
        uart.write("stop.\n")
        break
    sleep(1000)
uart.init(115200)

その他のPC側の受信設定などは「micro:bitのA/Bボタンの状態をMicroPythonを使用して取得・USBシリアルで送信する」の手順を参考にして設定します。

関連情報

・Thonnyに関する記事は、こちらを参照してください。

・Micro:bitに関する記事は、こちらを参照してください。

PySimpleGUIでリストボックス要素の文字色・背景色を指定する

PySimpleGUIでリストボックス要素の文字色・背景色を指定するには、text_colorパラメータで文字色、background_colorパラメータで背景色を指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
listbox_text_color.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
values = ["項目1", "項目2", "項目3"]
layout = [[sg.Listbox(values, text_color='#3366ee', background_color='#ffffcc', size=(10,3)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python listbox_text_color.py

〇実行結果

関連情報

PySimpleGUIでリストボックス要素を単一選択可能モードに設定する

PySimpleGUIでリストボックス要素を複数選択可能モードに設定する

PySimpleGUIでリストボックス要素のフォント・フォントサイズを指定する

PySimpleGUIで単一選択リストボックスで選択された項目を別のテキスト要素に表示する

2021年3月14日日曜日

WnckとPythonを使用してワークスペース番号を取得する

WnckとPythonを使用してワークスペース番号を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_number()メソッドを使用します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
workspace = screen.get_active_workspace()
print("workspace number:{}".format(workspace.get_number()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

MicroPythonを使用してmicro:bitに接続したGrove Rotary Angleセンサーの値を取得・USBシリアルで送信する

micro:bitはMicroPythonでプログラミングする事もできます。micro:bitに接続したGrove Rotary Angleセンサーの値を取得しUSBシリアルで送信して、PCで受信するには、以下のプログラムを実行します。

〇Micro:bitに接続したGrove Rotary Angleセンサー
P0/P14ポートに接続します。

Grove Rotary Angleセンサーの値を取得して、USBシリアル送信するMicroPythonプログラム

micro:bitとPCを接続して、Thonnyなどで以下のプログラムをmain.pyとして保存します。
from microbit import *

uart.init(115200)
display.show(Image.TRIANGLE)
while True:
    val = pin0.read_analog()
    uart.write("rotary angle sensor:" + str(val) + "\n")
    if button_a.is_pressed() and button_b.is_pressed():
        display.clear()
        uart.write("stop.\n")
        break
    sleep(1000)
uart.init(115200)

その他のPC側の受信設定などは「micro:bitのA/Bボタンの状態をMicroPythonを使用して取得・USBシリアルで送信する」の手順を参考にして設定します。

関連情報

・Thonnyに関する記事は、こちらを参照してください。

・Micro:bitに関する記事は、こちらを参照してください。

PySimpleGUIでリストボックス要素のフォント・フォントサイズを指定する

PySimpleGUIでリストボックス要素のフォント・フォントサイズを指定するには、fontパラメータでフォント名とサイズを指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
listbox_font.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
values = ["項目1", "項目2", "項目3"]
layout = [[sg.Listbox(values, font=('Noto Serif CJK JP',20), size=(10,3)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python listbox_font.py

〇実行結果

関連情報

PySimpleGUIでリストボックス要素を単一選択可能モードに設定する

PySimpleGUIでリストボックス要素を複数選択可能モードに設定する

PySimpleGUIでリストボックス要素の文字色・背景色を指定する

PySimpleGUIで単一選択リストボックスで選択された項目を別のテキスト要素に表示する

2021年3月13日土曜日

WnckとPythonを使用してデスクトップ画面数(ワークスペース数)を取得する

WnckとPythonを使用してデスクトップ画面数(ワークスペース数)を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後、force_updateを実行してget_workspace_count()メソッドを使用します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
print("{}".format(screen.get_workspace_count()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

Nextcloudにホワイトボード生成機能を追加するWhiteboardアプリを追加する

Nextcloudにホワイトボード生成機能を追加するWhiteboardアプリをインストールするには、以下の手順を実行します。

ホワイトボード生成機能を追加するWhiteboardアプリのインストール手順

1. ユーザメニューから「アプリ」を選択します

2. 左側のカテゴリから「ファイル」を選択して、Whiteboardアプリの「ダウンロードして有効にする」をクリックします。
2021/09/28追記:「未テストのアプリを有効にする」と表示されますが、Nextcloud 22でも動作するようです。

3. ファイルアプリの「+」メニューの「New whiteboard」をクリックすると、新しいホワイトボードを作成します。

4. ホワイトボードに図やテキストを記入して保存する事が出来ます。

関連情報

・Nextcloudに関する他の情報は以下のまとめページを参照してください。
Nextcloudのまとめ

PySimpleGUIでリストボックス要素を複数選択可能モードに設定する

PySimpleGUIでリストボックス要素を複数選択可能モードに設定するには、select_modeパラメータにLISTBOX_SELECT_MODE_MULTIPLEを指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
listbox_select_mode_multiple.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
values = ["項目1", "項目2", "項目3"]
layout = [[sg.Listbox(values, select_mode=sg.LISTBOX_SELECT_MODE_MULTIPLE, size=(10,3)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python listbox_select_mode_multiple.py

〇実行結果

関連情報

PySimpleGUIでリストボックス要素を単一選択可能モードに設定する

PySimpleGUIでリストボックス要素のフォント・フォントサイズを指定する

PySimpleGUIでリストボックス要素の文字色・背景色を指定する

PySimpleGUIで単一選択リストボックスで選択された項目を別のテキスト要素に表示する

2021年3月12日金曜日

WnckとPythonを使用してスクリーンのウインドウマネージャ名を取得する

WnckとPythonを使用してスクリーンのウインドウマネージャ名を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後にforce_updateを実行してget_window_manager_name()メソッドを使用します。

サンプルコード

以下のサンプルコードを保存・実行します。Ubuntu 20.04 DesktopではGnome Shell、Raspberry PiではOpenboxが表示されます。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()
screen.force_update()
print("window manager name:{}".format(screen.get_window_manager_name()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIでリストボックス要素を単一選択可能モードに設定する

PySimpleGUIでリストボックス要素を単一選択可能モードに設定するには、select_modeパラメータにLISTBOX_SELECT_MODE_SINGLEを指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
listbox_select_mode_single.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
values = ["項目1", "項目2", "項目3"]
layout = [[sg.Listbox(values, select_mode=sg.LISTBOX_SELECT_MODE_SINGLE, size=(10,3)) ]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python listbox_select_mode_single.py

〇実行結果

関連情報

PySimpleGUIでリストボックス要素を複数選択可能モードに設定する

PySimpleGUIでリストボックス要素のフォント・フォントサイズを指定する

PySimpleGUIでリストボックス要素の文字色・背景色を指定する

PySimpleGUIで単一選択リストボックスで選択された項目を別のテキスト要素に表示する

Nextcloudにチェックサム生成機能を追加するChecksumアプリを追加する

Nextcloudにチェックサム生成機能を追加するChecksumアプリをインストールするには、以下の手順を実行します。

チェックサム生成機能を追加するChecksumアプリのインストール手順

1. ユーザメニューから「アプリ」を選択します

2. 左側のカテゴリから「ファイル」を選択して、Checksumアプリの「ダウンロードして有効にする」をクリックします。

3. ファイルの詳細に「Checksum」タブが追加されます。選択したアルゴリズムでチェックサムが生成されます

2021/09/28追記:Nextcloud 22でも動作します。

関連情報

・Nextcloudに関する他の情報は以下のまとめページを参照してください。
Nextcloudのまとめ

2021年3月11日木曜日

WnckとPythonを使用してスクリーンの解像度を取得する

WnckとPythonを使用してスクリーンの解像度を取得するには、以下のサンプルコードのようにデフォルトスクリーンを取得後get_width()/get_height()メソッドを使用します。

サンプルコード

以下のサンプルコードを保存・実行します。
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck

screen = Wnck.Screen.get_default()

print("screen size(width * height):{}x{}".format(screen.get_width(), screen.get_height()))

・動作確認環境
Ubuntu 20.04/Raspberry Pi OS(Raspbian Buster)

Wnckのインストール方法

以下のコマンドを実行します。
sudo apt-get -y install python3-gi gir1.2-wnck-3.0

関連項目

WnckとPythonでのワークスペース・ウインドウの情報取得・操作まとめ

PySimpleGUIで入力フィールド要素を左寄せ・中央寄せ・右寄せに設定する

PySimpleGUIで入力フィールド要素を左寄せ・中央寄せ・右寄せに設定するには、justificationパラメータを指定します。
justificationパラメータには文字列で、left, right, centerを指定します。

サンプル実行手順

以下のファイルを保存して、実行します。
input_justification.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
layout = [[sg.Input(default_text='12345', justification='right' )]]

window = sg.Window('サンプル', layout)
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

実行コマンド
python input_justification.py

〇実行結果

関連情報

PySimpleGUIで入力フィールド要素の初期値を指定する

PySimpleGUIで入力フィールドのフォント・フォントサイズを指定する

PySimpleGUIで入力フィールドの文字色と背景色を指定する

PySimpleGUIでパスワード入力フィールドのマスク文字を指定する

PySimpleGUIで入力フィールド要素の幅を指定する

PySimpleGUIで入力フィールド要素のパディングを指定する

PySimpleGUIで入力フィールド要素を読取専用に設定する