python - 登录后,我的下一个 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"
解决方案
首先,我找不到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_()
希望这有帮助!
推荐阅读
- java - Oracle BI Publisher Java API 将中文字符转换为问号 (?)
- flutter - 注册 Flutter 时保存用户 ID
- python - 如何使用赛璐珞绘制多条线的时间序列?(Python)
- java - 我通过 Eclipse HSQL 数据库管理器与 HSQL 数据库的连接不起作用
- xmpp - 如何在 xmpp 中启用“urn:xmpp:receipts”?
- ocaml - find_first 函数如何用于 OCaml 集?
- dynamics-crm - 在动态 365 CRM 中使用子网格添加 1-N 条记录
- typescript - TypeScript:如何通过类转换器序列化和反序列化具有不同名称的对象
- python - 二项式 SciPy 语法
- android - 如何访问返回的意图中的额外数据并在 Android 中更新 TextView