前提・実現したいこと
sys.exit()処理をしてもexitしない。
textboxの入力が1以下または65以上、またはかな漢字を入力した場合プログラムを強制終了させたいと思いsys.exit()文を入れましたが
終了しませ。textboxに0、65以上の数字、かな漢字を入力しても内容をプリントし、何度も入力出来ます。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
python3.9
1import sys 2 3def bdest(): 4 global entry 5 bdNum = entry.get() 6 try: 7 bdNum = int(bdNum) 8 except ValueError as e: 9 print('かな漢字入力エラー', e) 10 sys.exit() 11 if bdNum < 1: 12 sys.exit() 13 if bdNum > 64: 14 exit() 15 sys.exit() 16 print(bdNum)
試したこと
sys.exit()でもexit()でも同じでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
entryはどう定義されていますか?
こちらの環境は Python 3.9 + tkinter 8.6.11 ですが、sys.exit() でプログラムが終了します。同じ結果になるかもしれませんが、sys.exit() の直前に root.destroy() を入れるどうなるでしょうか?
melianさん
root.destroy()を入れたらexitしました。プログラムで開いたボタンTextboxを配置したウィンドウが閉じたのでOKとおもいます。pip listで見るとtkinterが見当たりませんでした。importでエラーがでていないので問題ないと思います。有難うございました。理解出来ないかもしれませんがroot.destroy()を入れた理由を教えて頂けると有難いです。
itagagakiさん
bdNum = entry.get()はtextboxの内容を読み取ることが出来なくて教えて頂いた内容をそのまま使用しています。entryの定義については私の参考書では全く触れられていないので今だ持って判りません。
回答が0になっていたので今まで気が付きませんでした。申し訳ありませんでした。ベストアンサーボタンが表示されていないので現状のまま投稿します。
sys.exit() が効かないということで、 tkinter のアプリケーションループが動いたままになっているのかな、と思った次第です(ちょっと考えづらい状況ですが)。root.destory() を実行すると、tkinter のアプリケーションループ(実際にはバックエンドで動いている tcl インタープリタ)が停止して root ウィジェットを含む、全てのウィジェットを破壊(内部で確保されているメモリ領域を解放)します。
ありがとうございます。試しにroot.destroy()のみでsys.exit()を削除しましたが、これでも停止できました。ちなみに停止する時
PS C:\Users\shiraishikiichi\pytextとプログラムがあるディレクトリを表示します。
回答1件
あなたの回答
tips
プレビュー