更改 OS X 菜单栏中 Tkinter 应用程序的标题

问题描述 投票:0回答:3

当您在 Python 中使用 Tkinter 创建带有 GUI 的应用程序时,应用程序的名称在 OS X 上的菜单栏中显示为“Python”。如何才能让它显示为其他内容?

python macos tkinter menubar
3个回答
15
投票

我的答案是基于埋藏在一些论坛中的一个答案。找到该解决方案有点困难,但我喜欢它,因为它允许您将应用程序作为单个跨平台脚本分发。无需通过 py2app 或类似的东西运行它,这将为您留下 OS X 特定的包。

无论如何,我在这里分享我的清理版本,以便比它到达那里时给予更多关注。您需要通过

pyobjc
安装
pip
才能获取代码中使用的
Foundation
模块。

from sys import platform

# Check if we're on OS X, first.
if platform == 'darwin':
    from Foundation import NSBundle
    bundle = NSBundle.mainBundle()
    if bundle:
        info = bundle.localizedInfoDictionary() or bundle.infoDictionary()
        if info and info['CFBundleName'] == 'Python':
            info['CFBundleName'] = <Your application name here>

0
投票

在新版本的 macOS 中,已接受的答案显然不再适用。我找到了一个解决方法,可以删除名为“Python”的菜单项,因此您可以将其替换为具有应用程序名称的菜单。它至少可以在带有 Python 3.12 和 Tcl/Tk 8.6.14 的 macOS 14.4 上运行。我通过 tkdocs 中的一些信息以及一些尝试和错误找到了答案。 经过一些基本设置后,

from tkinter import * APP_NAME = "Jim's app" window = Tk() window.title(APP_NAME) menu = Menu()

您可以使用以下命令使 
Python

菜单消失,使用 name 构造函数中未记录的

Menu
参数 – 它们必须严格按照以下顺序:
# Get rid of the "Python" menu
python_menu = Menu(menu, name='apple')
menu.add_cascade(menu=python_menu)
window['menu'] = menu
python_menu.destroy()

然后,您添加自己的菜单。例如,

# App-name menu app_menu = Menu(menu) menu.add_cascade(menu=app_menu, label=APP_NAME) app_menu.add_command(label=f'About {APP_NAME}') app_menu.add_separator() app_menu.add_command(label=f'Settings...') app_menu.add_separator() app_menu.add_command(label=f'Quit {APP_NAME}', command=window.destroy) # File menu file_menu = Menu(menu) menu.add_cascade(menu=file_menu, label=f'File') file_menu.add_command(label=f'New...') file_menu.add_command(label=f'Open...') # Help menu help_menu = Menu(menu) menu.add_cascade(menu=help_menu, label='Help') help_menu.add_command(label=f'{APP_NAME} Help')

Help

菜单甚至有一个漂亮的搜索框,就像在其他应用程序中一样。)当然,您仍然需要编写处理菜单命令的函数,并将它们作为add_command参数添加到

command
调用中。最后,要让应用程序运行,
# GUI
Label(window, text=f'Just testing my new app {APP_NAME}').grid(padx=20, pady=20)
window.mainloop()

它并不漂亮(不幸的是第一个菜单上的应用程序名称不是粗体文本),但至少它有效。为了确保可移植性,您应该仅当程序在 macOS 上运行时才运行 Python 菜单销毁代码,
if sys.platform == 'darwin'

    


-4
投票

from tkinter import Tk root = Tk() root.title( "Your title here" ) # or root.wm_title

如果您想更改图标:

''' Replace the default "Tk" icon with an Application-specific icon ''' ''' (that is located in the same folder as the python source code). ''' import sys from tkinter import PhotoImage program_directory = sys.path[ 0 ] IconFile = os.path.join( program_directory ) + "\ApplicationIcon.gif" IconImage = PhotoImage( file = IconFile ) root.tk.call( 'wm', 'iconphoto', root._w, IconImage ) root.mainloop()

© www.soinside.com 2019 - 2024. All rights reserved.