質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

Q&A

解決済

1回答

802閲覧

【PysimpleGUI】パスワードを自動作成するプログラムを組みたい

退会済みユーザー

退会済みユーザー

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2023/02/01 07:36

編集2023/02/02 04:19

実現したいこと

プログラミング勉強中の者です。
pythonで文字数をInputTextに入力するとランダムの文字でパスワードを作成しOutpuTextに出力するプログラムを作りたいのですが、以下のようなエラーが出て消えず困っています。
整数以外を入力するとエラーのポップアップが出るようにしたいです。
ご教授の程よろしくお願い致します。

発生している問題・エラーメッセージ

実行すると以下のポップアップが表示されます。

Error Unable to complete operation on element with key 0

You cannot perform operations (such as calling update) on an Element until:
window.read() is called on finalize=True when Window created.Addng a ‘’finalize = True” parameter to your Window creation will likely fix this.
The error originated from:
File C:\Users\xxxxxxx\anaconda3\lib\warning.py
Line 30
In_showwarnimsg_impl_
File.write(text)

該当のソースコード

import PySimpleGUI as sg
import secrets
import string

sg.theme('DarkAmber')

layout = [
[sg.Text('桁数設定', size=(5, 1)), sg.InputText('', size=(8, 1), key='page1'), sg.Text('※設定するパスワードの桁数を入力してください', size=(20, 3))],
[sg.Output(size=(70,3))]
]

window = sg.Window('パスワードを作成します', layout)

chars = string.ascii_letters + string.digits

input_num = input('')
if not input_num.isdigit():
sg.PopupGetText('エラーです', title='Error')

password = "".join([secrets.choice(chars) for i in range(int(input_num))])

while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break

window.close()

他に試したコード

①Inputtextに入力しそのままポップアップで入力したくて書いたコード

import PySimpleGUI as sg
import secrets
import string

sg.theme('DarkAmber')

layout = [[sg.Text('桁数設定', size=(5,1)), sg.InputText('', size=(8, 1), key='page1'),
sg.Text('※設定するパスワードの桁数を入力してください', size=(20, 3))],[sg.Button('入力',key='bt1')]]

window = sg.Window('パスワードを作成します', layout)

chars = string.ascii_letters + string.digits
input_num = input('')
password = "".join([secrets.choice(chars) for i in range(int(input_num))])

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

elif event == 'bt1':
r = sg.PopupError('数字を入力してください',title='AAA')
if not r:
input_num.isdigit()
else:sg.popup(print(password))

window.close()

→この場合は終了コードが出ない。

補足情報

windows10,開発環境はPyCharm Community Edition 2022.3.1

その他追記

can110様

該当コード内の

if not input_num.isdigit():
sg.PopupGetText('エラーです', title='Error')

をイベントループ内に移動し、
while True:内のbreakより下を以下のように追記しました。

elif event =='page1':
if input_num.isdigit():
print(password)
else:sg.PopupGetText('エラーです', title='Error')

→同じエラーでうまくいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2023/02/01 07:52

ちょっと全体の処理の流れが分かりません。 「文字数」はGUI上ではなくターミナル上で入力したいということでしょうか? GUI上の「桁数設定」の横のインプットボックスで入力する意図であれば イベントループ内で処理すべきと思いますので、確認です。
can110

2023/02/02 00:17

とりあえず何らかのボタンを配置して、それを押すとテキストボックスに入力した文字列をポップアップ表示するような動きは現時点で実現できるでしょうか。
can110

2023/02/02 04:30 編集

コード部分がとぎれとぎれになって、インデントもなくなっているので調整、修正(コードブロックで囲む)ください。
guest

回答1

0

ベストアンサー

入力文字列をintに変換+αチェックして、その結果をポップアップ表示する例です。

なお、目的の動作ができない、実現方法が分からない場合は、まずはThe PySimpleGUI Cookbookなどの公式の初学者向けのドキュメントにひととおり目を通すとよいです。
その結果、このライブラリの基本的な考えや使い方、具体的なサンプルコードなどを知ることができます。
そのうえで、目的にあいそうなサンプルコードをベースにして肉付けしていくような流れで進めると、スムーズに進めると思います。

Python

1import PySimpleGUI as sg 2 3sg.theme('DarkAmber') 4layout = [[sg.Text('桁数'), sg.InputText('', size=(8, 1), key='digits'), sg.Button('実行')]] 5window = sg.Window('パスワードを作成します', layout) 6 7def to_digits(inp): 8 d = 0 9 # intに変換してみる 10 try: 11 d = int(inp) 12 except ValueError: 13 pass 14 15 # 他にチェックすべきものがあれば 16 if d <= 0 or d >= 10: 17 d = 0 18 return d 19 20while True: 21 event, values = window.read() 22 if event == sg.WIN_CLOSED: 23 break 24 25 if event == '実行': 26 inp = values['digits'] 27 d = to_digits(inp) 28 if d > 0: 29 # 何らかの処理 30 sg.popup(f'{d}') 31 else: 32 sg.popup_error(f'[{inp}]は無効です') 33 34window.close()

投稿2023/02/02 05:04

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問