Я делаю интерфейс инструмента в Qt5, и он работает нормально. Единственная проблема заключается в том, что он медленно запускается, потому что интерфейс __init__
содержит трудоемкий метод (5-10 секунд), используемый для подключения к инструменту. В настоящее время ничего не отображается в течение нескольких секунд, после чего весь интерфейс отображается с сообщением «успешно подключено к инструменту», уже записанным в его консоли (виджет textEdit).
Мне бы хотелось, чтобы мгновенно отобразил интерфейс, и только после его показа должен запуститься протокол связи. Я уверен, что это всего лишь вопрос перемещения одной строки, но я не могу понять это. Любая помощь приветствуется.
Вот минимальный пример структуры программы:
# ================================================
# Interface management.
# ================================================
class RENAMEMELATER(Ui_renamemetoo, QObject):
def __init__(self, parent):
super(Ui_renamemetoo, self).__init__()
self.ui = Ui_renamemetoo()
self.ui.setupUi(parent)
# Redirect IDE console towards GUI console.
sys.stdout = EmittingStream()
sys.stdout.textWritten.connect(self.redirect_console_messages)
sys.stderr = EmittingStream()
sys.stderr.textWritten.connect(self.redirect_console_messages)
# Initialize PC/instrument communication (MOVE SOMEWHERE ELSE?)
self.T = TaborSE5082("USB0::0x168C::0x5082::0000218391::INSTR") # TIME CONSUMING.
def redirect_console_messages(self, text):
"""All print() from the program are appended on a textEdit
instead of the IDE console."""
self.ui.Console_textEdit.append(text.rstrip("\n"))
def close_program(self):
"""Call those functions after the user clicked on exit."""
self.T.CLOSE()
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
print("Program terminated.")
# ================================================
# Program execution.
# ================================================
if __name__ == "__main__":
# Define the app.
if not QtWidgets.QApplication.instance():
app = QtWidgets.QApplication(sys.argv)
else:
app = QtWidgets.QApplication.instance()
# Start the interface.
Form = QtWidgets.QWidget()
prog = RENAMEMELATER(Form)
Form.show()
# Handle what happens at program exit.
app.setQuitOnLastWindowClosed(True)
app.aboutToQuit.connect(prog.close_program)
# Launch.
app.exec()
В основном я могу использовать app.aboutToQuit
, чтобы закрыть инструмент. Может быть, есть какой-то app.isDoneLoading
, который я мог бы .connect
для инициализации моего инструмента таким же образом?
Спасибо.