프로젝트 작업 중 이상한 문제가 발생했습니다. 나는 GUI와 상태 브라우저 역할을하는 QTextEdit을 가지고있다. 버튼을 클릭하면 별도의 스레드에서 다른 기능이 발생하는 동안 QTextEdit에서 10 초 카운트 다운을 표시합니다. 매초 신호를 내 보내지 만 QTextEdit은 9 초 동안 정지 한 다음 마지막 카운트 다운 번호를 표시합니다.PyQt4 : 마지막 신호 만 처리 중입니다.
나는 이것이 별도의 스레드에서 일어나는 일과 관련이 있다고 생각 했으므로 이것을 테스트하기 위해 별도의 예제를 만들었습니다. 간단한 예제에서는 QTextEdit과 Button 두 가지가 있습니다. 버튼을 클릭하면 상태 브라우저에 '5'가 2 초간 표시된 다음 '4'가 표시됩니다. 여기
코드입니다 :import sys
from PyQt4 import QtGui, uic
from PyQt4.QtCore import QObject, pyqtSignal
import time
class MainUI(QObject):
status_signal = pyqtSignal(str)
def __init__(self, window):
super(QObject, self).__init__()
self.ui = uic.loadUi(r'L:\internal\684.07\Mass_Project\Software\PythonProjects\measure\testing\status_test.ui', window)
self.ui.statusBrowser.setReadOnly(True)
self.ui.statusBrowser.setFontPointSize(20)
self.status_signal.connect(self.status_slot)
self.ui.button.clicked.connect(self.counter)
window.show()
def status_slot(self, message):
self.ui.statusBrowser.clear()
self.ui.statusBrowser.append(message)
def counter(self):
print 'clicked'
i = 5
self.status_signal.emit(str(i))
time.sleep(2)
self.status_signal.emit(str(i-1))
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
app.setStyle("cleanlooks")
main_window = QtGui.QDialog()
main_ui = MainUI(main_window)
sys.exit(app.exec_())
이 예에서, 같은 일이 발생합니다. 상태 브라우저는 2 초 동안 정지 한 다음 '4'만 표시합니다. status_slot
함수를 변경하여 추가하기 전에 상태 브라우저를 지우지 않으면 상태 브라우저는 2 초 동안 기다린 다음 두 신호를 동시에 내보내고 '5 \ n 4'를 표시합니다. 왜 이런 일이 일어나고 디스플레이를 지속적으로 업데이트 할 수 있는지 알 수 있습니까? 미리 감사드립니다!
고마워요! 나는 그것을 사용하여 시도하고 훌륭한 상태 브라우저를 업데이 트에 대한 작품. 상태 브라우저가 카운트 다운되는 동안 해당 스레드를 지연시키고 싶었 기 때문에'time.sleep (sec)'과 유사한'QTest.qWait (msec)'를 보았지만 GUI가 정지되지는 않았습니다. 그런 걸 찾고 있어요. –