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

كيفية ايقاف Qthread في بايثون

بدأه محمد محمود يوسف في 11 نوفمبر 2014 · 0 رد · 581 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم ورحمة الله وبركاته

 

عندي برنامج له واجهة رسومية يشبه الي حد كبير متصفح انترنت متعدد الالسنة وكل تبويب جديد يفتح اقوم بفتحه داخل QThread منفصل حيث يقوم كل thread بالدخول في حلقة تكرارية طويلة تصل الي ساعات وبالتالي اريد ان يستطيع المستخدم بايقاف ايا من ال threads في اي وقت

حتي الان كل شيء تم انجازه الا امكانية ايقاف الحلقة التكرارية

الكود اسفله تقوم فكرته علي الاتي :

دالة اسمها campaign_loop في الفورم الرئيسي وفيها الحلقة التكرارية

كلاس موروثة من Qthread وبها دالة run تم فيها فقط عمل emit ل signal سميتها loop

في كل مرة يضغط المستخدم علي زر start يقوم البرنامج باخذ قيم الكنترولز من الفورم وتمريرها الي الدالة campaign_loop ثم يبدأ ال thread عن طريق انه يقوم بتعريف متغير جديد لل thread ويقوم بتشغيله واضافة تاب جديد مع زر ايقاف

في زر الايقاف يتم ربطه بدالة فيها جملة واحدة وهي ايقاف الthread باستخدام terminate

 

الكود مجرد مثال فقط

class Main(QMainWindow):
    def btStart(self):
        self.mythread = BrowserThread()
        self.connect(self.mythread, SIGNAL('loop()'), self.campaign_loop, Qt.AutoConnection)
        self.mythread.start()

    def btStop(self):
        self.mythread.terminate()

    def campaign_loop(self):
        loop goes here

class BrowserThread(QThread):
    def __init__(self):
        QThread.__init__(self)

    def run(self):
        self.emit(SIGNAL('loop()'))

اشكركم علي تعاونكم

لا اله الا الله عليها نحيا وعليها نموت وفي سبيلها نجاهد

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…