6

编辑:我指的是 OSX 应用程序菜单,其中包含 About 和 Preference 菜单项(以及其他菜单项)。

对于知道正确搜索词的人来说,这可能是另一个简单的问题,但是在 IDLE 中花费数小时跟踪代码并搜索网络之后,我还没有完全能够连接这些点。

我正在尝试替换 Python 中的标准 About 菜单。IDLE 至少部分做到了这一点;该菜单仍然命名为“About Python”,但它显示了 IDLE About 窗口。当从 Wing IDE(在 X11 下)运行时,idle 不显示其 About 窗口,并且由于某种原因 IDLE 不想调试 idle.py ...

我已经能够用“About MyProgramName”替换“About Python”,但是我要么得到通常的“tk About”窗口,要么根本没有关于窗口。IDLE 定义了一个虚拟事件来将控制权传递给它的 About 窗口,我一直在纠结如何定义一个连接到菜单选择的虚拟事件。

所以,我有root.bind('<<about-myprogram>>', about_dialog),但我该如何连接呢?tk.add_event() 需要一个序列...

有什么建议么?

4

2 回答 2

2

如果您正在谈论在菜单上构建一个带有帮助条目的菜单栏并在帮助菜单上具有关于条目,那是非常基本的东西,并且有很好的例子。

其中任何一个都将清楚地解释如何为您的应用程序创建顶级菜单。如果您在谈论其他内容,请澄清。

我在我的 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 回答