باستخدام المواضيع وpyGST في التطبيق WX الثعبان
-
03-07-2019 - |
سؤال
وOK، حتى وأنا أكتب التطبيق، والتي تلعب الموسيقى مع الارتباطات pyGST.
وهذا يتطلب استخدام المواضيع للتعامل مع التشغيل. مكتبة الارتباطات يعالج معظم السيطرة موضوع بالنسبة لي، وهو لطيف (وما كنت أبحث عنه في منهم).
والآن، وأنا لم يكن لديك فهم كامل عن هذا المفهوم، لذلك سأكون حريصة على بعض المراجع. ولكن الطريقة وأنا أفهم ذلك، هو لا بد لي من إبلاغ الأساس التطبيق الذي يمكن استخدامه مواضيع متعددة.
وجمعت هذا من أمثلة على موقع جيستريمر، حيث استخدام هذه الدعوة:
gtk.gdk.threads_init()
gtk.main()
وهذا هو الخلفية. الآن الحصول على هذا. لقد وضعت هذه الخطوط في قانون بلدي، وأنها تعمل بشكل جيد. بلدي التطبيق يلعب الموسيقى بدلا من تحطمها كلما كان يحاول. ولكن هناك شيء لا يشعر الحق.
في الأمثلة التي حصلت تلك الخطوط من، فإنها تستخدم جتك عن واجهة المستخدم الرسومية كله، ولكن أريد أن استخدام كويدغيتس، لذلك يشعر خطأ استدعاء هذه الوظيفة جتك للقيام بذلك.
<القوي> هل هناك ما يعادل WX على ذلك؟ أو هو موافق لاستخدام هذا، وسوف لا تزال تعمل عبر منصة؟
وبالإضافة إلى ذلك، لا بد لي من معرفة كيفية قتل كل هذه المواضيع على الخروج (والذي لا يفعل الآن) أرى كيف تفعل ذلك في المثال باستخدام طريقة جتك مرة أخرى، لذلك مرة أخرى، وتبحث عن يعادل WX .
وPS: أعتقد أن هذا (أو الحل) قد تكون ذات صلة وظيفة wx.App.MainLoop ()، لكنني فقدت في محاولة لفهم كيفية عمل هذه الحلقة، لذلك مرة أخرى، سيكون موضع تقدير إشارات جيدة حول هذا ، ولكن أعتقد ليس من الضروري طالما لدي حل جيد.
المحلول
وحاول استخدام هذا بدلا من ذلك:
import gobject
gobject.threads_init()
وأتساءل كيف تأتي انها ليست مكتوبة في الطباعة الكبيرة في بداية كل الثعبان جيستريمر المساعد قطعة من الوثائق: فقط استغرق مني عدة ساعات للعثور عليه
.وأكثر قليلا من التفاصيل هنا .
نصائح أخرى
وليست لدي خبرة مع pyGST، ولكن النصيحة العامة لاستخدام المواضيع وكسبيثون هو تحديث فقط واجهة المستخدم الرسومية من الخيط الرئيسي (أي الخيط الذي يبدأ MainLoop). انظر http://wiki.wxpython.org/LongRunningTasks للحصول على مزيد من المعلومات.
وليست لدي خبرة مع الارتباطات الثعبان، ولكن لقد كان نجاح استخدام كويدغيتس وجيستريمر معا على ويندوز. والمشكلة هي أن كويدغيتس يدير حلقة أحداث Windows بينما يستخدم جيستريمر حلقة الحدث الخصلة. إذا كنت لا تبالي أي من الأحداث جيستريمر، يجب أن لا حاجة للقيام بأي شيء. ومع ذلك، إذا كنت تهتم لتلقي أي من الأحداث جيستريمر، سيكون لديك لتشغيل الخاصة الخصلة حلقة هذا الحدث الخاص بك (GMainLoop) في موضوع مستقل مع GMainContext منفصلة. استخدام gst_bus_create_watch لإنشاء مصدر الحدث GST، إضافة الاستدعاء إلى مصدر g_source_set_callback، ومن ثم إرفاقه سياق الرئيسي الخاص بك حلقة الحدث الخصلة مع g_source_attach. يمكنك بعد ذلك التعامل مع GST في رد، على سبيل المثال، لإعادة توجيه الأحداث إلى WX حلقة الحدث الرئيسي.