PythonQT界面卡死问题

针对一运行就时间长,有延时的方法就卡死问题,可以用进程、线程、进程池多种办法来解决,让界面进程和时间长有延时的进程分开运行,就可以避免运行时界面卡死的问题

下面是我写的demo,供参考

# -*- coding: utf-8 -*-


"""
Module implementing MainWindow.
"""

from PyQt4.QtGui import QMainWindow
from PyQt4.QtCore import pyqtSignature,pyqtSlot
from PyQt4 import QtGui,QtCore
from Ui_test4 import Ui_MainWindow
import databases2 
import random
import TestRecord
from multiprocessing import Process,Pool
import time

class work(Process):  #process
    def __init__(self,num):
        Process.__init__(self)
        self.num = num
        
    def run(self):
        clock = 0
        time.sleep(2)
        clock += 2
        print "%d time waste! "%clock      
        time.sleep(2)
        clock += 2
        print "%d time waste! "%clock
        time.sleep(2)
        clock += 2
        print "%d time waste! "%clock
        time.sleep(2)
        clock += 2
        print "%d time waste! "%clock
        time.sleep(2)
        clock += 2
        print "%d time waste! "%clock
        if self.num == 1:
            print "time waste 1 stop"
        else :
            print "time waste 2 stop"
            
def waste_time(num):
    clock = 0
    time.sleep(2)
    clock += 2
    print "%d time waste! "%clock      
    time.sleep(2)
    clock += 2
    print "%d time waste! "%clock
    time.sleep(2)
    clock += 2
    print "%d time waste! "%clock
    time.sleep(2)
    clock += 2
    print "%d time waste! "%clock
    time.sleep(2)
    clock += 2
    print "%d time waste! "%clock
    if num == 1:
        print "time waste 1 stop"
    else :
        print "time waste 2 stop"


class info_lcd():
    
    lcd_number = 0.0


class MainWindow(QMainWindow, Ui_MainWindow):
    """
    Class documentation goes here.
    """
   
    def __init__(self, parent = None):
        """
        Constructor
        """
        QMainWindow.__init__(self, parent)
        self.setupUi(self)
        info_lcd.lcd_number = 0
    
    @pyqtSignature("")
    def Read_data(self):
        ramdom_number = random.uniform(0,20)
        self.lcdNumber.display(ramdom_number)
        info_lcd.lcd_number = self.lcdNumber.value()
        self.test_record = TestRecord.InfoHandle()
        self.test_record.AddCurrentInfoToSystemData(info_lcd)
        
    @pyqtSlot() 
    def on_pushButton_clicked(self):         #get the data
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.daq = Process(target = self.Read_data())
        
    @pyqtSlot()   
    def on_pushButton_2_clicked(self):
        """
        Slot documentation goes here
        """
        # TODO: not implemented yet
        number = self.lcdNumber.value()
        self.textEdit_2.setText(str(number))
        """
        Use single process to run Procedure
        """
        self.run_use_single_process()
        """
        Use Process to run Procedure
        """
#        self.run_use_multiprocess()
        """
        Use Pool to Run Procedure
        """
#        self.run_use_pool()
    @pyqtSlot()     
    def on_pushButton_3_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.database=databases2.Main()
        self.database.show()
    @pyqtSlot()     
    def run_use_single_process(self):   
        start = time.time()
        waste_time(1)
        waste_time(2)  
        end = time.time()
        print 'Task Frank runs %0.2f seconds.' %(end - start)   
              
    def run_use_multiprocess(self):
        start = time.time()
        self.work1 = work(1)
        self.work2 = work(2)
        self.work1.start()
        self.work2.start()
        end = time.time()
        print 'Task Frank runs %0.2f seconds.' %(end - start)
                
    def run_use_pool(self):
        
        start = time.time()
        pool = Pool(processes = 3)
        pool.apply_async(waste_time,(1,))
        pool.apply_async(waste_time,(2,))
        pool.close()
        end = time.time()
        print 'Task Frank runs %0.2f seconds.' %(end - start)
if __name__ == "__main__":
    import sys
    
    app = QtGui.QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    sys.exit(app.exec_())
    


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值