(PyQt6) starting the qt app window is not running my program. If i run my program first, app window doesnt show

Viewed 14

I am trying to build an AI voice recognition app with a GUI to show the speech recognition text as well as my pre-determined outcomes as a text inside different labels in pyqt6 program. the problem is how do I set the label's text to change dynamically based on the the recognized speech (output as text) and next step of the AI's predetermined outcome(also output as text) on the pyqt app labels.

A normal import of the AI.py file into the QT6.py file doesn't dynamically change the text.

Combining both into the same file runs either the program (which has nested loops to carry outcomes based on user's speech query) or the pyqt window whichever is run earlier. the combined file doesn't run one after the other.

What I am looking to acheive: labels inside pyqt app window to change and show text dynamically based on how the text output changes in the AI app.

Here is my qt6.py child file:

from main_ui import UI_Extension
from PyQt6 import QtWidgets
import sys

class U_interface(UI_Extension):
    def setupUi(self, Form):
        super().setupUi(Form)

        self.alerts.setText("Liability Warning")
        self.alert_description.setText("Liability description")
        self.ai_response.setText(Dynamic_text) # from AI.py file
        self.mic_recording_state.setText("Listening...(test)")
        self.speech_recognition.setText(Dynamic_speech_recognition_text) # from AI.py file
        self.management_plan.setText("EKG scheduled for the 24th of November 2022")

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = U_interface()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec())

Here is my qt6.py parent file converted from qt_designer .ui file

from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(1280, 800)
        Form.setAutoFillBackground(False)
        Form.setStyleSheet("")
        self.combined_layout = QtWidgets.QWidget(Form)
        self.combined_layout.setGeometry(QtCore.QRect(0, 0, 1280, 800))
        self.combined_layout.setStyleSheet("QPushButton#ReviewCase{\n"
"    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(33, 124, 173, 255), stop:1 rgba(31, 118, 165, 142));\n"
"    color:rgba(255,255,255,210);\n"
"    border-radius: 5px;\n"
"}\n"
"\n"
"QPushButton#ReviewCase:hover{\n"
"    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(14, 208, 75, 255), stop:1 rgba(26, 255, 0, 213));\n"
"    color:rgba(255,255,255,210);\n"
"    color:rgba(0,0,0,210);\n"
"}\n"
"\n"
"QPushButton#ReviewCase:pressed{\n"
"    padding-left:5px;\n"
"    padding-right:5px;\n"
"    color:rgba(255,255,255,210);\n"
"    background-color: rgba(105,118,132,200);\n"
"}\n"
"\n"
"QPushButton#ExitProgram{\n"
"    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(33, 124, 173, 255), stop:1 rgba(31, 118, 165, 142));\n"
"    color:rgba(255,255,255,210);\n"
"    border-radius: 5px;\n"
"}\n"
"\n"
"QPushButton#ExitProgram:hover{\n"
"    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(255, 0, 4, 255), stop:1 rgba(255, 0, 0, 111));\n"
"    color:rgba(255,255,255,210);\n"
"}\n"
"\n"
"QPushButton#ExitProgram:pressed{\n"
"    padding-left:5px;\n"
"    padding-right:5px;\n"
"    background-color: rgba(105,118,132,200);\n"
"}\n"
"")
        self.combined_layout.setObjectName("combined_layout")
        self.background_image = QtWidgets.QLabel(self.combined_layout)
        self.background_image.setGeometry(QtCore.QRect(0, 0, 1280, 800))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Ignored)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.background_image.sizePolicy().hasHeightForWidth())
        self.background_image.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.background_image.setFont(font)
        self.background_image.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.DefaultContextMenu)
        self.background_image.setStyleSheet("border-image: url(:/images/background);")
        self.background_image.setText("")
        self.background_image.setScaledContents(True)
        self.background_image.setObjectName("background_image")
        self.doc_logo = QtWidgets.QLabel(self.combined_layout)
        self.doc_logo.setGeometry(QtCore.QRect(15, 16, 41, 41))
        self.doc_logo.setStyleSheet("border-image: url(:/images/doctor);")
        self.doc_logo.setText("")
        self.doc_logo.setObjectName("doc_logo")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.combined_layout)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 743, 1261, 51))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
        self.horizontalLayout.setContentsMargins(5, 0, 5, 0)
        self.horizontalLayout.setSpacing(10)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.ExitProgram = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.ExitProgram.sizePolicy().hasHeightForWidth())
        self.ExitProgram.setSizePolicy(sizePolicy)
        self.ExitProgram.setMinimumSize(QtCore.QSize(200, 35))
        self.ExitProgram.setBaseSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setPointSize(13)
        font.setBold(True)
        font.setKerning(True)
        self.ExitProgram.setFont(font)
        self.ExitProgram.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
        self.ExitProgram.setStyleSheet("")
        self.ExitProgram.setObjectName("ExitProgram")
        self.horizontalLayout.addWidget(self.ExitProgram)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.mic_recording_state = QtWidgets.QLabel(self.horizontalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.mic_recording_state.sizePolicy().hasHeightForWidth())
        self.mic_recording_state.setSizePolicy(sizePolicy)
        self.mic_recording_state.setMinimumSize(QtCore.QSize(770, 25))
        font = QtGui.QFont()
        font.setPointSize(20)
        font.setBold(False)
        self.mic_recording_state.setFont(font)
        self.mic_recording_state.setStyleSheet("color: #c6d4e2;")
        self.mic_recording_state.setText("")
        self.mic_recording_state.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.mic_recording_state.setIndent(0)
        self.mic_recording_state.setObjectName("mic_recording_state")
        self.horizontalLayout.addWidget(self.mic_recording_state)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout.addItem(spacerItem1)
        self.ReviewCase = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.ReviewCase.setEnabled(True)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Maximum)
        sizePolicy.setHorizontalStretch(60)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.ReviewCase.sizePolicy().hasHeightForWidth())
        self.ReviewCase.setSizePolicy(sizePolicy)
        self.ReviewCase.setMinimumSize(QtCore.QSize(200, 35))
        font = QtGui.QFont()
        font.setPointSize(13)
        font.setBold(True)
        self.ReviewCase.setFont(font)
        self.ReviewCase.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.PointingHandCursor))
        self.ReviewCase.setAutoFillBackground(False)
        self.ReviewCase.setStyleSheet("")
        self.ReviewCase.setObjectName("ReviewCase")
        self.horizontalLayout.addWidget(self.ReviewCase)
        self.layoutWidget = QtWidgets.QWidget(self.combined_layout)
        self.layoutWidget.setGeometry(QtCore.QRect(100, 40, 661, 681))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(20)
        self.verticalLayout.setObjectName("verticalLayout")
        self.alerts = QtWidgets.QLabel(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.alerts.sizePolicy().hasHeightForWidth())
        self.alerts.setSizePolicy(sizePolicy)
        self.alerts.setMinimumSize(QtCore.QSize(0, 50))
        font = QtGui.QFont()
        font.setFamily("Cambria")
        font.setPointSize(22)
        font.setBold(True)
        self.alerts.setFont(font)
        self.alerts.setToolTip("")
        self.alerts.setStyleSheet("color: rgb(255, 116, 69);")
        self.alerts.setText("")
        self.alerts.setAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignTop)
        self.alerts.setIndent(0)
        self.alerts.setObjectName("alerts")
        self.verticalLayout.addWidget(self.alerts)
        self.alert_description = QtWidgets.QLabel(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.alert_description.sizePolicy().hasHeightForWidth())
        self.alert_description.setSizePolicy(sizePolicy)
        self.alert_description.setMinimumSize(QtCore.QSize(0, 50))
        font = QtGui.QFont()
        font.setPointSize(22)
        font.setBold(True)
        self.alert_description.setFont(font)
        self.alert_description.setStyleSheet("color: rgb(43, 255, 121);")
        self.alert_description.setText("")
        self.alert_description.setAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignTop)
        self.alert_description.setIndent(0)
        self.alert_description.setObjectName("alert_description")
        self.verticalLayout.addWidget(self.alert_description)
        self.ai_response = QtWidgets.QLabel(self.layoutWidget)
        font = QtGui.QFont()
        font.setFamily("Cambria")
        font.setPointSize(22)
        font.setBold(False)
        self.ai_response.setFont(font)
        self.ai_response.setStyleSheet("padding: 23 33 23;\n"
"color: #c6d4e2;\n"
"\n"
"")
        self.ai_response.setFrameShape(QtWidgets.QFrame.Shape.NoFrame)
        self.ai_response.setLineWidth(1)
        self.ai_response.setText("")
        self.ai_response.setScaledContents(False)
        self.ai_response.setAlignment(QtCore.Qt.AlignmentFlag.AlignJustify|QtCore.Qt.AlignmentFlag.AlignVCenter)
        self.ai_response.setWordWrap(True)
        self.ai_response.setIndent(0)
        self.ai_response.setObjectName("ai_response")
        self.verticalLayout.addWidget(self.ai_response)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setSpacing(0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.gif = QtWidgets.QLabel(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Ignored)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.gif.sizePolicy().hasHeightForWidth())
        self.gif.setSizePolicy(sizePolicy)
        self.gif.setMinimumSize(QtCore.QSize(240, 180))
        self.gif.setStyleSheet("")
        self.gif.setText("")
        self.gif.setScaledContents(True)
        self.gif.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.gif.setIndent(0)
        self.gif.setObjectName("gif")
        self.horizontalLayout_2.addWidget(self.gif)
        self.speech_recognition = QtWidgets.QLabel(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(170)
        sizePolicy.setHeightForWidth(self.speech_recognition.sizePolicy().hasHeightForWidth())
        self.speech_recognition.setSizePolicy(sizePolicy)
        self.speech_recognition.setMinimumSize(QtCore.QSize(0, 170))
        font = QtGui.QFont()
        font.setPointSize(16)
        self.speech_recognition.setFont(font)
        self.speech_recognition.setStyleSheet("padding: 29 33 29;\n"
"color: #c6d4e2;")
        self.speech_recognition.setText("")
        self.speech_recognition.setAlignment(QtCore.Qt.AlignmentFlag.AlignJustify|QtCore.Qt.AlignmentFlag.AlignVCenter)
        self.speech_recognition.setWordWrap(True)
        self.speech_recognition.setIndent(0)
        self.speech_recognition.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
        self.speech_recognition.setObjectName("speech_recognition")
        self.horizontalLayout_2.addWidget(self.speech_recognition)
        self.horizontalLayout_2.setStretch(0, 3)
        self.horizontalLayout_2.setStretch(1, 6)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.verticalLayout.setStretch(0, 1)
        self.verticalLayout.setStretch(2, 6)
        self.verticalLayout.setStretch(3, 4)
        self.layoutWidget1 = QtWidgets.QWidget(self.combined_layout)
        self.layoutWidget1.setGeometry(QtCore.QRect(850, 40, 411, 681))
        self.layoutWidget1.setObjectName("layoutWidget1")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget1)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setSpacing(15)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.management = QtWidgets.QLabel(self.layoutWidget1)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.management.sizePolicy().hasHeightForWidth())
        self.management.setSizePolicy(sizePolicy)
        self.management.setMinimumSize(QtCore.QSize(0, 50))
        self.management.setStyleSheet("font: 700 22pt \"Segoe UI Variable Text\";\n"
"color: rgb(153, 255, 199);")
        self.management.setAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignTop)
        self.management.setIndent(0)
        self.management.setObjectName("management")
        self.verticalLayout_2.addWidget(self.management)
        self.management_plan = QtWidgets.QTextBrowser(self.layoutWidget1)
        font = QtGui.QFont()
        font.setPointSize(18)
        font.setBold(True)
        self.management_plan.setFont(font)
        self.management_plan.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
        self.management_plan.setStyleSheet("background-color: rgb(7, 18, 40);\n"
"border-radius: 10px;\n"
"padding: 25 25 25 25;\n"
"color: #c6d4e2;")
        self.management_plan.setInputMethodHints(QtCore.Qt.InputMethodHint.ImhMultiLine)
        self.management_plan.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.LinksAccessibleByKeyboard|QtCore.Qt.TextInteractionFlag.LinksAccessibleByMouse|QtCore.Qt.TextInteractionFlag.TextBrowserInteraction|QtCore.Qt.TextInteractionFlag.TextSelectableByKeyboard|QtCore.Qt.TextInteractionFlag.TextSelectableByMouse)
        self.management_plan.setOpenExternalLinks(True)
        self.management_plan.setObjectName("management_plan")
        self.verticalLayout_2.addWidget(self.management_plan)
        self.verticalLayout_2.setStretch(0, 1)
        self.verticalLayout_2.setStretch(1, 12)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.ExitProgram.setText(_translate("Form", "Exit Program"))
        self.ReviewCase.setText(_translate("Form", "Review Case"))
        self.management.setText(_translate("Form", "Management"))
        self.management_plan.setHtml(_translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"hr { height: 1px; border-width: 0; }\n"
"</style></head><body style=\" font-family:\'Segoe UI Variable Text\'; font-size:18pt; font-weight:700; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt;\"><br /></p></body></html>"))

Here is my AI.py file:


from playsound import playsound
import sounddevice as sd
from gtts import gTTS
import argparse
import random
import queue
import vosk
import json
import sys
import os


q = queue.Queue()
model = vosk.Model("c:......Model (EN-US)")


def greeting(): 
    ..........

def microphone():
    ..........
            
           speech_recognition_text = "xyz........"  # to be printed inside the label in qt6.py file


def recorded_audio():
    ............

def speak(transcription):
    ............


try:
    ............



    stream = sd.RawInputStream(samplerate=args.samplerate, blocksize = 8000, device=args.device, dtype='int16', channels=1, callback=callback)
    with stream:
        
        greeting()
        while True:
            audio = recorded_audio()
            if ('hello' in audio):

                Dynamic_text = "abc...."  # to be printed inside the label in qt6.py file

                
            elif ('all right' in audio):

                DynamicText = "def......" # to be printed inside the label in qt6.py file

                
except KeyboardInterrupt:
    print('\nShutting Down')
    parser.exit(0)
except Exception as e:
    parser.exit(type(e).__name__ + ': ' + str(e))

I am under the impression that QThread is to be used somehow. Dont know how and where. Any help is greatly appreciated.

0 Answers
Related