أكثر

كيف يمكنني إضافة إجراء برمجيًا من شريط أدوات QGIS إلى شريط الأدوات المخصص الخاص بي؟

كيف يمكنني إضافة إجراء برمجيًا من شريط أدوات QGIS إلى شريط الأدوات المخصص الخاص بي؟


لدي شريط أدوات وأريد أن يكون له إجراء موجود بالفعل ، ولكن التحقق من الوثائق لم أجد سوى طرق لإضافة إجراءات تم إنشاؤها حديثًا ، وليست موجودة بالفعل. هل هناك طريقة للقيام بذلك؟

الإجراء الذي أريد إضافته هو أداة اللمس والتكبير والتحريك من شريط أدوات التنقل في الخريطة. أعلم أنه يمكنني الإشارة إليه بهذه الطريقة:

qgis.utils.iface.mapNavToolToolBar (). الإجراءات () [0]

لكن لا يوجد شيء يمكنني فعله به.


انت تحتاج:

لإضافة شريط أدوات جديد باستخدام:

toolbar = iface.addToolBar (u'My test ')

بعد ذلك ، أضف الإجراء الأصلي إلى الملف الذي تم إنشاؤه حديثًاشريط الأدوات:

# مثال لشريط الأدوات pan.addAction (iface.actionPan ())

إذا كنت تريد القائمة الكاملة للإجراءات ، فانتقل إلى وثائق QGisInterface API.


قد تجد أنه من المفيد إلقاء نظرة على الكود الذي تم إنشاؤه بواسطة منشئ البرنامج المساعد المكون الإضافي ، وخاصة ملفات add_action () الطريقة التي يولدها ، وهو ما يربط أيقونات البرنامج المساعد في أشرطة الأدوات والقوائم.

يبدو هذا المقتطف واعدًا ...

إذا كان add_to_toolbar: self.toolbar.addAction (إجراء)

لقد اكتشفت بالفعل كيفية الحصول علىعمل(كائن QAction). الآن تحتاج فقط إلى المقتطف للحصول على شريط الأدوات الذي تريد إضافة الرمز إليه.

بالنظر إلى واجهة برمجة التطبيقات لـ qgisInterface ، يبدو أن هناك بالفعل طريقة تتيح لك إنشاء شريط أدوات ...

myaction = qgis.utils.iface.mapNavToolToolBar (). Actions () [0] mytoolbar = qgis.utils.iface.addToolBar ("helloworld") mytoolbar.addAction (myaction)

فقط جربت ذلك في وحدة التحكم وهو يعمل. (إذا لم تظهر ، فانقر بزر الماوس الأيمن على خلفية شريط الأدوات وتأكد من تحديد "helloworld")

تعديل

لقد أدركت للتو أنك تريد أن تغمرك في شريط أدوات موجود لم تقم بإنشائه بنفسك.

واجهة QgisيمتدQObject، الذي يحتوي على ملفfindChild (النوع والاسم)طريقة. ومع ذلك ، يؤدي تشغيل هذا من وحدة التحكم إلى إرجاع قائمة فارغة

print qgis.utils.iface.findChildren (PyQt4.QtGui.QToolBar ، u'helloworld ') >>> []

نأمل أن يجيب شخص لديه معرفة أكثر بـ Qt على هذا. أعتقد أنه قد تكون هناك مشكلة في قراءة مثل هذه البيانات عبر سلاسل الرسائل: /


شاهد الفيديو: QGIS - Create New Shapefile