원격으로 업데이트되는 모달 비 차단 진행 창 (QProgressDialog 사용)이 필요한 간단한 프로그램이 있습니다. SIZE
은 단순히 QProgressDialog의 최대 값을 제어합니다. 즉PyQt QProgressDialog가 빈 흰색 창으로 표시됩니다.
는, 윈도우가 완전히 흰색이며, 디스플레이 텍스트가 : 나는 4 이하의 값을 가지도록 설정할 경우, 윈도우는 작업의 전체 기간 동안 다음과 같다 진행률 표시 줄도 없습니다. 내가 5 이상으로 SIZE
의 값을 설정하면 화면이 제대로 작동하지만 단지 2-3 첫 번째 반복 후 :
및
import sys, time
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
SIZE = 5
def doGenerate(setValue):
for x2 in range(SIZE):
time.sleep(1)
setValue(x2 + 1)
print('Done')
class MainMenu(QMainWindow):
def __init__(self):
super().__init__()
self.genAudioButton = QPushButton('Generate', self)
self.genAudioButton.clicked.connect(self.generate)
self.setCentralWidget(self.genAudioButton)
self.show()
def generate(self):
try:
progress = QProgressDialog('Work in progress', '', 0, SIZE, self)
progress.setWindowTitle("Generating files...")
progress.setWindowModality(Qt.WindowModal)
progress.show()
progress.setValue(0)
doGenerate(progress.setValue)
except Exception as e:
errBox = QMessageBox()
errBox.setWindowTitle('Error')
errBox.setText('Error: ' + str(e))
errBox.addButton(QMessageBox.Ok)
errBox.exec()
return
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainMenu()
ret = app.exec_()
sys.exit(ret)
나중에
을 이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까?또한 완전히 대신 여전히이 작업을 취소 빈 버튼이있는의, 취소 버튼을 제거하는 방법은 무엇입니까? PyQt4 문서 (나는 PyQt5를 사용하고 있습니다)는 빈 문자열이이 결과를 얻었음을 나타내고 Qt5의 C++ 문서는 같은 것을 나타냅니다. 그러나 분명히 여기서는 작동하지 않습니다. PyQt5에 대한 독립형 문서를 찾지 못했습니다.
답장을 보내 주셔서 감사합니다. 'sleep '은 내가이 문제를 재현하는 최소한의 예제를 작성하는 것이지만, 원래의 프로그램은 실제로 sleep 대신 doGenerate 내부의 파일에 쓰고 있었다. 그건 원래의 파이썬 파일 쓰기를 통해서가 아니라, 거의 제어 할 수없는 라이브러리의 함수를 사용하는 것입니다 ([gTTS] (https://github.com/pndurette/gTTS/)의'save' 또는'write_to_fp') . 당신의 솔루션을 어떻게 적응시킬 수 있습니까? – pie3636
@ pie3636 gTT를 통해 백분율을 어떻게 얻습니까? 라이브러리를 사용했는데 진행률을 알려주는 함수를 찾지 못했습니까? – eyllanesc
나는 많은 수의 파일을 생성해야한다. 그래서 내가하는 일은 각 파일 다음에'files_done/total_files'로 백분율을 계산하는 것이다. 그러나 각 파일이 끝난 후 GUI를 업데이트하면 파일 쓰기가 차단되어 있기 때문에 창이 비어있는 문제가 발생합니다. – pie3636