Dav*_*idM 8 python cocoa pyobjc
我在XCode中创建了一个全新的项目,并在我的AppDelegate.py文件中包含以下内容:
from Foundation import *
from AppKit import *
class MyApplicationAppDelegate(NSObject):
def applicationDidFinishLaunching_(self, sender):
NSLog("Application did finish launching.")
statusItem = NSStatusBar.systemStatusBar().statusItemWithLength_(NSVariableStatusItemLength)
statusItem.setTitle_(u"12%")
statusItem.setHighlightMode_(TRUE)
statusItem.setEnabled_(TRUE)
Run Code Online (Sandbox Code Playgroud)
但是,当我启动应用程序时,不显示任何状态栏项.main.py和main.m中的所有其他代码都是默认的.
我必须这样做才能使它工作:
打开MainMenu.xib.确保应用程序委托的类是MyApplicationAppDelegate.我不确定你是否必须这样做,但我做到了.这是错误的,所以应用代表从来没有被调用过.
添加statusItem.retain()因为它立即自动释放.
小智 5
上面使用.retain()是必需的,因为从applicationDidFinishLaunching()方法返回时,statusItem被销毁.使用self.statusItem将该变量绑定到MyApplicationAppDelegate实例中的字段.
这是一个不需要.xib/etc的修改示例......
from Foundation import *
from AppKit import *
from PyObjCTools import AppHelper
start_time = NSDate.date()
class MyApplicationAppDelegate(NSObject):
state = 'idle'
def applicationDidFinishLaunching_(self, sender):
NSLog("Application did finish launching.")
self.statusItem = NSStatusBar.systemStatusBar().statusItemWithLength_(NSVariableStatusItemLength)
self.statusItem.setTitle_(u"Hello World")
self.statusItem.setHighlightMode_(TRUE)
self.statusItem.setEnabled_(TRUE)
# Get the timer going
self.timer = NSTimer.alloc().initWithFireDate_interval_target_selector_userInfo_repeats_(start_time, 5.0, self, 'tick:', None, True)
NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSDefaultRunLoopMode)
self.timer.fire()
def sync_(self, notification):
print "sync"
def tick_(self, notification):
print self.state
if __name__ == "__main__":
app = NSApplication.sharedApplication()
delegate = MyApplicationAppDelegate.alloc().init()
app.setDelegate_(delegate)
AppHelper.runEventLoop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2325 次 |
| 最近记录: |