설치 최신 py2app 후 새 디렉토리를 만들어이 같은 HelloWorld.py
파일을 만들어에 : 실제 코드에서, 물론
# generic Python imports
import datetime
import os
import sched
import sys
import tempfile
import threading
import time
# need PyObjC on sys.path...:
for d in sys.path:
if 'Extras' in d:
sys.path.append(d + '/PyObjC')
break
# objc-related imports
import objc
from Foundation import *
from AppKit import *
from PyObjCTools import AppHelper
# all stuff related to the repeating-action
thesched = sched.scheduler(time.time, time.sleep)
def tick(n, writer):
writer(n)
thesched.enter(20.0, 10, tick, (n+1, writer))
fd, name = tempfile.mkstemp('.txt', 'hello', '/tmp');
print 'writing %r' % name
f = os.fdopen(fd, 'w')
f.write(datetime.datetime.now().isoformat())
f.write('\n')
f.close()
def schedule(writer):
pool = NSAutoreleasePool.alloc().init()
thesched.enter(0.0, 10, tick, (1, writer))
thesched.run()
# normally you'd want pool.drain() here, but since this function never
# ends until end of program (thesched.run never returns since each tick
# schedules a new one) that pool.drain would never execute here;-).
# objc-related stuff
class TheDelegate(NSObject):
statusbar = None
state = 'idle'
def applicationDidFinishLaunching_(self, notification):
statusbar = NSStatusBar.systemStatusBar()
self.statusitem = statusbar.statusItemWithLength_(
NSVariableStatusItemLength)
self.statusitem.setHighlightMode_(1)
self.statusitem.setToolTip_('Example')
self.statusitem.setTitle_('Example')
self.menu = NSMenu.alloc().init()
menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
'Quit', 'terminate:', '')
self.menu.addItem_(menuitem)
self.statusitem.setMenu_(self.menu)
def writer(self, s):
self.badge.setBadgeLabel_(str(s))
if __name__ == "__main__":
# prepare and set our delegate
app = NSApplication.sharedApplication()
delegate = TheDelegate.alloc().init()
app.setDelegate_(delegate)
delegate.badge = app.dockTile()
delegate.writer(0)
# on a separate thread, run the scheduler
t = threading.Thread(target=schedule, args=(delegate.writer,))
t.setDaemon(1)
t.start()
# let her rip!-)
AppHelper.runEventLoop()
, 당신은 3 분마다 자신의 정기적 인 작업을 수행 할 것입니다. (여기에서하는 것처럼 매 20 초마다 임시 파일을 작성하는 것이 아니라) 지금까지 작성된 파일 수의 카운터를 보여주기보다는 자신의 상태 업데이트를 수행 할 것입니다), 등,하지만이 예제는 당신에게 가능한 출발점을 보여주기를 바랍니다.
그런 다음이 소스 파일이 포함 된 디렉토리로 이동하십시오. py2applet --make-setup HelloWorld.py
, python setup.py py2app -A -p PyObjC
.
이제 서브 디렉토리 dist
에 HelloWorld.app
; open dist
아이콘을 Dock으로 드래그하면 모든 설정이 완료됩니다 (자신의 컴퓨터에서 -A
플래그로 인해 다른 컴퓨터로 배포하는 데 문제가있을 수 있지만 잘못 설치했을 이 컴퓨터를 둘러싼 파일 ;-). 의심 할 바없이 아이콘을 사용자 정의하고 싶을 것입니다 & c.
당신이 요청한 "여분의 신용"을하지 않습니다. 이미 많은 코드가 있습니다. 여기에서 멈추기로 결심했습니다 (여분의 신용은 새로운 질문을 보증 할 수 있습니다). 더구나, 나는 확실하지 않다 모두 내가 여기에서 수행하고있는 주문은 실제로 필요하거나 유용하다; docobs는 pyobjc를 만들기에 꽤 위장하고 있습니다.당신이 필요로하는 것처럼 Xcode를 사용하지 않고 애플 리케이션을 만들었습니다. 그래서 나는 그물과 간단한 시행 착오를 상당 부분 더한 예제 코드 조각들과 함께 해킹했습니다. 그래도 도움이되기를 바랍니다. -)
당신은 Cocoa 응용 프로그램을 사용하지만 실제로 Mac GUI 응용 프로그램을 의미합니까? 그렇다면 아직 py2app를 보았습니까? 이 도구를 사용하여 PyObjC를 비롯하여 Python에서 사용할 수있는 다양한 UI의 대부분을 갖춘 응용 프로그램을 만들 수 있으며 문서화 된 방법으로 사용자 정의 독 아이콘을 만들 수 있습니다. Dock 업데이트에 대해서는 잘 모릅니다. –
얼굴없는 앱도 로그인시 실행할 수 있습니다. 계정 시스템 환경 설정 패널에서 로그인 항목 목록을 편집 할 수 있습니다. –
@Ned - 예, Mac GUI 응용 프로그램 (독 아이콘과 배지 포함)을 의미합니다. 필자는 py2app를 더 자세히 살펴볼 것입니다. (다른 UI 툴킷이 Mac Dock과 상호 작용할 수있는 더 간단한 API를 제공하는지 확인합니다) –