ryotankの備考録日記

趣味の電子工作についての備考録などなど

回路草案入力フォームその8

sg.Inputをenable_events引数で設定してイベントとして処理するのが前提

文字コードutf-8エンコードするように変換して
再度動作確認する

以前、sg.input()で入力された文字列をlistという変数に
格納したが

その時にエンコードを指定すればいいと思い立ったので
コード化

list2 = (sg.Input().encode('utf-8'))


とするとどうなるのか試してみる

	#保存するリスト
	list2 = (sg.Input().encode('utf-8'))

	#書き出し処理
	joblib.dump(list2, "test_temp2.txt", compress=3)

#終了処理
window.close()

こんな感じになるが・・・
動作確認は後日するはず・・・

回路草案入力フォームその9

フォームのクリアボタン実装が実装できた
まだフォームの最初のクリアボタンのみしか確認できていない・・・

import PySimpleGUI as sg
from PySimpleGUI import TITLE_LOCATION_TOP, InputText

sg.theme('LightGreen3')

#分類分けFrame
L1 = [
	[sg.Radio('モジュール基板', group_id='g1', font=('小塚ゴシック', 15))],
	[sg.Radio('試作基板', group_id='g1', font=('小塚ゴシック', 15))],
	[sg.Radio('ホビー用基板', group_id='g1', default=True , font=('小塚ゴシック', 15))],
	[sg.Radio('実験基板', group_id='g1', font=('小塚ゴシック', 15))],
	[sg.Radio('書き込みアダプター', group_id='g1', font=('小塚ゴシック', 15))]
]

main_layout =[
	[sg.Text('入力フォーム(1/3)', font=('小塚ゴシックpro',14))],
	[sg.Text('回路CADの名前', font=('小塚ゴシックpro',16)), sg.InputText(pad=((0,0),(20,20)), key='Incad')], #1行目
	[sg.Text('目的',font=('小塚ゴシックpro',16)), sg.InputText(pad=((0,0),(40,40)), key='InPurpose')], #2行目
	[sg.Frame('分類分け', L1, title_color='Blue', font=('小塚ゴシック', 20), title_location=TITLE_LOCATION_TOP,
	 pad=((150,0),(15,35)), border_width=4)], #3行目
	[sg.T(' ' *6), sg.Button('一時保存',size=(10,2), font=('小塚ゴシック', 15), key='update', button_color='blue'), #薄い青
	 sg.T(' ' *8), sg.Button('クリア',size=(10,2), font=('小塚ゴシック', 15), key='-Clear-', button_color='blue'),
	 sg.T(' ' *6), sg.Button('次へ移動', size=(10,2), font=('小塚ゴシック', 15), key='-First-',
	 button_color='red')] #4行目
]

main_window = sg.Window('回路草案入力フォーム クリアボタン実装動作確認その1', layout=main_layout, size=(530,540))

#イベントループ
while True :
main_event, main_values= main_window.read() #メインウインドウの入力待ち(イベント待ち)
#clear,{'Incad': Incadの入力値, }
 if main_event is None:
      break
  elif main_event == '-Clear-': #クリアボタンが押されたら
    #main_windowの入力項目を空にする
        main_window['Incad'].update("")
	main_window['InPurpose'].update("")

#終了処理
main_window.close()

そこで
・フォーム(2/3)での入力項目
基板の英名と基板名、部品構成

・フォーム(3/3)での入力項目
予算金額と作成年月日に分けて考える

InputTextの所にkeyを設定してイベントを発生させる
基板名ならkey名を'-Board name-'

基板英名ならkey名を'-Board English name-'

部品構成ならkey名を'-Parts composition-'

予算金額ならkey名を'-Budget amount-'

作成年月日ならkey名を'-Date of creation-'とする

フォームごとに入力項目イベントを分ける
sub_windowはフォーム(2/3)の事なら

 elif sub_window == '-Clear-':  #「クリア」が押されたら
	#sub_windowの入力項目を空にする
	sub_window['-Board name-'].update("")  #基板名を空に
	sub_window['-Board English name-'].update("")  #基板英名を空に
        sub_window['-Parts composition-'].update("")  #部品構成を空に


sub2_windowはフォーム(3/3)の事なら

 elif sub2_window == '-Clear-':  #「クリア」が押されたら
	#sub2_windowの入力項目を空にする
	sub2_window['-Budget amount-'].update("")  #予算金額を空に
	sub2_window['-Date of creation-'].update("")  #作成年月日を空に
       

という風になり、これが実行されるか
動作確認を後日行う

回路草案入力フォームその7

フォームに沿って各項目を入力していくには以下の事が出来るのが前提になる
0.sg.Inputをenable_events引数で設定してイベントとして処理する

1.取りあえずsg.Inputで入力されたものをリスト化

2.リスト化したものをjoblibで書き出し処理をする

これをコード化して動作確認をしてみた

import PySimpleGUI as sg
import sys #システムパラメータに関する関数を含んだモジュール
sys.setrecursionlimit(10000) #エラー回避
import joblib

layout = [
		sg.Text('作成目的', font=16),
                sg.Input(size=(20,3), enable_events=True)]



window = sg.Window('入力された文字列をtxtファイルにして書きだす', layout)

while True:
    event, values = window.read()

    if event is None:
       break

    #保存するリスト
    list = sg.Input()

    #書き出し処理
    joblib.dump(list, "test_temp.txt", compress=3)

#終了処理
window.close()

ただ保存されたファイルの内容は文字コードUnicode
保存された為、人間が読めるようなものでは無かった・・・・

  • 保存されたtxtファイル名:test_temp1.txt
  • 書かれた内容:x^eRヘoモ0•/ャk;コ獷粤ツ・擁••ホャ」ィDdQ崔ムr笳ト,ア#ヌ゙(メ$ク 酢テ・•yNC・滿鉐
  • 実際に入力した内容:daffw

今度は文字コードutf-8エンコードするように変換して
再度動作確認する

回路草案入力フォームその5

ここでは「joblib.dump」を使ったリストの書き出しと「joblib.load」を使った読み込みについて解説します。

import sys #システムパラメータに関する関数を含んだモジュール
sys.setrecursionlimit(10000)#エラー回避
import joblib
#保存するリスト
test_list=["test","name","job"]
#書き出し処理
joblib.dump(test_list, "temp.txt",compress=3)

最初に「RuntimeError: maximum recursion depth exceeded」のエラーを回避するために
再帰処理の上限を増やしています。

compress=3

では、圧縮度を設定しています。なお3以上にしてもほぼ変わらない様

出力ファイルは圧縮されているので、テキストエディタで開いてみても内容を読み取ることは出来ません。

そこで、読み出す際には「joblib.load」を使用
という情報が得られた。
取りあえずは
1.フォームに沿って各項目を入力していく

2.「joblib」を使いファイルサイズが大きくなりがちな変数を
一時保存する

3.一時保存した変数を書き出して、「joblib.load」で読みだす
読み出しはファイル拡張子を指定する

4.次の処理へ移行する

という流れでいく

これをフローチャート化する

そのうえでやることは3つ
・指定されたフォルダにファイルを保存する

・「joblib」に関する操作をjupyterで動作確認をし、実際のコードに組み込む

・PDF生成するにはFPDFというPDFファイルへ変換するpythonの外部ツールが使えそう

PDFという変数を定義し、FPDFオブジェクトを作成し、格納する。

格納後、add_page()を使用し、PDFにページを追加するというような
手法を採用すれば実現できそうな感じがする

このFPDFについても深く掘り下げていきたいと思う

その6ではフローチャート化とFPDFについて調べて結果を載せる予定

アークナイツ雑記1

ついにゲームに関する事を書こう・・・

コードのネタがない!!!

アークナイツはタワーディフェンス型のスマホゲー

タワーディフェンスのいいところは
プレイヤースキルが要求されない事

昇進2にしたいメンバーは
重装タイプだとニアール、リスカム、マドロック

前衛だとタチャンカ、アカフユ

補助であれば、ソラ、ツグノギ

狙撃だとプラチナかな~


昇進1でLVmaxにとどめるメンバー

特殊だと、ファントム、

前衛だと、シルバーアッシュ、カッター、ブローカ、

マウンテン、シロデカ

術師なら炎獄ラヴァあたりだな

 

素材集めのステージ番号をその都度
ネットにアクセスするの面倒だから
素材集めをリストで選べるpythonコード書くか~

書いとかないと忘れるな~

LTファイル専用データviewerその3

データが入っているフォルダを自由に移動したいので
import os ライブラリを使う

ListBox()を使って中のデータを複数選択可能にする

[sg.Listbox([], size=(60,20), enable_events=Ture,
		key ='-LIST-')]

入力された内容をリストボックスにするには
windowクラスのupdate()メソッドを使う
これで更新される

window['-LIST-'].update(new_file_names) #リストボックスに内容を表示

matplotlibについてまとめ

これはグラフを描くライブラリ

Y axis(Y軸)
X axis(X軸)

X ticks(目盛り)
legend(グラフの説明部分)
grid(罫腺)
figure(グラフを描くキャンバス)


pip install japanize-matplotlib
グラフの中で日本語を使うので上記をインストールする

label(グラフのラベル)

as.plotの引数にmarker='o'を付けるとプロットしたものに丸印がつく

グラフを画像として保存する方法
fig.savefig(****.png)


次回はmatplotlibで実際に描画する