После входа в систему мой следующий class.show () не появляется - PullRequest
1 голос
/ 19 июня 2020

После входа в систему моя программа не будет отображать мой следующий экран. Вот что у меня есть до сих пор. У меня есть логин:

import sys, os, boto3, threading, logging, math, time, re
from botocore.exceptions import ClientError
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt, QUrl


if __name__ == '__main__':
    app = QApplication(sys.argv)

    form = LoginForm()
    form.show()

    sys.exit(app.exec_())

class LoginForm(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300, 50)
        layout = QGridLayout()

        label_name = QLabel('<font size="4"> Username: </font>')
        self.lineEdit_username = QLineEdit()
        self.lineEdit_username.setPlaceholderText('Please enter your username')
        layout.addWidget(label_name, 0, 0)
        layout.addWidget(self.lineEdit_username, 0, 1)

        buttonLogin = QPushButton('Login')
        buttonLogin.clicked.connect(self.checkPass)
        layout.addWidget(buttonLogin, 1, 0, 1, 2)
        layout.setRowMinimumHeight(2, 20)

        self.setLayout(layout)

    def checkPass(self):
        msg = QMessageBox()

        if self.lineEdit_username.text() != '':
            self.user = self.lineEdit_username.text()
            demo = AppDemo(self.user)
            demo.show()
            demo.userLabel.setText('<font size="5"> Current User: ' + self.user + '</font>')
            form.hide()
        else:
            msg.setText('Please Enter a Username')
            msg.exec_()

Как вы можете видеть, после того, как я нажимаю кнопку с введенным именем пользователя, он вызывает demo.show ()

class AppDemo(QtWidgets.QWidget):
    def __init__(self, user):
        super().__init__()
        self.user = user
        self.setWindowTitle("Data Ingest App")
        self.resize(1200, 600)

        self.currentFileLabel = QLabel(self)
        self.currentFileLabel.setText("Drag and Drop Folders into the box")
        self.listbox_view = ListBoxWidget(self)
        self.uploadBtn = QPushButton('Upload Files', self)
        self.percentageBar = QtWidgets.QProgressBar()

        self.bucketName = getBucketName()
        self.storageDomain = getStorageDomain()
        self.toolID = getTool()

        lay = QtWidgets.QGridLayout(self)

        self.userLabel = QtWidgets.QLabel("")
        lay.addWidget(self.userLabel, 0, 0)
        lay.addWidget(QtWidgets.QLabel('<font size="5"> Tool ID: ' + self.toolID + '</font>'), 0, 2)
        lay.addWidget(self.listbox_view, 1, 0, 1, 3)
        lay.addWidget(self.currentFileLabel, 2, 1)
        lay.addWidget(self.percentageBar, 3, 1)
        lay.addWidget(self.uploadBtn, 3, 0)

        self.listbox_view.setAlternatingRowColors(True)

        self.qs3 = S3Worker()

        self.qs3.percentageChanged.connect(self.percentageBar.setValue)
        self.uploadBtn.clicked.connect(self.start_upload)

    def start_upload(self):
        if self.listbox_view.count() != 0:
            self.bucketFind()
            firstFile = QListWidgetItem(self.listbox_view.item(0).text())
            firstLen = len(firstFile.text().split("/"))
            for i in range(self.listbox_view.count()):
                path = QListWidgetItem(self.listbox_view.item(i).text())
                splitName = path.text().split("/")
                if len(splitName) > firstLen:
                    displayName = ""
                    difference = len(splitName) - firstLen
                    if os.path.exists(path.text()):
                        displayName += self.user + "/" + self.toolID()
                        for dif in range(difference + 1, 0, -1):
                            displayName += "/" + splitName[len(splitName) - dif]
                        self.qs3.upload(path.text(), self.bucketName, displayName)
                else:
                    if os.path.exists(path.text()):
                        displayName = self.user + "/" + self.toolID() + "/" + splitName[len(splitName) - 1]
                        self.currentFileLabel.setText("Current File Being Uploaded: " + path.text())
                        self.qs3.upload(path.text(), self.bucketName, displayName)
            self.uploadBtn.setText("Upload more Files")
            self.currentFileLabel.setText("Completed")
        else:
            print("No File inputted")

    def bucketFind(self, region=None):
        try:
            if region is None:
                s3 = boto3.client(
                    's3', endpoint_url=self.storageDomain)
                s3.create_bucket(Bucket=self.bucketName)
        except ClientError as e:
            logging.error(e)
            return False

Я получаю большую часть своей информации из файла setting.config, который находится в той же папке. Эти файлы содержат BucketName, toolID и storageDomain. Вот пример текста в ведре файла: Users tool_shortname: 123 storageDomain: https://username.url

Я добавил эти методы stati c, и они перестали работать, но я не могу поймите почему.

def getStorageDomain():
    try:
        with open('settings.config', 'r') as read_obj:
            for line in read_obj.readlines():
                if 'storageDomain: ' in line:
                    storageDomain = line.partition("storageDomain: ")[2]

                    return storageDomain
    except OSError as e:
        print("Error in file")
    return "NO FILE setting.config"


def getBucketName():
    try:
        with open('settings.config', 'r') as read_obj:
            for line in read_obj.readlines():
                if 'bucket: ' in line:
                    bucket = line.partition("bucket: ")[2]
                    return bucket
    except OSError as e:
        print("Error in file")
    return "No setting.config file could"


def getTool():
    try:
        with open('settings.config', 'r') as read_obj:
            for line in read_obj:
                if 'tool_shortname: ' in line:
                    toolID = line.partition("tool_shortname: ")[2]
                    return toolID
    except OSError as e:
        print("Error in file")
    return "No setting.config file could"

1 Ответ

1 голос
/ 20 июня 2020

Прежде всего, я не могу найти виджет с именем ListBoxWidget в документации, и я предполагаю, что вам нужно отображать другую форму, когда вы нажимаете кнопку «Войти».

Я думаю, что большая часть вашего кода , просто обязательно создайте экземпляр класса AppDemo.

    def checkPass(self):
        msg = QMessageBox()

        if self.lineEdit_username.text() != '':
            self.user = self.lineEdit_username.text()
            self.demo = AppDemo(self.user)
            self.demo.show()
            form.hide()
        else:
            msg.setText('Please Enter a Username')
            msg.exec_()

Надеюсь на эту помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...