Как запустить функцию из другого класса в PyQt5

#python-3.x #pyqt5

#python-3.x #pyqt5

Вопрос:

Итак, я пытаюсь создать окно входа в PyQt5, в котором есть имя пользователя, пароль, proxy_domain, секретные ключи в качестве поля ввода и текстовое поле для отображения сценариев с использованием вызовов API. Итак, для вызовов API я создал отдельный файл с именем fusionapy.py . Итак, я хочу вызвать метод .getAllSheets() в main.py досье.Я новичок в python и PyQt5

main.py

 from PyQt5.uic import loadUiType
from PyQt5.QtWidgets import QMessageBox
# from fusionapy import Auth, Document
ui, _ = loadUiType("login-c.ui")
config = ConfigParser()
class MainApp(QMainWindow, ui,):
    def __init__(self):
        QMainWindow.__init__(self)
        # config.sections()
        config.read('configbot.ini')
        config.sections()
        self.Handle_Buttons()
    def Handle_Buttons(self):
        self.pushButton_submit.clicked.connect(self.load_content)
        self.textEdit_username.setText(config.get('foundry','proxy_user'))
        self.textEdit_password.setText('************')
        self.textEdit_proxydomain.setText(config.get('foundry','proxy_domain'))
        self.textEdit_fusionid.setText(config.get('foundry', 'fusion_doc_id'))
        self.textEdit_fusiontoken.setText(config.get('foundry','foundry_token' ))
        self.btn_submit.clicked.connect(self.load_content)
        
    def load_content(self):
        self.textEdit_code.setText(self.getAllSheets())

def main():
    app = QApplication(sys.argv)
    win = MainApp()
    win.show()
    app.exec_()
if __name__ == "__main__":
    main()
  

fusionapy.py файл

 import requests
import json
import tkinter as tk
from tkinter import messagebox


CATALOG_URL = 'https://google.api.com'


class Document:
    def __init__(self, documentRid, auth, root):
        self.rid = documentRid
        self.catalog_url = auth.catalog_url
        self.token = auth.token.rstrip()
        self.proxy = auth.proxy
        self.root = root
        self.refresh()

    def refresh(self):

        if self.getAllSheets() != "Error":
            try:
                self.sheets = self.getAllSheets()['sheets']
                allregions_data = self.getAllRegions()
                self.regions = allregions_data['regions']
                self.documentName = allregions_data['documentName']
                self.revision = allregions_data['documentRevision']

            except:
                messagebox.showerror(title="Error", message="Something went wrong")
        else:
            self.regions = []
    def sheetNameToId(self, sheetName):
        sheetId = ''
        for sheet in self.sheets:
            if sheet['name'] == sheetName:
                sheetId = sheet['sheetId']
                break
        if sheetId:
            return sheetId
        else:
            raise KeyError('Sheet name not found in sheets')
    def regionNameToId(self, regionName):
        regionId = ''
        for region in self.regions:
            if region['regionName'] == regionName:
                regionId = region['id']
        if regionId:
            return regionId
        else:
            raise KeyError('Region name not found in regions')
    def colNameToId(self, regionName, colName):
        colId = ''
        for region in self.regions:
            if region['regionName'] == regionName:
                for col in region['columns']:
                    if col['header'] == colName:
                        colId = col['id']
        if colId:
            return colId
        else:
            raise KeyError('Column name not found')
    def _get(self, service_url):
        url = self.catalog_url   service_url
        headers = {'content-type': "application/json",
                'authorization': "Bearer "   self.token}
        try:
            response = requests.request('GET', url,
                                    headers= headers,
                                    proxies = self.proxy)
            return response.json()
        except json.decoder.JSONDecodeError:
            return response.text
        except requests.exceptions.RequestException as e:
            messagebox.showerror(title="Error", message="Request failed with error: n{0}".format(e))
            return "Error"

    def _post(self, service_url, data_json):
        url = self.catalog_url   service_url
        headers = {'content-type': "application/json",
                'authorization': "Bearer "   self.token}
        try:
            response = requests.request('POST', url,
                                    data = data_json,
                                    headers= headers,
                                    proxies = self.proxy)
            return response.json()
        except json.decoder.JSONDecodeError:
            return response.text
        except requests.exceptions.RequestException as e:
            messagebox.showerror(title="Error", message="Request failed with error: n{0}".format(e))
            return "Error"

    def _delete(self, service_url, data_json):
        url = self.catalog_url   service_url
        headers = {'content-type': "application/json",
                'authorization': "Bearer "   self.token}
        try:
            response = requests.request('DELETE', url,
                                    data = data_json,
                                    headers= headers,
                                    proxies = self.proxy)
            return response.json()
        except json.decoder.JSONDecodeError:
            return response.text
        except requests.exceptions.RequestException as e:
            messagebox.showerror(title="Error", message="Request failed with error: n{0}".format(e))
            return "Error"

    def getAllSheets(self):
        service_url = '/api/workbook/v1/'  self.rid  '/sheets'
        response = self._get(service_url)
        return response

    def createSheet(self, sheetName):
        service_url = '/api/workbook/v1/'  self.rid  '/sheets/create'
        data = {'name':sheetName}
        data_json = json.dumps(data)
        response = self._post(service_url, data_json)
        self.refresh()
        return response

    


def deleteSheet(self, sheetName):
        sheetId = self.sheetNameToId(sheetName)
        service_url = '/api/workbook/v1/'  self.rid  '/sheets/delete'
        data = {'sheetId':sheetId}
        data_json = json.dumps(data)
        response = self._delete(service_url, data_json)
        self.refresh()
        return response

    def getAllRegions(self):
        service_url = '/api/regions/v1/'  self.rid
        response = self._get(service_url)
        return response

    def createRegion(self, sheetName, regionName, columnNames, rnge = None):
        sheetId = self.sheetNameToId(sheetName)
        service_url = '/api/regions/v1/'  self.rid   '/region'
        data = {'sheetId':sheetId,
                'regionName':regionName,
                'columnNames':columnNames,
                'range':rnge
                }
        data_json = json.dumps(data)
        response = self._post(service_url, data_json)
        self.refresh()
        return response
    
  

Ответ №1:

Вам нужно создать экземпляр Document класса, а затем вызвать getAllSheets метод.

Попробуйте этот код:

 from PyQt5.uic import loadUiType
from PyQt5.QtWidgets import QMessageBox
from fusionapy import Auth, Document  #  add this back
ui, _ = loadUiType("login-c.ui")
config = ConfigParser()
class MainApp(QMainWindow, ui,):
    def __init__(self):
        .........
    def Handle_Buttons(self):
        .........
        
    def load_content(self):
        # create instance of document
        doc = Document(
            documentRid=self.textEdit_fusionid.toPlainText(), 
            auth = self.textEdit_fusiontoken.toPlainText(), 
            root = None)
        self.textEdit_code.setText(doc.getAllSheets()) # call doc method
        #self.textEdit_code.setText(self.getAllSheets())

def main():
    ...........
if __name__ == "__main__":
    main()