Я использую скрипт Python, который извлекает и локализует некоторые файлы. Я хотел бы использовать QDialog
для отображения статуса выполнения через QProgressBar
и список копируемых файлов.
Позвольте мне начать с того, что скрипт локализации не может быть интегрирован в скрипт PyQt - иначе я знаю, что решение будет довольно простым. Мне нужно держать скрипт локализации отделенным от пользовательского интерфейса и запускать их одновременно.
Я думал о запуске пользовательского интерфейса из сценария локализации через поток, чтобы не блокировать процесс локализации. Но в этот момент я понятия не имею, как обновить элементы пользовательского интерфейса, поскольку у меня нет экземпляра, который я могу вызвать и обновить, так как я запустил его с потоком.
Это упрощенный пример кода диалога:
from PyQt5 import QtCore, QtWidgets
import sys
class Ui_dialog_main(object):
def setupUi(self, dialog_main):
dialog_main.setWindowTitle("Test")
dialog_main.resize(390, 120)
self.progress_bar = QtWidgets.QProgressBar(dialog_main)
self.progress_bar.setGeometry(QtCore.QRect(10, 60, 371, 30))
self.label_localizing = QtWidgets.QLabel(dialog_main)
self.label_localizing.setGeometry(QtCore.QRect(10, 10, 81, 25))
self.label_localizing.setText("Package:")
QtCore.QMetaObject.connectSlotsByName(dialog_main)
def start():
app = QtWidgets.QApplication(sys.argv)
dialog_main = QtWidgets.QDialog()
ui = Ui_dialog_main()
ui.setupUi(dialog_main)
dialog_main.show()
sys.exit(app.exec_())
И вот как я запускаю поток в файле локализатора:
thread = Thread(target=LocManager.start)
thread.start()
где LocManager
- это имя файла .py пользовательского интерфейса.
Конечно, таким образом основной скрипт не застревает в интерфейсе, что является одной из моих целей - но я не знаю, как обновить индикатор выполнения и метку в этой ситуации. Я нашел несколько тем, обсуждающих похожие проблемы, но ничего, что точно помогло бы мне.
Надеюсь, мое описание было достаточно ясным.
UPDATE:
Я нашел решение для этого здесь , используя трубы. Даже если я не уверен, что это правильный способ решения этой проблемы, это определенно помогло. Вместо того чтобы работать с «Двунаправленной связью» между двумя графическими интерфейсами PyQt, как описано в ссылке, я изменил код, чтобы иметь двунаправленную связь между моим графическим интерфейсом и сценарием локализации.