首页 > 解决方案 > 登录后,我的下一个 class.show() 没有出现

问题描述

登录后,我的程序不会显示我的下一个显示。到目前为止,我的登录名如下:

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。以下是文件桶中的文本示例: 用户 tool_shortname: 123 storageDomain: https: //username.url

我添加了这些静态方法并停止工作,但我不明白为什么。

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"

标签: pythonpyqt5

解决方案


首先,我找不到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_()

希望这有帮助!


推荐阅读