pyqt多线程QThread

pyqt多线程QThread

'''
start():启动线程
  wait():阻止线程,直到满足如下条件之一
    (1)与此QThread对象关联的线程已完成执行(即从run返回时),如果线程完成执行,此函数返回True,如果线程尚未启动,也返回True
    (2)等待时间的单位是毫秒,如果时间是ULONG_MAX(默认值·),则等待,永远不会超时(线程必须从run返回),如果等待超时,此函数将会返回False
  sleep():强制当前线程睡眠多少秒
QThread类中的常用信号
  started:在开始执行run函数之前,从相关线程发射此信号
  finished:当程序完成业务逻辑时,从相关线程发射此信号
'''

import sys

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

sec = 0


class WorkThread(QThread):   # 创建多个任务可以建多个 WorkThread(QThread) 后面启动
    timer = pyqtSignal(str)  # 每隔1秒发送一次信号   str:可以传递参数
    end = pyqtSignal(str)  # 计数完成后发送一次信号

    def run(self):
        while True:
            self.sleep(1)  # 休眠1秒
            if sec == 5:
                self.end.emit(str(sec))  # 发送end信号  str:可以传递参数
                break
            self.timer.emit(str(sec))  # 发送timer信号  str:可以传递参数


class Counter(QWidget):

    def __init__(self, parent=None):
        super(Counter, self).__init__(parent)

        self.setWindowTitle("使用线程类(QThread)编写计数器")
        self.resize(300, 120)

        layout = QVBoxLayout()
        self.lcdNumber = QLCDNumber()
        layout.addWidget(self.lcdNumber)

        button = QPushButton('开始计数')
        layout.addWidget(button)

        self.workThread = WorkThread()

        self.workThread.timer.connect(self.countTime)
        self.workThread.end.connect(self.end)
        button.clicked.connect(self.work)

        self.setLayout(layout)

    def countTime(self, secs):
        global sec
        sec += 1
        print(secs)
        self.lcdNumber.display(sec)

    def end(self, secs):
        print(secs)
        QMessageBox.information(self, '消息', '计数结束', QMessageBox.Ok)

    def work(self):
        self.workThread.start()  # 多个任务可以创建多self.workThread.start()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Counter()
    form.show()
    sys.exit(app.exec_())

Calculate Angle of View



float $aperture = `getAttr perspShape.hfa`;
float $fl = `getAttr perspShape.focalLength`;
float $fov = $aperture * 0.5 / ( $fl * 0.03937 );
$fov = 2.0*atan($fov) / 3.14159 * 180.0;
print(" angle of view in degrees: " + $fov);

python 中文路径乱码

起因:最近写python的程序,读取含有中文目录下的文件,结果发现根本读取不了该中文目录下的文件,

原因:通过调试发现:该文件的目录乱码,目录无法解析,自然导致无法读取文件内容

解决方法:

Qt5学习笔记(4)——树形控件QtreeWidget(续)

QTreeWidget顾名思义,这是用来展示树型结构(也就是层次结构)的。Qt中实现树形结构可以使用QTreeWidget类,也可以使QTreeView类,QTreeWidget继承自QTreeView类。这个类需要同另外一个辅助类QTreeWidgetItem一同使用。不过,既然是提供方面的封装类,即便是看上去很复杂的树,在使用这个类的时候也是显得比较简单的。当不需要使用复杂的QTreeView的特性的时候,我们可以直接使用QTreeWidget代替。