إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

في دالة sleep() و pyqt

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [مشكلة] في دالة sleep() و pyqt

    السلام عليكم

    قمت ببرمجة تطبيق pyqt

    يحتوي على زر واربع مدخلات من نوع lineedit

    عند ضغط الزر يقوم التطبيق بنسخ من الخانه الأولى ولصقها في الثاني

    ومن الخانه الثالثه ولصقها في الرابعه

    المشكله لدي أريد أن أضع توقيت بين العمليتين

    قمت بإستخدام دالة sleep ولكن لم يصبح بينهما فاصل زمني

    لماذا لم تعمل دالة sleep? وما هو المناسب لهذه المشكله؟

    أنظر الكود التالي

    كود PHP:
            ui.lineedit1.selectAll() 
            
    ui.lineedit1.copy() 
            
    ui.lineedit3.paste() 
            
    ui.lineedit1.deselect(); 
             
            
    ui.lineedit2.selectAll() 
            
    ui.lineedit2.copy() 
            
    sleep(3
            
    ui.lineedit4.paste() 
            
    ui.lineedit2.deselect() 
    جزاكم الله خيرا

  • #2
    لا يوجد حل ...

    طيب ألا يوجد دالة بديله لها في qt نجربها ...؟

    تعليق


    • #3
      السلام عليكم ورحمه الله وبركاته

      هل يقوم الكود باظهار رساله خطأ عند داله sleep اذا كان فانت لم تقم بعمل import للكلاس time

      اذا كانت تعمل ولكن لا ترى فاصل زمنى فأعتقد انه عليك زياده القميه 3 الى 100 مثلا لترى الفرق

      راجع الرابط التالى
      http://docs.python.org/library/time.html#time.sleep

      اذا كانت المشكله مازلت قائمه فيمكنك ارفاق الكود او كتابه كود مصغر يحتوى على المشكله وسأحاول مساعدتك باذن الله

      0BLACK0

      No Pains No Gains



      تعليق


      • #4
        أشكرك اخي 0BLACK0 على المساعده


        المشكله ان كود الوقت يعمم عليهم جميعا

        أنا اريد ان يصبح فاصل زمني بين عملية النسخ واللصق

        هذا الكودين

        ----------------


        كود التطبيق ucopy.py


        كود PHP:
        # -*- coding: utf-8 -*-

        from PyQt4 import QtCoreQtGui
        from PyQt4
        .QtGui import QMainWindow
        from PyQt4
        .QtCore import pyqtSignature
        from time import sleep
        from Ui_ucopy import Ui_MainWindow

        class MainWindow(QMainWindowUi_MainWindow):

            
        def __init__(selfparent None):
                
        QMainWindow.__init__(selfparent)
                
        self.setupUi(self)
            
            @
        pyqtSignature("")
            
        def on_pushButton_clicked(self):
                
                
        self.lineEdit .selectAll() 
                
        self.lineEdit .copy() 
                
        self.lineEdit_3.paste() 
                
        self.lineEdit .deselect(); 
                
        sleep(5)
                
        self.lineEdit_2.selectAll() 
                
        self.lineEdit_2.copy() 
                
        self.lineEdit_4.paste() 
                
        self.lineEdit_2.deselect() 


        if 
        __name__ == "__main__":
            
        import sys
            app 
        QtGui.QApplication(sys.argv)
            
        ui MainWindow()
            
        ui.show()
            
        sys.exit(app.exec_()) 
        كود الواجهه Ui_ucopy.py

        كود PHP:
        from PyQt4 import QtCoreQtGui

        class Ui_MainWindow(object):
            
        def setupUi(selfMainWindow):
                
        MainWindow.setObjectName("MainWindow")
                
        MainWindow.resize(498354)
                
        self.centralWidget QtGui.QWidget(MainWindow)
                
        self.centralWidget.setObjectName("centralWidget")
                
        self.lineEdit QtGui.QLineEdit(self.centralWidget)
                
        self.lineEdit.setGeometry(QtCore.QRect(1604022131))
                
        self.lineEdit.setObjectName("lineEdit")
                
        self.lineEdit_2 QtGui.QLineEdit(self.centralWidget)
                
        self.lineEdit_2.setGeometry(QtCore.QRect(1608022131))
                
        self.lineEdit_2.setObjectName("lineEdit_2")
                
        self.lineEdit_3 QtGui.QLineEdit(self.centralWidget)
                
        self.lineEdit_3.setGeometry(QtCore.QRect(16012022131))
                
        self.lineEdit_3.setObjectName("lineEdit_3")
                
        self.lineEdit_4 QtGui.QLineEdit(self.centralWidget)
                
        self.lineEdit_4.setGeometry(QtCore.QRect(16016022131))
                
        self.lineEdit_4.setObjectName("lineEdit_4")
                
        self.pushButton QtGui.QPushButton(self.centralWidget)
                
        self.pushButton.setGeometry(QtCore.QRect(21022011151))
                
        self.pushButton.setObjectName("pushButton")
                
        MainWindow.setCentralWidget(self.centralWidget)

                
        self.retranslateUi(MainWindow)
                
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

            
        def retranslateUi(selfMainWindow):
                
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow""MainWindow"NoneQtGui.QApplication.UnicodeUTF8))
                
        self.pushButton.setText(QtGui.QApplication.translate("MainWindow""PushButton"NoneQtGui.QApplication.UnicodeUTF8))


        if 
        __name__ == "__main__":
            
        import sys
            app 
        QtGui.QApplication(sys.argv)
            
        MainWindow QtGui.QMainWindow()
            
        ui Ui_MainWindow()
            
        ui.setupUi(MainWindow)
            
        MainWindow.show()
            
        sys.exit(app.exec_()) 
        الكود يقوم بالنسخ من الخانه الأولى ولصقها في الثالثه

        والنسخ من الخانه الثانيه ولصقها في الثالثه

        أريد أن يكون هنالك فاصل زمني بين العمليتين


        وشكرا جزيلا لك

        تعليق


        • #5
          بسم الله الرحمن الرحيم

          اعتقد انه عند استخدام sleep فان الداله الاساسيه او اللوب الاساسى سيتوقف وهذا سيمنع الواجهه من اكمال تنفيذ العمليه

          لا اعرف اذا كان الحل الذى سأطرحه هو الحل السليم لهذه المشكله . يمكن ان يفيدك الاخوه الاعضاء بحلول اخرى ان شاء الله

          كود التطبيق ucopy.py


          كود:
          [LEFT] # -*- coding: utf-8 -*-
          
          from PyQt4.QtCore import *
          from PyQt4.QtGui import *
          #from PyQt4 import QtCore, QtGui
          #from PyQt4.QtGui import QMainWindow
          #from PyQt4.QtCore import pyqtSignature
          from time import sleep
          from Ui_ucopy import Ui_MainWindow
          
          class MainWindow(QMainWindow, Ui_MainWindow):
          
              def __init__(self, parent = None):
                  QMainWindow.__init__(self, parent)
                  self.setupUi(self)
              
              @pyqtSignature("")
              def on_pushButton_clicked(self):
                  
                  new_thread=the_new_thread(self)
                  new_thread.start()
                  
          #        self.lineEdit .selectAll() 
          #        self.lineEdit .copy() 
          #        self.lineEdit_3.paste() 
          #        self.lineEdit .deselect(); 
          #        sleep(5)
          #        self.lineEdit_2.selectAll() 
          #        self.lineEdit_2.copy() 
          #        self.lineEdit_4.paste() 
          #        self.lineEdit_2.deselect() 
          
          class the_new_thread(QThread):
              def __init__(self, parent):
                  QThread.__init__(self, parent)
                  self.self2=parent
              def run(self):
                  self.self2.lineEdit_3.setText(self.self2.lineEdit.text()) #-----> put your copy paste here
                  sleep(3)
                  self.self2.lineEdit_4.setText(self.self2.lineEdit_2.text()) #-----> put your copy paste here
          
          
          if __name__ == "__main__":
              import sys
              app = QApplication(sys.argv)
              ui = MainWindow()
              ui.show()
              sys.exit(app.exec_())
          [/LEFT]

          لقد قمت بوضع كلاس جديد من نوع QThread وهو يقوم بتنفيذ عمليه النسخ واللصق مع وجود فاصل زمنى وعدم التأثير على الواجهه الاساسيه للمستخدم GUI

          مع العلم ان self.self2 فى الكلاس الثانى = self فى الكلاس الاول

          اتمنى ان اكون قد ساعدتك ولو قليلا

          0BLACK0

          No Pains No Gains



          تعليق


          • #6
            أشكرك أخي وأنا مقدر مساعدتك

            ولكن المشكله انني اريد تنفيذ الكود بعملية النسخ واللصق

            وعند تعديل كودك بعملية النسخ واللصق يظهر خطأ

            انظر الكود التالي

            كود PHP:
             # -*- coding: utf-8 -*-

            from PyQt4.QtCore import *
            from PyQt4.QtGui import *
            #from PyQt4 import QtCore, QtGui
            #from PyQt4.QtGui import QMainWindow
            #from PyQt4.QtCore import pyqtSignature
            from time import sleep
            from Ui_ucopy import Ui_MainWindow

            class MainWindow(QMainWindowUi_MainWindow):

                
            def __init__(selfparent None):
                    
            QMainWindow.__init__(selfparent)
                    
            self.setupUi(self)
                
                @
            pyqtSignature("")
                
            def on_pushButton_clicked(self):
                    
                    
            new_thread=the_new_thread(self)
                    
            new_thread.start()
                    

            class 
            the_new_thread(QThread):
                
            def __init__(selfparent):
                    
            QThread.__init__(selfparent)
                    
            self.self2=parent

                def run
            (self):
            #     self.self2.lineEdit_3.setText(self.self2.lineEdit.text()) #-----> put your copy paste here
            #     sleep(3)
            #     self.self2.lineEdit_4.setText(self.self2.lineEdit_2.text()) #-----> put your copy paste here


                    
            self.self2.lineEdit.selectAll() 
                    
            self.self2.lineEdit.copy() 
                    
            self.self2.lineEdit_3.paste() 
                    
            self.self2.lineEdit.deselect()
                    
                    
            sleep(3)

                    
            self.self2.lineEdit_2.selectAll() 
                    
            self.self2.lineEdit_2.copy() 
                    
            self.self2.lineEdit_4.paste() 
                    
            self.self2.lineEdit_2.deselect()



            if 
            __name__ == "__main__":
                
            import sys
                app 
            QApplication(sys.argv)
                
            ui MainWindow()
                
            ui.show()
                
            sys.exit(app.exec_()) 
            الخطأ الظاهر

            كود:
              p, li { white-space: pre-wrap; }  [COLOR=#ff0000]QPixmap: It is not safe to use pixmaps outside the GUI thread[/COLOR]
             [COLOR=#ff0000]<unknown>: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.[/COLOR]

            تعليق


            • #7
              يبدو ان المشكله تحدث بسبب تعارض بين past و sleep

              تعليق


              • #8
                بسم الله الرحمن الرحيم


                مرحبا اخى العزيز معذره لتأخرى فى الرد وذلك بسبب العمل

                عند تحويلك للكود السابق ليقوم بعمليه النسخ واللصق ظهر لديك خطأ

                تفسير هذا الخطأ :
                اولا لابد ان تعرف ما هو ال thread هو خاصيه او داله تسمح للبرنامج لاداء اكثر من عمليه
                فى نفس الوقت وعند استخدامى له نتج ان البرنامج انقسم الى شقين وهما
                "الداله الرئيسيه او اللوب الاساسى او الواجهه الرسوميه" و
                "sleep الداله الثانيه او اللوب الثانى "

                المشكله هنا تكمن فى داله copy لانها تقوم بنسخ محتويات الLineEdit الى ما يسمى ب QPixmap وهذه الداله مخصصه للرسم وهنا ظهر الخطأ حيث انه هناك عدة تحذيرات من استخدام هذه الداله فى اى للوب غير اللوب الاساسى او الداله الرئيسيه وطبعا فى حالتنا قمنا باستدعائها فى اللوب الثانى او فى اللوب الفرعى

                وكان الحل هو وضع داله copy فى الداله الرئيسيه عن طريق استخدام signal/slot

                السطر 17 قمت بتعريف اللوب الثانى ولكن لم اقم بتنفيذه بعد

                السطر 18 قمت بعمل ربط بين اللوب الثانى الذى تم انشائه وداله اسمها copy_past وهى تأخذ متغير من نوع List يحتوى على عنصرين
                الاول عنوان الذاكره للlineEdit الذى سيتم النسخ منه
                الثانى
                عنوان الذاكره للlineEdit الذى سيتم اللصق اليه
                مع ملاحظه ان داله copy_past تقع فى اللوب الاساسى تحت الكلاس الاساسى فى السطر 21

                السطر 36 ارسال اشاره من الكلاس الثانى للكلاس الاول ليقوم بتنفيذ السطر 18
                ملاحظه الذى سيقوم بالتنفيذ هو الكلاس الاول , الكلاس الثانى يحدد متى سيتم ارسال الاشاره وايضا يقوم بارسال متغير من نوع list كما تم شرحه من قبل

                اعتقد ان هناك طرق افضل لكن هذا هو المتاح فى ذهنى حاليا


                الكود بعد التعديل
                كود التطبيق ucopy.py
                كود:
                [LEFT]# -*- coding: utf-8 -*-
                
                from PyQt4.QtCore import *
                from PyQt4.QtGui import *
                from time import sleep
                from Ui_ucopy import Ui_MainWindow
                
                class MainWindow(QMainWindow, Ui_MainWindow):
                
                    def __init__(self, parent = None):
                        QMainWindow.__init__(self, parent)
                        self.setupUi(self)
                        
                    @pyqtSignature("")
                    def on_pushButton_clicked(self):
                        
                        new_thread=the_new_thread(self)
                        self.connect(new_thread, SIGNAL("New_X(PyQt_PyObject)"),self.copy_past) #--->add new custom signal
                        new_thread.start()
                        
                    def copy_past(self, list_of_custom_lineEdit):#--->"list_of_custom_lineEdit" contain list of '2' lineedit 
                
                        list_of_custom_lineEdit[0].selectAll() #--->[0] mean the lineedit u will copy from 
                        list_of_custom_lineEdit[0].copy() 
                        list_of_custom_lineEdit[1].paste()#--->[1] mean the lineedit u will paste to
                        
                        list_of_custom_lineEdit[1].deselect()
                
                
                class the_new_thread(QThread):
                    def __init__(self, parent):
                        QThread.__init__(self, parent)
                        self.self2=parent
                
                    def run(self):
                        self.emit(SIGNAL("New_X(PyQt_PyObject)"),(self.self2.lineEdit, self.self2.lineEdit_3))#--->emit the signal and pass list of (lineedit from, lineedit to)
                        sleep(3)
                        self.emit(SIGNAL("New_X(PyQt_PyObject)"),(self.self2.lineEdit_2, self.self2.lineEdit_4))
                
                
                if __name__ == "__main__":
                    import sys
                    app = QApplication(sys.argv)
                    ui = MainWindow()
                    ui.show()
                    sys.exit(app.exec_())  
                
                [/LEFT]
                0BLACK0

                No Pains No Gains



                تعليق


                • #9
                  ممكن أعرف لماذا تريد توقيتا بين الدالتين ؟

                  تعليق


                  • #10
                    0BLACK0

                    الله يحميك ويزيدك من علمه

                    أنا ممتن لك ...

                    أسئل الله أن يرزقك من حيث لا تحتسب

                    وفقك الله لما يحب ويرضاه
                    ---------------------


                    ممكن أعرف لماذا تريد توقيتا بين الدالتين ؟
                    أهلأ أخي أمين

                    لأن التطبيق الذي أبرمجه يتطلب ذلك

                    فهو ليس محصور بداخل البرنامج ولكن قمت بعمل تطبيق مبسط للمشكله ووضعته في المنتدى

                    حتى أسهل من عرض المشكله وأحصرها قدر الإمكان

                    تعليق


                    • #11
                      الحمد لله الذى رزقنى ما انا فيه من غير حول منى ولا قوة

                      ربنا يوفقك فى مشروعك



                      0BLACK0

                      No Pains No Gains



                      تعليق

                      يعمل...
                      X