#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()