回路草案入力フォームその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
回路草案入力フォームその6
フローチャートが完成したので載せておく
これに沿ってコードを書いてJupiternotebookで動作確認をする
回路草案入力フォームその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についても深く掘り下げていきたいと思う
アークナイツ雑記1
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で実際に描画する