PyQt5多线程

时间:2017-07-04 15:42:34

标签: python python-3.x pyqt pyqt5 qthread

为什么代码不起作用?视频工作文件,当我试图在第二个标签显示文本时,它也显示出来。但如果我想像setText()中的当前时间那样连续更改值,我该怎么办?我是多线程的新手。

{{1}}

1 个答案:

答案 0 :(得分:2)

您不应该向主视图发送新窗口小部件(QLabel),因为它将是新标签,而不是原始标签,您应该发送str类型的文本。

preferredTransform

然后将其连接到let asset = AVAsset(url: url!) let composition = AVMutableComposition() let compositionTrack = composition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid) let videoTrack = asset.tracks(withMediaType: AVMediaTypeVideo).first try? compositionTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, asset.duration), of: videoTrack!, at: kCMTimeZero) compositionTrack.preferredTransform = (videoTrack?.preferredTransform)! let playerItem = AVPlayerItem(asset: composition) let filter = CIFilter(name: "CIColorInvert") playerItem.videoComposition = AVVideoComposition(asset: composition, applyingCIFiltersWithHandler: { (request: AVAsynchronousCIImageFilteringRequest) in filter?.setValue(request.sourceImage, forKey: kCIInputImageKey) request.finish(with: (filter?.outputImage)!, context: nil) }) .... the rest of code 函数:

class Thread(QThread):
    changePixmap = pyqtSignal(QPixmap)
    changeLabel = pyqtSignal(str)

    def run(self):
        [...]
        now = datetime.datetime.now()
        sec = now.second
        self.changeLabel.emit(str(sec))

完整代码:

setText

注意:我添加了stop方法以便能够停止线程并正确关闭,为此我还覆盖了closeEvent方法。另一个变化,我移动label1,因为我的屏幕不是那么大。