2012-05-04 9 views
4

編集:OSXアプリケーションメニューを参照しています。これには、AboutやPreferenceメニュー項目が含まれています。OSXでPythonの "About Tkinter"メニューを置き換える方法

これは、適切な検索条件を知っている人にとってはもう1つ簡単なことですが、IDLEでコードをトレースしてネットを検索しても、私はドットを接続できませんでした。

私はPythonの標準Aboutメニューを置き換えようとしています。 IDLEはこれを少なくとも部分的に行います。メニューは "About Python"という名前が付けられますが、IDLE Aboutウィンドウが表示されます。 Wing IDE(X11の下で)を実行すると、アイドルウィンドウのAboutウィンドウが表示されません。何らかの理由でIDLEがidle.pyをデバッグしたくない場合...

"About Python" 「MyProgramNameについて」と書いてありますが、通常の「tk About」ウィンドウを取得するか、「About」ウィンドウを表示しません。 IDLEは、Aboutウィンドウにコントロールを渡すための仮想イベントを定義しています。メニュー選択に接続する仮想イベントを定義する方法については固執しています。

だから、私はroot.bind('<<about-myprogram>>', about_dialog)ですが、どのように接続すればいいですか? tk.add_event()はシーケンスが必要です...

何か提案がありますか?

+2

これはおよそメニュー項目にハンドラ関数をバインドします 'root.createcommand(「tkAboutDialog」、yourAboutHandler)' しかし私は、タイトルを変更するために管理していませんでした...あなたはそれをどのように行うのですか? – ljgww

答えて

2

メニューにヘルプ項目があるメニューバーを作成し、ヘルプメニューにAbout項目がある場合は、それはかなり基本的なものであり、その周りの良い例があります。

これらのいずれかがアプリのトップレベルのメニューを作成する方法を明確に説明します。あなたが何か他のことについて話しているなら、明確にしてください。

私はC:\ Python27 dirの下のソースで::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 = Tk()から作成rootウィジェット上に存在することを確認しました。さらに詳しい情報を探しているうちに、私はこの件に関してもlittle discussionを見つけました。

+0

OSXには、Appleメニューの右にあり、現在のアプリケーションと同じ名前のアプリケーションメニューがあります。このメニューには、他の項目の中で、AboutとPreferenceメニューが含まれています。私はPreferenceメニューに接続する方法を理解しましたが、Aboutメニューには接続しません。現時点では、[ヘルプ]メニューに[バージョン情報]メニューがありますが、これはOSXアプリケーションの動作方法とは一貫していません。 – LMO

+0

私はリンクしたTkdocsページを読んだことがありますか?Mac OS Xとそのメニュー(私が持っていないので調査していない)に関する多くの情報があります。 –

+1

はい、ブラウザで1週間開いています。アプリケーションメニューにappnameエントリを追加する方法の下には、Python用のtodoアイテムがあります。 – LMO

0

私は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() 
関連する問題