【发布时间】:2013-08-17 16:43:50
【问题描述】:
我正在尝试为此菜单项获取动态标签。我已经用 Python 编写了整个应用程序,但老实说 NSMenuItem 看起来有多少,我还不如用 Objc 重写它......
import objc
from Foundation import *
from AppKit import *
from PyObjCTools import AppHelper
class MyApp(NSApplication):
def finishLaunching(self):
# Make statusbar item
statusbar = NSStatusBar.systemStatusBar()
self.statusitem = statusbar.statusItemWithLength_(NSVariableStatusItemLength)
self.icon = NSImage.alloc().initByReferencingFile_('icon.png')
self.icon.setScalesWhenResized_(True)
self.icon.setSize_((20, 20))
self.statusitem.setImage_(self.icon)
#make the menu
self.menubarMenu = NSMenu.alloc().init()
self.menuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Click Me', 'clicked:', '')
self.menubarMenu.addItem_(self.menuItem)
self.quit = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '')
self.menubarMenu.addItem_(self.quit)
#add menu to statusitem
self.statusitem.setMenu_(self.menubarMenu)
self.statusitem.setToolTip_('My App')
def clicked_(self, notification):
NSLog('clicked!')
if __name__ == "__main__":
app = MyApp.sharedApplication()
AppHelper.runEventLoop()
【问题讨论】:
-
什么是错误?你没有指出它在哪里不起作用。当你做某事时,某事应该在某处发生,那不是吗?
-
这并不是说它不起作用,但我不确定如何实现我想要一个项目的动态标签。创建状态栏后我可以修改的东西。
-
您可以删除 MenuItem 并在菜单关闭时重新添加更改的值,或者在 NSMenuItem 和 NSMenuItem.alloc() 上寻找“重绘”类型的函数~应用程序就像一个画布,你可以改变你所看到的唯一方法是重绘部分或整个东西。我认为您不能只更改标签,但是如果您制作了自己的重绘功能,则可以传递标签,这将反映您当时希望他们阅读的内容。
标签: python objective-c variables dynamic nsmenuitem