playThread向movePhead()发出信号以移动播放头。这是平滑更新的,直到需要DynamicThread,这需要在播放过程中进行大量处理,例如在GUI中移动和创建对象。
创建DynamicThread时会发生两件事:
在正在处理
DynamicThread处理完毕后,屏幕停止更新 自动,仅在滚动关闭然后重新开启时更新。
我在每个过程中的不同点尝试了以下操作但没有结果:
app.processEvents(),update()和repaint()
通过制作对主窗口中的数据结构的所有调用 全局在DynamicThread的run()函数
我是线程新手,所以可能存在一个简单的结构问题。
请告诉我可能遗失的内容。
我使用的是开源音序器模板:https://github.com/rhetr/seq-gui
def movePhead(x):
playHead.setPos(QtCore.QPointF(x, 0))
y = main.view.verticalScrollBar().sliderPosition() + 125
main.view.centerOn(x, y)
class DynamicThread(QtCore.QThread):
def __init__(self, v1, v2, v3, v4, v5):
super(DynamiteThread , self).__init__()
self.signal = QtCore.SIGNAL("signal")
self.v1, self.v2, self.v3, self.v4, self.v5 = v1, v2, v3, v4, v5
self.start()
def stop(self):
self.terminate()
def run(self):
self.process(self.v1, self.v2, self.v3, self.v4, self.v5)
self.stop()
class PlayThread(QtCore.QThread):
def __init__(self):
super(PlayThread , self).__init__()
self.signal = QtCore.SIGNAL("signal")
def stop(self):
self.terminate()
def run(self):
global xLocToNoteItems
global xLocToRhythms
global currentLLindex
for xloc in xrange(currentLLindex + 1, len(orderedXlocations)):
currentLLindex = xloc
for noteItem in xLocToNoteItems[orderedXlocations[xloc]]:
player.note_on(noteItem.note[0], noteItem.note[3], 1)
self.emit(self.signal, orderedXlocations[xloc] - 31.5)
offtime = xLocToRhythms[orderedXlocations[xloc]]
time.sleep(offtime / 2.0)
for noteItem in xLocToNoteItems[orderedXlocations[xloc]]:
player.note_off(noteItem.note[0], noteItem.note[3], 1)