前提、実現したいこと
PySimplGuiを使ってインプット欄に入れた項目をFirebaseのRealTime-Databaseにデータ保存をするアプリを作っています。
機能を果たすアプリになったのですが、一度書き込みをするとアプリを終了させないと別データを保存できません。そこでアプリの再読み込みをしてプログラムの最初に戻るように考えたのですが、やはりアプリを終了させないと連続でデータ保存をできないのです。
実現させたいのはアプリを稼働させたまま連続してデータを書き込みたい。
import PySimpleGUI as sg import firebase_admin from firebase_admin import credentials from firebase_admin import db from oauth2client.service_account import ServiceAccountCredentials import json import datetime dt = datetime.datetime.now() dtDay = dt.day dtMonth = dt.month dtYear = dt.year def datainput_func(name): print(name) touroku = str(dtYear)+'/'+str(dtMonth)+str(dtDay) if not firebase_admin._apps: cred2 = credentials.Certificate('./hogefirebase-adminsdk-epcpl-03c5efaabf.json') firebase_admin.initialize_app(cred2, { 'databaseURL': 'https://fuga-default-rtdb.asia-southeast1.firebasedatabase.app/', 'databaseAuthVariableOverride': { 'uid': 'my-service-worker' } }) ref2 = db.reference('user') ref2.child(name).set({ 'touroku':str(touroku), }) return def dataoutput_func(): pass def submit_func(): pass handler = { 'datainput': datainput_func, 'dataoutput': dataoutput_func, 'Submit': submit_func, } def main(): layout = [[sg.Text('名前',font = ('arial',22)),sg.Input(font = ('arial',22))], [sg.Button('データ入力', key='datainput')], [sg.Button('データ読み込み', key='dataoutput')], [sg.Submit(), sg.Cancel()]] window = sg.Window('Sample', layout=layout, size = (300,300)) while True: event, value = window.read() print(event, value) name=value[0] print(name) if event in [None, 'Cancel']: window.close() main() function = handler[event] # handlerからeventに応じた関数を呼び出す function(name) window.close() if __name__ == '__main__': main()
データ入力ボタンを押すと名前欄に入れた文字を元にデータがRealTime-Database上に作られます。
Cancelボタンを押すとウィンドウをmain()を再読み込みして最初に戻るのですが、ここで新たにインプットしても書き込みが行われません。
上図はkaneko8のデータ保存をした後、Cancelボタンを押し、main()再読み込みした後にkaneko9のデータ保存を試みたところです。
やはりkaneko9のデータ保存はうまくいきませんでした。しかし、アプリを再起動するときちんとできます。この差がいまいち理解できず,
解消できずにいます。
MacOs 12.2 Beta(21D5025f)
Python 3.8.12
参考 リンク内容
どなたかご教授お願いできないでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。