pyobjus/examples/delegate.py

43 lines
1.4 KiB
Python

"""
This example simplifies the code from the URL Loading System Programming Guide
(http://goo.gl/JJ2Q8T). It uses NSURLConnection to request an invalid connection
and get the connection:didFailWithError: delegate method triggered.
"""
from kivy.app import App
from kivy.uix.widget import Widget
from pyobjus import autoclass, protocol, objc_str
from pyobjus.dylib_manager import load_framework, INCLUDE
load_framework(INCLUDE.AppKit)
load_framework(INCLUDE.Foundation)
NSURL = autoclass('NSURL')
NSURLConnection = autoclass('NSURLConnection')
NSURLRequest = autoclass('NSURLRequest')
class DelegateApp(App):
def build(self):
self.request_connection()
return Widget()
def request_connection(self):
# This method request connection to an invalid URL so the
# connection_didFailWithError_ protocol method will be triggered.
url = NSURL.URLWithString_(objc_str('abc'))
request = NSURLRequest.requestWithURL_(url)
# Converts the Python delegate object to Objective C delegate instance
# simply by calling the objc_delegate() function.
connection = NSURLConnection.connectionWithRequest_delegate_(
request, self)
return connection
@protocol('NSURLConnectionDelegate')
def connection_didFailWithError_(self, connection, error):
print("Protocol method got called!!", connection, error)
if __name__ == "__main__":
DelegateApp().run()