ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin

‏XML-RPC בצד הלקוח: פייתון ו-glade

published at 01/01/2005 - 19:49 · ‏פורסם mksoft · ‏tags פיתוח , מדריכים · שלח לחברידידותי למדפסת
פיתוח בפעמים הקודמות דנו ב-XML-RPC ויישמנו דוגמא בצד השרת בעזרת PHP ו-PEAR.

היום נסיים את הסדרה בעזרת כתיבת צד הלקוח. לצורך העניין נעזר ב ו-glade ונציג גם מבוא עבורם.

בעזרת glade נבנה את ממשק המשתמש בנפרד מהיישום ובצורה גרפית. הממשק נשמר בתור קובץ XML אשר נטען ע"י היישום לאחר מכן בעזרת ספריה מתאימה. glade משמשת לבניית ממשקים עבור יישומי GTK+ וגנום. במקרה שלנו אנו נשתמש במתאם המתאים עבור פייתון כדי לטעון את הממשק שיצרנו.


glade

נפעיל את glade. הממשק הבסיסי שלה מזכיר את זה של ה-gimp:
glade

נלחץ על לחצן ה-New (או Project | New ), וניצור פרוייקט GTK+ חדש. ניצור חלון חדש בעזרת לחיצה על לחצן "New Window". ניתן לו שם חדש וכותרת מתאימה בעזרת חלון ה-properties:
חלון חדש


‏GTK משתמשת ב"מיכלים" - containers, המכילים את הפקדים השונים. בעזרת אנו יכולים לעצב את הממש כרצוננו (תחשבו על טבלאות ב-HTML והדרך אשר נעזרים בהן לעימוד התוכן). נבחר ב-Vertical Box עם 2 שורות, ובחלק העליון נשים Horizontal Box עם 3 עמודות:
מכלי פקדים

אני עובד ב-locale אנגלי, לכן נבנה את הממשק בצורת מראה. כאשר נריץ עם locale עברי את היישום, הממשק יתהפך בהתאם. בנוסף glade תומך בבינאום הממשק בעזרת gettext, לא ניגע בזאת כאן כדי להשאיר את הדוגמא פשוטה ככל האפשר.

בחלק העליון, בתוך ה-hbox נמקם label, שדה עריכה ולחצן. בחלק התחתון של ה-vbox נמקם TextView. עבור כל פקד ישנם תכונות המגדירות את ה"מתיחה" שלו והמילוי שלו בממשק. תכונות אלו נקבעת בכרטסת "packing" בחלון המאפיינים. ל-hbox נבטל את ה-expand ואת ה-fill, מה שיגרום ל-TextView לתפוס את שאר החלון:
widget packing

לפני שנשמור סופית את הפרוייקט, ניתן לפקדים שמות משמעותיים (חשוב מאוד בתחזוקת קוד - לא להשתמש בשמות ברירת מחדל או כאלה שלא מתארים את תפקיד הפקד). לאחר השמירה, נקבל קובץ XML אשר ישמש אותנו בהמשך.

אחת הכרטסות במאפיינים היא ה-signals - שם מגדירים ארועים שונים. נלחץ על הלחצן, ונבחר באירוע clicked, ונוסיף את הארוע לרשימה. עוד אירוע שנוסיף הוא ארוע ה-destory עבור החלון, אותו נקשור ל-handler של gtk_main_quit (יגרום לסיום היישום כאשר סוגרים את החלון). לאחר מכן נקשור את האירועים האלו:
אותות


העבודה עם פייתון

כעת נפנה לבניית היישום בפייתון. היישום אמור לטעון את ממשק המשתמש, לקשור אירועים שונים (כגון לחיצה על הלחצן - בקשה לקבלת המאמר המתאים), ולעדכן את הבקרים עם קבלת התשובה.


#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import pygtk
pygtk.require('2.0')
import gtk
import gtk.glade
from xmlrpclib import ServerProxy, Fault, ResponseError

xmlrpc_url = "http://whatsup.org.il/xmlrpc_demo.php"

class Client:
def __init__(self):
"""Loads glade file and connect signals, creates
the XML-RPC server proxy"""
self.widgets = gtk.glade.XML("xmlrpc.glade")

signalsDic = {
"on_buttonArticleNum_clicked" : self.on_buttonArticleNum_clicked,
"gtk_main_quit" : self.gtk_main_quit
}
self.widgets.signal_autoconnect(signalsDic)

self.server = ServerProxy(xmlrpc_url)

def on_buttonArticleNum_clicked(self,widget,*args):
"""Calls get_response with the content of entry field,
Set text widget upon response"""
entry = self.widgets.get_widget("entryArticleNum")
title = self.get_response(entry.get_text())
text_widget = self.widgets.get_widget("textviewArticleTitle")
text_buffer = text_widget.get_buffer()
text_buffer.set_text(title)

def get_response(self,title_num):
"""Calls the server proxy, return the answer
or an error message"""
try:
title = self.server.article.title(title_num)
return title
except Fault, msg:
return "שגיאה: " + msg.faultString

def gtk_main_quit(self,*args):
"""The signal handler for closing the app"""
gtk.main_quit()

def main(self):
"""Runs the main gtk loop """
gtk.main()

if __name__ == '__main__':
client = Client()
client.main()



פעילות ה-XML-RPC מתבצעת ב-method בשם get_response. כמו שניתן לראות היישום מתבצע בצורה די קלה (כזכור article.title הוגדר בפרק הקודם של סדרת המאמרים אשר טיפל בצד השרת).

לקבלת הממשק מימין לשמאל, קובעים את משתנה הסביבה LANGUAGE ל-he_IL.UTF-8.
היישום הסופי נראה כך:
היישום

כל השאר מטפל בטעינת הממשק וקשירת האירועים השונים. הקוד די מדבר בעד עצמו. אם ישנם שאלות, כאן המקום לשאול.

כמובן שאפשר לשפר את היישום (בינאום, הרצה בפתיל נפרד את פונקציית קבלת המידע, חיווי מתאים וכן הלאה). הדוגמא כאן פשוטה כדי לשמור על בהירות וקלות ההבנה. שיפור היישום יהווה תרגיל מעניין.

קוד המקור עבור הפרוייקט זמין כאן.


עד כאן סדרת המאמרים הזו. נציין כי מטרת הסדרה, חוץ מהיכרות עם ,XML-RPC הייתה לספק רקע על כלים נוספים הזמינים למפתחים כדוגמת PEAR ו-glade.
 

קישורים רלוונטיים

· עוד על פיתוח
· חדשות מאת mksoft


הסיפור הנקרא ביותר בנושא פיתוח:
הטבלה המחזורית של האופרטורים

Google Ads

‏XML-RPC בצד הלקוח: פייתון ו-glade | כניסה / יצירת מנוי חדש | 0 תגובות
סף חסימה
  
ההערות הינן מטעם כותביהן. אין צוות האתר לוקח אחריות על תוכנן