الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار حول برمجة واجهة رسومية بـبرنامج glade

بدأه البايثوني في 4 ديسمبر 2012 · 3 رد · 937 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا اشتغل على windows

كيف استعمل برنامج glade لبرمجة الواجهات الرسومية

الذي لم افهمه جيدا هو , هل أثبت pygtk و برنامج glade في الجهاز , ام glade وحده يكفي

+

عند انشاء واجهة بهذا البرنامج اين احفظها اي الملف الناتج

وكيف سيجد python هذا الملف , اي لكي اربطه مع الكود البرمجي

واذا ممكن شرح الطريقة الصحيحة للربط

+

وفي النهاية عند اتمام الربط كيف احفظ برنامجي وباي امتداد , و هل يمكن بعدها تشغيله على اي جهاز أخر

هل يكون هذا البرنامج قابل للتشغيل على الانظمة الاخرى

انا جديد في هذا المنتدى و ارجو ان احصل على مساعدتكم لي ان شاء الله

#2

يلزمك كلاهما. برنامج glade ستصمم به الواجهة وتحفظها في ملف xml يصف الواجهة وعناصرها. ثم ستقوم gtk بإستخدام gtk.Builder (هناك شروحات قديمة تستخدم gtk.glade تجنبها) بتحميل محتويات هذا الملف ومعالجة كل عقدة في ملف الـxml للحصول على معلومات حول العنصر الرسومي، كحجمه والكلام المكتوب عليه وغيرها من التفاصيل.

قم بتحميل glade لويندوز من هنا : http://ftp.gnome.org/pub/GNOME/binaries/win32/glade/

وحمل pygtk من هنا : http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/

قم بفتح glade وصمم أي واجهة وإحفظ ملف الواجهة بالإسم app.glade مثلاً. هذا مثال لواجهة بها نافذة رئيسية وزر بالمنتصف:

post-231926-041554000 1354643300_thumb.p

ملف الـxml الناتج (لاحظ أن معلومات النافذة من أبعادها والعنوان ومعلومات الزر موجودة هنا):

<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window1">
    <property name="width_request">300</property>
    <property name="height_request">300</property>
    <property name="title" translatable="yes">نافذة</property>
    <child>
      <object class="GtkTable" id="table1">
        <property name="visible">True</property>
        <property name="n_rows">3</property>
        <property name="n_columns">3</property>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">خروج</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="right_attach">2</property>
            <property name="top_attach">1</property>
            <property name="bottom_attach">2</property>
          </packing>
        </child>
        <child>
          <object class="GtkFixed" id="fixed1">
            <property name="visible">True</property>
          </object>
        </child>
        <child>
          <object class="GtkFixed" id="fixed2">
            <property name="visible">True</property>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="right_attach">2</property>
          </packing>
        </child>
        <child>
          <object class="GtkFixed" id="fixed3">
            <property name="visible">True</property>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="right_attach">3</property>
          </packing>
        </child>
        <child>
          <object class="GtkFixed" id="fixed4">
            <property name="visible">True</property>
          </object>
          <packing>
            <property name="top_attach">1</property>
            <property name="bottom_attach">2</property>
          </packing>
        </child>
        <child>
          <object class="GtkFixed" id="fixed5">
            <property name="visible">True</property>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="right_attach">3</property>
            <property name="top_attach">1</property>
            <property name="bottom_attach">2</property>
          </packing>
        </child>
        <child>
          <object class="GtkFixed" id="fixed6">
            <property name="visible">True</property>
          </object>
          <packing>
            <property name="top_attach">2</property>
            <property name="bottom_attach">3</property>
          </packing>
        </child>
        <child>
          <object class="GtkFixed" id="fixed7">
            <property name="visible">True</property>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="right_attach">2</property>
            <property name="top_attach">2</property>
            <property name="bottom_attach">3</property>
          </packing>
        </child>
        <child>
          <object class="GtkFixed" id="fixed8">
            <property name="visible">True</property>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="right_attach">3</property>
            <property name="top_attach">2</property>
            <property name="bottom_attach">3</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

وهذا مثال لبرنامج gtk يستخدم هذا الملف:

# -*- coding: utf-8 -*-
#!/usr/bin/python

import gtk

class GtkGladeExample(object):
    def __init__(self):
        self.builder = gtk.Builder()

        self.builder.add_from_file("app.glade")             # تحميل الملف الذي يصف النافذة

        self.window = self.builder.get_object("window1")    # الحصول على كائن النافذة
        self.button = self.builder.get_object("button1")    # الحصول على كائن الزر

        self.window.connect("destroy", gtk.main_quit)       # ربط حدث بدالة- هنا ربطنا حدث تدمير الكائن، النافذة، بدالة الخروج
        self.button.connect("clicked", self.on_app_exit)    # ويمكن ربط الكائن بدالة تحددها. فهنا ربطنا حدث ضعط الزر بالدالة تخصنا

        self.window.show()                                  # عرض النافذة

    def on_app_exit(self, widget, data=None):
        print("You've just clicked: " + widget.get_label())
        print("So, bye bye!")
        gtk.main_quit()

app = GtkGladeExample() # كائن من مجموعتنا السابقة
gtk.main()              # إدخال البرنامج في حلقة التكرار
المرفقات
1.png
2
#3

بارك الله فيك أخي على التوضيح

بخصوص هذا الامر

self.builder.add_from_file("app.glade")

هل يجلبه البايثون من اي مكان محفوظ فيه ؟ اي اين يجب ان اضع ذلك الملف ليحمله البايثون مثل (الملف مخزن في bureau هل هذا جيد )

باي امتداد احفظه في النهاية لاتمكن من تشغيله

ارجو التوضيح أكثر وبارك الله فيه و جزاك خير الجزاء

#4

إذا لم تتمكن من تشغيله فهناك خطأ، لذا أنظر لرسالة الخطأ فالسبب سيكون مذكور فيها.

في المثال إفترضت أن الملف app.glade موجود في نفس المجلد الذي به البرنامج app.py. إذا اردت وضع الملف app.glade في مجلد فرعي كـbureau فيلزم تعديل السطر ليصبح:

self.builder.add_from_file("bureau/app.glade")

ويمكنك تسمية app.glade بأي إسم واي إمتداد.

مواضيع مشابهة