最新バージョンに更新した後、ファイル入力を取得するためのコードが機能しなくなったようです
event、(filename、)= sg.Window( 'Get filename example')。 Layout([[sg.Text( 'Filename')]、[sg.Input()、sg.FileBrowse()]、[sg.OK()、sg.Cancel()]])。Read()
ValueErrorが生成されます。値が多すぎて解凍できません(予想1)。
少し調べてみると、3.39.0ではFileBrowse()から発生した[参照]ボタンが入力として読み取られているようです。 3.29.0にダウングレードすると、問題が修正されました。 FileInput()でもテスト済み。
すべてが正常に機能しています。 ALL-IN-ONE-LINE
コードを書かないでください。
今。
It produces ValueError: too many values to unpack (expected 1).
これはPySimpleGUIの問題ではありません、@ DKatarakis。
通常の形式のコードは次のとおりです。
import PySimpleGUI as sg
layout = [
[sg.Text('Filename')],
[sg.Input(), sg.FileBrowse()],
[sg.OK(), sg.Cancel()]
]
window = sg.Window('Simple App, Really simple.', layout)
while True:
event, values = window.Read()
if event is None or event == 'Exit': break
print(event, values)
if event == 'Button1':
pass
if event == 'Button2':
pass
if event == 'Button3':
pass
window.Close()
古いバージョンは値をリストとして返します。 新しいバージョンは、値を辞書として返します。 これが私が試したものです。
Textbox value = c:\files\a.txt
A. psg v3.28
e, v = window.Read()
print(v)
['c:/files/a.txt']
B. psg v3.37
e, v = window.Read()
print(v)
{0: 'c:/files/a.txt', 'Browse': 'c:/files/a.txt'}
次の場合、@ DKatarakisで示されるように、新しいバージョンでValueErrorが発生します。
e, (v,) = window.Read()
問題は、ボタンも値を返し始めたことです。 これにより追加のエントリが作成され、ボタンであるため、戻り値が辞書に切り替えられました。
v [0]を参照すると、値(リストと同じ)が得られますが、辞書に保持されます。
ボタンが値を返している理由がわかりません。 Lemmeはリリースノートを読み、目的が何であるかを判断できるかどうかを確認します。 カレンダーウィジェットなどの専用ボタンが原因だと感じています。
古いバージョンは値をリストとして返します。 新しいバージョンは、値を辞書として返します。 これが私が試したものです。
Textbox value = c:\files\a.txt
A. psg v3.28
e, v = window.Read() print(v) ['c:/files/a.txt']
B. psg v3.37
e, v = window.Read() print(v) {0: 'c:/files/a.txt', 'Browse': 'c:/files/a.txt'}
次の場合、@ DKatarakisで示されるように、新しいバージョンでValueErrorが発生します。
e, (v,) = window.Read()
はい、確かに。 正しく指定しなかったことをお詫び申し上げます。 ご意見ありがとうございます。
さらに詳しく調べてみると、4つのポートすべてでボタンの戻り値にしばらく前に変更がありました。 これはボタンの根本的な変更でした。 現在、戻り値があります。 これは、リストではないため、結果を「解凍」しようとするアプリケーションにとって実際の問題を引き起こします。
ドキュメントで直接解凍することはお勧めしません。 []を使用して、値がリストであるかのように戻り値にアクセスできます。直接解凍することはできません。
これにつきましては申し訳ございません!
_アップグレード時に既存のコードを壊すことは私にとって大罪なので、本当に申し訳ありません。_コードを変更して、1ではなく2つのステップで戻り値にアクセスする必要があります。
あなたの1行のプログラムは2になりました
event, values = sg.Window('Get filename example'). Layout([[sg.Text('Filename')], [sg.Input(), sg.FileBrowse()], [sg.OK(), sg.Cancel()] ]).Read()
filename = values[0]
最も参考になるコメント
古いバージョンは値をリストとして返します。 新しいバージョンは、値を辞書として返します。 これが私が試したものです。
Textbox value = c:\files\a.txt
A. psg v3.28
B. psg v3.37
次の場合、@ DKatarakisで示されるように、新しいバージョンでValueErrorが発生します。
e, (v,) = window.Read()