فى هذه الجزئية سنتحدث عن Pango
Pango is a free and open source computing library for rendering internationalized texts in high quality. Different font backends can be used, allowing cross-platform support. (wikipedia)
Pango provides advanced font and text handling that is used for Gdk and Gtk.
فى المثال التالى نعرض كيفية تغيير الخط الخاص بال label
quotes.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows how to modify # the font of a label # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk import pango quotes = """Excess of joy is harder to bear than any amount of sorrow. The more one judges, the less one loves. There is no such thing as a great talent without great will power. """ class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.connect("destroy", gtk.main_quit) self.set_title("Quotes") label = gtk.Label(quotes) gtk.gdk.beep() fontdesc = pango.FontDescription("Purisa 10") label.modify_font(fontdesc) fix = gtk.Fixed() fix.put(label, 5, 5) self.add(fix) self.set_position(gtk.WIN_POS_CENTER) self.show_all() PyApp() gtk.main()
فى الكود بالأعلى، لدينا label به 3 اقتباسات.. ونريد تغيير الخط الى Pursia 10
quotes = """Excess of joy is harder to bear than any amount of sorrow. The more one judges, the less one loves. There is no such thing as a great talent without great will power. """
النص الظاهر على ال label
fontdesc = pango.FontDescription("Purisa 10")الصف FontDescription يستخدم لتحديد سمات الخط المطلوب،
label.modify_font(fontdesc)نقوم بتغيير الخط
Figure: Quotations
فى المثال التالى سنعرض كافة خطوط النظام فى شجرة
systemfonts.py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example lists all available # fonts on a system in a TreeView widget # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk import pango class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(350, 250) self.set_border_width(8) self.connect("destroy", gtk.main_quit) self.set_title("System fonts") sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) context = self.create_pango_context() self.fam = context.list_families() store = self.create_model() treeView = gtk.TreeView(store) treeView.set_rules_hint(True) sw.add(treeView) self.create_column(treeView) self.add(sw) self.set_position(gtk.WIN_POS_CENTER) self.show_all() def create_column(self, treeView): rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("FontName", rendererText, text=0) column.set_sort_column_id(0) treeView.append_column(column) def create_model(self): store = gtk.ListStore(str) for ff in self.fam: store.append([ff.get_name()]) return store PyApp() gtk.main()
هذا المثال يعرض كل الخطوط المتاحة
context = self.create_pango_context()هذا الكود ينشئ متغير سياق Context، يشمل المعلومات العامة حول عملية ال rendering
self.fam = context.list_families()من متغير السياق نحصل على كل عائلات الخطوط المتاحة
for ff in self.fam: store.append([ff.get_name()])
نحصل على اسماء كل عائلة -تمثل فى كائن من الصف FontFamily- ونخزنها فى مخزن البيانات
Figure: System fonts
Pango معتادة للعمل مع ال unicode
unicode.py #!/usr/bin/python # -*- coding: utf-8 -*- # ZetCode PyGTK tutorial # # This example displays text # in azbuka # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk import pango obj = unicode(u'''Фёдор Михайлович Достоевский родился 30 октября (11 ноября) 1821 года в Москве. Был вторым из 7 детей. Отец, Михаил Андреевич, работал вгоспитале для бедных. Мать, Мария Фёдоровна (в девичестве Нечаева), происходила из купеческого рода.''') class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.connect("destroy", gtk.main_quit) self.set_title("Unicode") label = gtk.Label(obj.encode('utf-8')) fontdesc = pango.FontDescription("Purisa 10") label.modify_font(fontdesc) fix = gtk.Fixed() fix.put(label, 5, 5) self.add(fix) self.set_position(gtk.WIN_POS_CENTER) self.show_all() PyApp() gtk.main()
نعرض بعض النص المكتوب ب azbuka
# -*- coding: utf-8 -*-للتعامل المباشر مع النصوص العالمية يجب ان نضيف السطر السحرى -يجب ان يكون فى اول او ثانى سطر-
obj = unicode(u'''Фёдор Михайлович Достоевский родился 30 октября (11 ноября) 1821 года в Москве. Был вторым из 7 детей. Отец, Михаил Андреевич, работал вгоспитале для бедных. Мать, Мария Фёдоровна (в девичестве Нечаева), происходила из купеческого рода.''')
هذا النص بال azbuka. ونضعه على label
Figure: Unicode
سمات Pango يتم تطبيقها على جزء من نص
attributes.py #!/usr/bin/python # ZetCode PyGTK tutorial # # In this program we work with # pango attributes # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk import pango text = "Valour fate kinship darkness" class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.connect("destroy", gtk.main_quit) self.set_title("Attributes") label = gtk.Label(text) attr = pango.AttrList() fg_color = pango.AttrForeground(65535, 0, 0, 0, 6) underline = pango.AttrUnderline(pango.UNDERLINE_DOUBLE, 7, 11) bg_color = pango.AttrBackground(40000, 40000, 40000, 12, 19) strike = pango.AttrStrikethrough(True, 20, 29) size = pango.AttrSize(30000, 0, -1) attr.insert(fg_color) attr.insert(underline) attr.insert(bg_color) attr.insert(size) attr.insert(strike) label.set_attributes(attr) fix = gtk.Fixed() fix.put(label, 5, 5) self.add(fix) self.set_position(gtk.WIN_POS_CENTER) self.show_all() PyApp() gtk.main()
فى المثال لدينا 4 سمات سيتم اضافتها على النص
attr = pango.AttrList()قائمة السمات هى كائن يستخدم لحفظ السمات
fg_color = pango.AttrForeground(65535, 0, 0, 0, 6)هنا ننشئ سمة تعرض النص فى لون احمر، واول 3 معاملات هما قيم ال R G B واخر معاملين هما مركز البداية والنهاية على النص اللذى سيتم تطبيق السمة عليه.
label.set_attributes(attr)نضع السمات لل label بإستخدام الطريقة set_attributes
Figure: Pango attributes
فى هذه الجزئية تعاملنا مع مكتبة Pango
Home Contents Top of Page