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