3

easygui entrybox() を提示し、ユーザー入力を受け取るとこれを無期限にループし続ける非常に単純なアプリを作成しました。

これはNoneを返すため、キャンセルボタンを使用してプログラムを終了できますが、標準の「閉じる」ボタンを使用してプログラムを終了できるようにしたいと考えています。(つまり、Windows ウィンドウの右上、Mac ウィンドウの左上) このボタンは現在何もしません。

easygui モジュールを見ると、次の行が見つかりました。

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

これが犯人のようです。私は TKinter の専門家ではありませんが、このハンドラーを変更して希望どおりに動作させる方法を見つけることができるでしょう。

ただし、easygui モジュールを台無しにしたくないので、メイン スクリプトからこの動作をオーバーライドし、閉じるボタンでプログラムを完全に閉じるか、None を返す方法はありますか?

4

3 に答える 3

5

はい、easyguiモジュールを変更する必要があります。改造させていただきます!

** EasyGUI 作成者にこの件について説明する電子メールを送信しました [12:12 PM、2009 年 1 月 23 日]

** 私はただ、この変化が起こる可能性は - もしあったとしても - 私は疑っていますが - 非常に小さいと言いたいです. お分かりのように、EasyGUI は、GUI を作成するためのシンプルで個別の方法を意図しています。特にインターフェイスが非常にシーケンシャルであるため、この追加は何の役にも立たないと思います。そのため、新しいユーザーは混乱するでしょう. [2009 年 1 月 23 日午後 12 時 19 分]

** EasyGUI の作成者は、私の電子メールへの返信で次のように述べています。

easygui ダイアログは、決してアプリケーションを終了するべきではありません。呼び出し元に値を返し、何をすべきかを呼び出し元に決定させる必要があります。

しかし、これは興味深いアイデアです。「閉じる」アイコンのクリックを単純に無視するのではなく、easygui ボックスは「キャンセル」ボタンをクリックした場合と同じ値を返すことができます。これについて瞑想します。

-- スティーブ・ファーグ

これは少なくとも進歩だと思います。[2009 年 1 月 23 日午後 2 時 40 分]

于 2009-01-23T17:04:00.300 に答える
0

今はわかりませんが、こんなことやってみたことがありますか?:

root.protocol('WM_DELETE_WINDOW',  self.quit)

また

root.protocol('WM_DELETE_WINDOW',  self.destroy)

私は試していませんが、グーグルのようなもの"Tkinter protocol WM_DELETE_WINDOW"

于 2008-12-17T00:24:29.373 に答える
0

私は解決策を見つけました.答えは選択ボックスの下にあります. それを消去して、このコードをその場所に配置してください。

    def denyWindowManagerClose():
#------------------------------------------------------------------
#  Changed by ProgrammingBR
#  Enables the user to close the window without entering a value
#  Youtube URL: https://www.youtube.com/channel/UCTZh6kWz_iYACNE6Jcy2lhw
#------------------------------------------------------------------
    global __enterboxText
    __enterboxText = None
    boxRoot.quit()

バックアップファイルを作成できますが、これはすべてのボックスで機能します。これ以外の提案は機能しません。私はそれらを試しました. ご覧になりたい場合は、ビデオがあります (ポルトガル語ですが、フォローできます) youtube チャンネルにアクセスしてください。すぐにアップロードして、ここにリンクを投稿します :)

于 2016-01-19T22:16:44.587 に答える