Use AppHelper and add try-catch block
This commit is contained in:
117
main.py
117
main.py
@@ -24,65 +24,74 @@ from Foundation import NSObject, NSTimer, NSDate
|
||||
|
||||
load_dotenv()
|
||||
|
||||
from PyObjCTools import AppHelper
|
||||
|
||||
class ItemSenseApp(NSObject):
|
||||
def applicationDidFinishLaunching_(self, notification):
|
||||
print("Application did finish launching...")
|
||||
self.window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
|
||||
NSMakeRect(0, 0, 800, 700),
|
||||
NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable,
|
||||
NSBackingStoreBuffered,
|
||||
False
|
||||
)
|
||||
self.window.setTitle_("ItemSense")
|
||||
self.window.center()
|
||||
|
||||
# Main content view (StackView for layout)
|
||||
self.stack_view = NSStackView.alloc().init()
|
||||
self.stack_view.setOrientation_(NSUserInterfaceLayoutOrientationVertical)
|
||||
self.stack_view.setSpacing_(10)
|
||||
self.stack_view.setEdgeInsets_((10, 10, 10, 10))
|
||||
self.window.setContentView_(self.stack_view)
|
||||
try:
|
||||
print("Application did finish launching...")
|
||||
self.window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
|
||||
NSMakeRect(0, 0, 800, 700),
|
||||
NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable,
|
||||
NSBackingStoreBuffered,
|
||||
False
|
||||
)
|
||||
self.window.setTitle_("ItemSense")
|
||||
self.window.center()
|
||||
|
||||
# Main content view (StackView for layout)
|
||||
self.stack_view = NSStackView.alloc().init()
|
||||
self.stack_view.setOrientation_(NSUserInterfaceLayoutOrientationVertical)
|
||||
self.stack_view.setSpacing_(10)
|
||||
self.stack_view.setEdgeInsets_((10, 10, 10, 10))
|
||||
self.window.setContentView_(self.stack_view)
|
||||
|
||||
# Image View for Camera Feed
|
||||
self.image_view = NSImageView.alloc().init()
|
||||
self.image_view.setImageScaling_(0) # NSImageScaleProportionallyDown
|
||||
# Add constraint for height logic later if needed, but stackview handles it well enough for basic
|
||||
self.stack_view.addView_inGravity_(self.image_view, 1) # Top gravity
|
||||
# Image View for Camera Feed
|
||||
self.image_view = NSImageView.alloc().init()
|
||||
self.image_view.setImageScaling_(0) # NSImageScaleProportionallyDown
|
||||
self.stack_view.addView_inGravity_(self.image_view, 1) # Top gravity
|
||||
|
||||
# Result View (Scrollable Text)
|
||||
self.scroll_view = NSScrollView.alloc().init()
|
||||
self.scroll_view.setHasVerticalScroller_(True)
|
||||
self.scroll_view.setBorderType_(2) # NSBezelBorder
|
||||
self.scroll_view.setHeightAdjustLimit_(1.0)
|
||||
|
||||
# Text View
|
||||
content_size = self.scroll_view.contentSize()
|
||||
self.text_view = NSTextView.alloc().initWithFrame_(NSMakeRect(0, 0, content_size.width, content_size.height))
|
||||
self.text_view.setMinSize_(NSMakeSize(0.0, content_size.height))
|
||||
self.text_view.setMaxSize_(NSMakeSize(float("inf"), float("inf")))
|
||||
self.text_view.setVerticallyResizable_(True)
|
||||
self.text_view.setHorizontallyResizable_(False)
|
||||
self.text_view.setAutoresizingMask_(18) # NSViewWidthSizable | NSViewHeightSizable
|
||||
self.text_view.textContainer().setContainerSize_(NSMakeSize(content_size.width, float("inf")))
|
||||
self.text_view.textContainer().setWidthTracksTextView_(True)
|
||||
self.text_view.setEditable_(False)
|
||||
self.text_view.setRichText_(False)
|
||||
|
||||
self.scroll_view.setDocumentView_(self.text_view)
|
||||
self.stack_view.addView_inGravity_(self.scroll_view, 2)
|
||||
|
||||
self.text_view.setString_("Initializing camera...")
|
||||
# Result View (Scrollable Text)
|
||||
self.scroll_view = NSScrollView.alloc().init()
|
||||
self.scroll_view.setHasVerticalScroller_(True)
|
||||
self.scroll_view.setBorderType_(2) # NSBezelBorder
|
||||
|
||||
# Text View
|
||||
content_size = self.scroll_view.contentSize()
|
||||
self.text_view = NSTextView.alloc().initWithFrame_(NSMakeRect(0, 0, content_size.width, content_size.height))
|
||||
self.text_view.setMinSize_(NSMakeSize(0.0, content_size.height))
|
||||
self.text_view.setMaxSize_(NSMakeSize(float("inf"), float("inf")))
|
||||
self.text_view.setVerticallyResizable_(True)
|
||||
self.text_view.setHorizontallyResizable_(False)
|
||||
self.text_view.setAutoresizingMask_(18) # NSViewWidthSizable | NSViewHeightSizable
|
||||
self.text_view.textContainer().setContainerSize_(NSMakeSize(content_size.width, float("inf")))
|
||||
self.text_view.textContainer().setWidthTracksTextView_(True)
|
||||
self.text_view.setEditable_(False)
|
||||
self.text_view.setRichText_(False)
|
||||
|
||||
self.scroll_view.setDocumentView_(self.text_view)
|
||||
self.stack_view.addView_inGravity_(self.scroll_view, 2)
|
||||
|
||||
self.text_view.setString_("Initializing camera...")
|
||||
|
||||
# Capture Button
|
||||
self.capture_button = NSButton.buttonWithTitle_target_action_("Capture", self, "captureClicked:")
|
||||
self.stack_view.addView_inGravity_(self.capture_button, 3) # Bottom gravity
|
||||
# Capture Button
|
||||
self.capture_button = NSButton.buttonWithTitle_target_action_("Capture", self, "captureClicked:")
|
||||
self.stack_view.addView_inGravity_(self.capture_button, 3) # Bottom gravity
|
||||
|
||||
self.window.makeKeyAndOrderFront_(None)
|
||||
self.window.orderFrontRegardless() # Force it front
|
||||
print("Window ordered front.")
|
||||
|
||||
# Initialize Camera with a delay to allow UI to render first
|
||||
self.performSelector_withObject_afterDelay_("initCamera:", None, 0.5)
|
||||
self.window.makeKeyAndOrderFront_(None)
|
||||
self.window.orderFrontRegardless()
|
||||
print("Window ordered front.")
|
||||
|
||||
# State
|
||||
self.is_capturing = True
|
||||
self.current_frame = None
|
||||
|
||||
# Initialize Camera with a delay to allow UI to render first
|
||||
self.performSelector_withObject_afterDelay_("initCamera:", None, 0.5)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
print(f"Error in applicationDidFinishLaunching: {e}")
|
||||
|
||||
def initCamera_(self, sender):
|
||||
print("Initializing camera...")
|
||||
@@ -205,4 +214,4 @@ if __name__ == "__main__":
|
||||
|
||||
# Allow time for policy to take effect? Usually acceptable immediately.
|
||||
app.activateIgnoringOtherApps_(True)
|
||||
app.run()
|
||||
AppHelper.runEventLoop()
|
||||
|
||||
Reference in New Issue
Block a user