6

編集:私はOSXアプリケーションメニューを参照しています。このメニューには、[バージョン情報]メニュー項目と[設定]メニュー項目が含まれています(他の項目も含まれています)。

これは、適切な検索用語を知っている人にとっては別の簡単な方法かもしれませんが、IDLEでコードをトレースしてネットを検索するのに何時間も費やした後、私はドットを完全に接続できませんでした。

Pythonの標準のAboutメニューを置き換えようとしています。IDLEはこれを少なくとも途中で行います。メニューの名前は「Pythonについて」のままですが、IDLEの[バージョン情報]ウィンドウが表示されます。Wing IDE(X11の下)から実行すると、idleはAboutウィンドウを表示せず、何らかの理由でIDLEはidle.pyをデバッグしたくありません...

「AboutPython」を「AboutMyProgramName」に置き換えることができましたが、通常の「tk About」ウィンドウが表示されるか、Aboutウィンドウがまったく表示されません。IDLEは、[バージョン情報]ウィンドウに制御を渡すための仮想イベントを定義します。メニュー選択に接続する仮想イベントを定義する方法に固執しています。

だから、私は持ってroot.bind('<<about-myprogram>>', about_dialog)いますが、どうやってそれを接続するのですか?tk.add_event()にはシーケンスが必要です。

助言がありますか?

4

2 に答える 2

2

メニューにヘルプ エントリがあり、ヘルプ メニューに About エントリがあるメニュー バーを構築することについて話している場合、それはかなり基本的なことであり、その周りには良い例があります。

どちらも、アプリのトップ レベル メニューを作成する方法を明確に説明します。それ以外のことについて話している場合は、明確にしてください。

C:\Python27 ディレクトリの下のソースで検索を行い::tk::mac::ShowPreference、ファイル C:\Python27\Lib\idlelib\macosxSupport.py でコードを見つけました。これは、やりたいことを実行しているように見えます (または少なくとも閉じるあなたがそれを適応させることができるのに十分です)。

def config_dialog(event=None):
    from idlelib import configDialog
    root.instance_dict = flist.inversedict
    configDialog.ConfigDialog(root, 'Settings')

root.createcommand('::tk::mac::ShowPreferences', config_dialog)

createcommand() メソッドに関する適切なドキュメントを掘り下げることはできませんでしたが、rootから作成したウィジェットに存在することを確認しましたroot = Tk()詳細情報を探しているときに、この件に関する小さな議論にも出くわしました。

于 2012-05-04T16:01:59.030 に答える
1

About および Preferences メニュー項目の作成方法に関する完全な例を探していましたが、何も見つからなかったので、自分で作成しました。これは、Mac OS 10.4.11 および Mac OS 10.6.8 でテストされています。

from Tkinter import *
from tkMessageBox import *

def do_about_dialog():
    tk_version = window.tk.call('info', 'patchlevel')
    showinfo(message= app_name + "\nThe answer to all your problems.\n\nTK version: " + tk_version)

def do_preferences():
    showinfo(message="Preferences window")

def do_button():
    print("You pushed my button")

def main():
    global app_name
    app_name = "Chocolate Rain"
    global window
    window = Tk()
    window.title("Main")

    # find out which version of Tk we are using
    tk_version = window.tk.call('info', 'patchlevel')
    tk_version = tk_version.replace('.', '')
    tk_version = tk_version[0:2]
    tk_version = int(tk_version)

    menubar = Menu(window)
    app_menu = Menu(menubar, name='apple')
    menubar.add_cascade(menu=app_menu)

    app_menu.add_command(label='About ' + app_name, command=do_about_dialog)
    app_menu.add_separator()

    if tk_version < 85:
       app_menu.add_command(label="Preferences...", command=do_preferences)
    else:
        # Tk 8.5 and up provides the Preferences menu item
        window.createcommand('tk::mac::ShowPreferences', do_preferences)

    window.config(menu=menubar) # sets the window to use this menubar

    my_button = Button(window, text="Push", command=do_button)
    my_button.grid(row=0, column=0, padx=50, pady=30)

    mainloop()

if __name__ == "__main__":
    main()
于 2016-07-20T18:03:30.200 に答える