サイトアイコン アマチュア無線局JS2IIU

FT8 コールサイン表示アプリ(Python版)

各局皆様、こんにちは。アマチュア無線局、JS2IIUです。

以前の記事(FT8 コールサイン表示ツール)でFT8交信中に、交信相手のコールサインを見やすく表示する自作のアプリを紹介しました。また、こちらの記事(FT8 コールサイン表示ツール Twitter フォロワーさん表示機能)で、フォロワーさんかどうかの表示もできるようにしました。

交信相手を大きく表示することに加えて、B4か?(過去に交信したことがある局か)、Twitterのフォロワーさんかを一目で確認できるアプリをゼロから作り直しました。前回はVisual Basicで作りましたが、今回はPythonアプリにしました。

アプリの概要

コールサインのフォントが黒の場合は、初めて交信する局。B4の局は赤色になります。コールサインの下にTwitter Follower = Yesとなっている場合は、Twitterのフォロアーさん。フォロアーさんでない場合は文字が黒でTwitter Follower = No と表示されます。

Pythonプログラムの部品

クリップボードの読み出し(Pyperclip)

Pythonからクリップボードに入っているデータを読み出すにはPyperclipを使います。VSCodeで表示されたヘルプを抜粋します。

(module) pyperclip
Pyperclip

A cross-platform clipboard module for Python, with copy & paste functions for plain text. By Al Sweigart al@inventwithpython.com BSD License

Usage:
import pyperclip pyperclip.copy(‘The text to be copied to the clipboard.’) spam = pyperclip.paste()

if not pyperclip.is_available():
print(“Copy functionality unavailable!”)

VSCodeで表示されたポップアップヘルプより抜粋

クリップボードにあるデータを取得する方法です

import pyperclip
s = pyperclip.paste()

なお、Pyperclipが扱えるのはテキストのみ。上のコードの例では、変数sは必ず文字列型となります。

FT8の交信をしている最中にほかのアプリで作業する場合があると思います。クリップボードにJTDX, WSJTからコピーされたコールサイン以外の情報が入った場合も文字列を読み出してしまいます。文字列がある程度長いものはコールサインではないと判断してアプリのウィンドウに表示しないような処理を入れています。

iniファイルの取り扱い(Configparser)

今回はプログラム配布を想定して、配布後に読み込むCSVファイルを任意に指定できるようにするために、ファイル名をiniファイルに書けるようにしました。

iniファイル

[files]
b4csv = ./B4Call.csv
followercsv = ./follower.csv

[window]
loc_x = 651
loc_y = 362

iniファイルを簡単に扱えるようにするためのConfigparserモジュールを使っています。

iniファイルの作成、上書き

import configparser
config = configparser.ConfigParser()
config['files'] = {
    'b4csv':    './B4Call.csv',
    'followercsv':  './follower.csv'
}
config['window'] = {
    'loc_x':    651,
    'loc_y':    362
}

with open('CallLookup.ini', 'w') as configfile:
    config.write(configfile)

iniファイルを読み込み、値を変数に格納するにはconfig.get()を使います。

import configparser
config = configparser.ConfigParser()
config.read('CallLookup.ini')
strB4csv_file = config.get('files', 'b4csv')

tkinterウィンドウの位置(geometry)

tkinterのウィンドウサイズはgeometry(‘width x height’)で指定します。

import tkinter
root = tkinter.Tk()
root.geometry('800x600')
root.mainloop()

ディスプレイ全体の中のどこに表示するかを指定する場合は以下の例のようにします。

import tkinter
root = tkinter.Tk()
root.geometry('800x600+200+450')
root.mainloop()

ウィンドウは自由に移動させることができます。現在のウィンドウ位置を取得するには、以下の例のようにします。LocationString'800x600+200+450'のような文字列が格納されます。

LocationString = root.geometry()

‘800×600+200+450’という文字列から、ウィンドウ位置座標を取り出す簡単な方法を紹介します。タプルsettingValueに4つの数字(文字列)が4つの要素として格納されます。

import re
settingValue = re.findall('[0-9]+', LocationString)
window_loc_x = settingValue[2]
window_loc_y = settingValue[3]

参考

Pyperclip関連

Python, pyperclipでクリップボードを操作(コピー、ペースト、監視)https://note.nkmk.me/python-pyperclip-usage/

Python, pyperclipでクリップボードを操作(コピー、ペースト、監視) | note.nkmk.me
Pythonでクリップボードに文字列(テキスト)をコピーしたりクリップボードから文字列をペースト(取得)したりするには、pyperclipを使う。クリップボードが更新されたときに文字列を取得する監視処理も可能。 pype ...

Configparser関連

configparser — 設定ファイルのパーサー
https://docs.python.org/ja/3/library/configparser.html

設定ファイル
https://www.python-izm.com/advanced/config_parser/

configparser --- 設定ファイルのパーサー
ソースコード: Lib/configparser.py このモジュールは、 Microsoft Windows の INI ファイルに似た構造を持ったベーシックな設定用言語を実装した ConfigParser クラスを提供します。このクラスを使ってユーザーが簡単にカスタマイズできる Python プ...
設定ファイル
Pythonにはとても便利な設定ファイル読み書き機能があります。決められた書式に従って記述することで、容易に設定値を得ることができます。設定ファイルの読み込みWindowsのiniファイルのような構造で保存します。まずは設定ファイルそのもの

tkinter関連

【Python】tkinter: 画面のサイズ・位置・最大化表示の設定(geometryメソッド)
https://office54.net/python/tkinter/screen-size

Python(Tkinter)でウィンドウを表示するための基本
https://original-game.com/basics-of-creating-windows-with-python/

【Python】tkinter: 画面のサイズ・位置・最大化表示の設定(geometryメソッド) | OFFICE54
tkinterで一番最初に行うメインウィンドウの作成について詳しく解説していきます。tkinterではメインウィンドウのサイズを設定できるだけじゃなくて、メインウィンドウの起動時の位置や画面いっぱいに表示される方法(最大化表示)などもあります。
Python(Tkinter)でウィンドウを表示するための基本
ゲームなどのアプリを作成したいとき、まず、ウィンドウを表示する必要があります。今回は、Python(Tkinter)を使って、ウィンドウを表示する方法と、その設定を変える方法を紹介します。

最後まで読んでいただき有難うございました。73

モバイルバージョンを終了