0

I want to combine login.py and watson_gui.py I tried add but i didnt succeed Now its crashing its says

Traceback (most recent call last): File "c:/Users/Kaan/PycharmProjects/Watson_GUI/Final/login.py", line 74, in ui=w.Widget() File "c:\Users\Kaan\PycharmProjects\Watson_GUI\Final\watson_gui.py", line 94, in init self.init_ui(Dialog) NameError: name 'Dialog' is not defined

login.py

from PyQt5 import QtCore, QtGui, QtWidgets
import watson_gui as w


class Ui_MainWindow(object):
    def openWindow(self):
        MainWindow.hide()
        window.show()

    def setupUi(self, MainWindow):
        ...

    def retranslateUi(self, MainWindow):
        ...


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()


    window = QtWidgets.QMainWindow()
    ui=w.Widget()
    ui.init_ui(window)

    manager = ui.IBMWatsonManager()

    manager.connected.connect(ui.enable)
    manager.disconnected.connect(ui.disable)
    ui.sendSignal.connect(manager.send_message)
    manager.messageChanged.connect(ui.set_message)

    manager.create_session()
    sys.exit(app.exec_())

watson.py

import threading
import sys
import sip

from ibm_watson import AssistantV2
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

from PyQt5 import QtCore, QtWidgets,QtGui


class IBMWatsonManager(QtCore.QObject):
    connected = QtCore.pyqtSignal()
    disconnected = QtCore.pyqtSignal()
    messageChanged = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super().__init__(parent)

        self._assistant_id = "8e3469cd-deaa-465f-8f6d-e1e4cbf7d9c1"
        self._session_id = ""
        self._service = None
        self.connected.connect(self.send_message)

        self._is_active = False

    @property
    def assistant_id(self):
        return self._assistant_id

    @property
    def session_id(self):
        return self._session_id

    @property
    def service(self):
        return self._service

    @property
    def is_active(self):
        return self._is_active

    def create_session(self):
        threading.Thread(target=self._create_session, daemon=True).start()

    def _create_session(self):
        authenticator = IAMAuthenticator(
            "4CpKAKUsLRpYvcUX_nQRR1MGnYM1WqJLUhE4XS-p4B7Y"
        )  # replace with API key
        self._service = AssistantV2(version="2020-04-01", authenticator=authenticator)
        self.service.set_service_url(
            "https://api.eu-gb.assistant.watson.cloud.ibm.com/instances/49abc832-b899-4359-aca3-ea100ceb777a"
        )

        self._session_id = self.service.create_session(
            assistant_id=self.assistant_id
        ).get_result()["session_id"]
        self._is_active = True
        self.connected.emit()

    @QtCore.pyqtSlot()
    @QtCore.pyqtSlot(str)
    def send_message(self, text=""):
        threading.Thread(target=self._send_message, args=(text,), daemon=True).start()

    def _send_message(self, text):
        response = self.service.message(
            self.assistant_id, self.session_id, input={"text": text}
        ).get_result()
        generic = response["output"]["generic"]
        if generic:
            t = "\n".join([g["text"] for g in generic if g["response_type"] == "text"])
            self.messageChanged.emit(t)
        output = response["output"]
        if "actions" in output:
            client_response = output["actions"][0]
            if client_response["type"] == "client":
                current_action = client_response["name"]
                if current_action == "end_conversation":
                    self._close_session()
                    self._is_active = False
                    self.disconnected.emit()

    def _close_session(self):
        self.service.delete_session(
            assistant_id=self.assistant_id, session_id=self.session_id
        )


class Widget(QtWidgets.QWidget):
    sendSignal = QtCore.pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.init_ui(Dialog)

    def init_ui(self,Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(642, 800)
        Dialog.setStyleSheet("background-image: url(Background.png);")

        #Text Baslangici
        self.message_lbl = QtWidgets.QTextBrowser(Dialog)
        self.message_lbl.setGeometry(QtCore.QRect(30, 20, 581, 621))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(11)
        font.setBold(True)
        font.setWeight(75)
        self.message_lbl.setFont(font)
        self.message_lbl.setStyleSheet("background-image: url(QTextBrowser.png);color: white;")
        self.message_lbl.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.message_lbl.setObjectName("textBrowser")

        #Buton Baslangici
        self.send_button = QtWidgets.QPushButton(Dialog)
        self.send_button.setGeometry(QtCore.QRect(520, 725, 91, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(11)
        font.setBold(True)
        font.setWeight(75)
        self.send_button.setFont(font)
        self.send_button.setStyleSheet("background-image: url(SendButton.png);color: red;")
        self.send_button.setObjectName("pushButton")

        #Text Input Baslangici
        self.message_le = QtWidgets.QLineEdit(Dialog)
        self.message_le.setGeometry(QtCore.QRect(30, 725, 471, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(11)
        font.setBold(True)
        font.setWeight(75)
        self.message_le.setFont(font)
        self.message_le.setStyleSheet("background-image: url(QLine.png);color: white;")
        self.message_le.setFrame(False)
        self.message_le.setObjectName("lineEdit")


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

        self.disable()
        self.send_button.clicked.connect(self.on_clicked)


    @QtCore.pyqtSlot()
    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.send_button.setText(_translate("Dialog", "Send"))




    @QtCore.pyqtSlot()
    def enable(self):
        self.message_le.setEnabled(True)
        self.send_button.setEnabled(True)

    @QtCore.pyqtSlot()
    def disable(self):
        self.message_le.setEnabled(False)
        self.send_button.setEnabled(False)

    @QtCore.pyqtSlot()
    def on_clicked(self):
        text = self.message_le.text()
        self.message_lbl.setAlignment(QtCore.Qt.AlignRight)
        self.message_lbl.append("You : ")
        self.message_lbl.append(text)
        self.message_lbl.append("\n")
        self.sendSignal.emit(text)
        self.message_le.clear()

    @QtCore.pyqtSlot(str)
    def set_message(self, text):
        self.message_lbl.setAlignment(QtCore.Qt.AlignLeft)
        self.message_lbl.append("Medical Bot : ")
        self.message_lbl.append(text)
        self.message_lbl.append("\n")

    @QtCore.pyqtSlot()
    def name_button(self):
        self.label.clear()
        self.pushButton_2.deleteLater



if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)

    Dialog = QtWidgets.QMainWindow()
    w = Widget()
    w.init_ui(Dialog)
    Dialog.show()

    manager = IBMWatsonManager()

    manager.connected.connect(w.enable)
    manager.disconnected.connect(w.disable)
    w.sendSignal.connect(manager.send_message)
    manager.messageChanged.connect(w.set_message)

    manager.create_session()

    sys.exit(app.exec_())
Fquer
  • 19
  • 2

0 Answers0