Home  Contents

Pango

فى هذه الجزئية سنتحدث عن 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.



Simple example

فى المثال التالى نعرض كيفية تغيير الخط الخاص بال 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)

نقوم بتغيير الخط


Quotations

Figure: Quotations



System fonts

فى المثال التالى سنعرض كافة خطوط النظام فى شجرة

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- ونخزنها فى مخزن البيانات


System fonts

Figure: System fonts



Unicode

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


Unicode

Figure: Unicode



Attributes

سمات 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




Pango attributes

Figure: Pango attributes



فى هذه الجزئية تعاملنا مع مكتبة Pango


Home ‡ Contents ‡ Top of Page