我用Python创建了一个GUI,它由一个堆叠的小部件组成,其中包含3个独立的小部件:loginBackend、editorBackend和mapBackend。它们都是独立的类,也称为loginBackend、editorBackend、mapBackend。每一个都是从一个名为mainBackend的类和主窗口小部件调用的。其思想是用户将登录(使用loginBackend小部件),然后可以访问其余的小部件。问题是,其他每个小部件都需要登录信息才能连接到数据库。由于某些原因,当我从editorBackend类调用它时,无法获得正确返回的信息。我想做的就是这样
这是编辑背景
from loginBackend import loginBackend
class editorBackend(QWidget, editordesign.Ui_Form):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.initUI()
def initUI(self):
self.submitPushButton.clicked.connect(self.Insert)
def Insert(self):
login = loginBackend()
url = login.creds()
print('url: ' + url)
这是登录备份
class loginBackend(QWidget, logindesign.Ui_Login):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
def creds(self):
username = self.userLineEdit.text()
password = self.passLineEdit.text()
host = self.selHostLabel.text()
port = self.selPortLabel.text()
sid = self.selSIDLabel.text()
cred = username + '/' + password + '@' + host + ':' + port + '/' + sid
print('creds: '+ cred)
return cred
然后这是主窗口,它调用这两个并将它们放入一个堆叠的小部件中。你知道吗
from PyQt5.QtWidgets import QApplication,QMainWindow
import sys
from loginBackend import loginBackend
from mapBackend import mapBackend
from editorBackend import editorBackend
from editTNSnamesBackend import editTNSnamesBackend
import mainwindow
class mainBackend(QMainWindow, mainwindow.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.initUI()
def initUI(self):
self.url = None
self.popList()
self.login = loginBackend()
self.mapping = mapBackend()
self.edit = editorBackend()
self.editTNS = editTNSnamesBackend()
self.popWidgets()
self.listWidget.itemClicked.connect(self.change)
self.actionTNS_Names.triggered.connect(self.editTNSnames)
def editTNSnames(self):
self.editTNS.show()
def change(self):
index = self.listWidget.currentRow()
self.stackedWidget.setCurrentIndex(index)
self.url = self.login.creds()
print('url change. ' + self.url)
def popList(self):
widgets = ['Login', 'Edit Database', 'Edit Mapping']
self.listWidget.addItems(widgets)
def popWidgets(self):
self.stackedWidget.insertWidget(0,self.login)
self.stackedWidget.setCurrentWidget(self.login)
self.stackedWidget.insertWidget(1,self.edit)
self.stackedWidget.setCurrentWidget(self.edit)
self.stackedWidget.insertWidget(2,self.mapping)
self.stackedWidget.setCurrentWidget(self.mapping)
self.stackedWidget.setCurrentIndex(0)
self.listWidget.setCurrentRow(0)
def main():
app = 0
app = QApplication(sys.argv)
main_window = mainBackend()
main_window.show()
app.exec_()
if __name__ == "__main__":
main()
loginBackend和主窗口中的print语句打印我需要的内容,但我无法让它在editorBackend中打印任何内容。有人对如何解决这个问题有什么建议吗?或者有什么解决办法吗?你知道吗
设计器文件(缩写):
登录设计类:
class Ui_Login(object):
def setupUi(self, Login):
Login.setObjectName("Login")
...
...
...
def retranslateUi(self, Login):
_translate = QtCore.QCoreApplication.translate
编辑器设计类:
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
...
...
...
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
主窗口类:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
...
...
...
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
所以我通过在类中创建一个函数来解决我的问题。然后我就可以把它作为一个参数从主窗口传递出去(在那里我知道我可以得到值)。如下所示。你知道吗
在editorBackend中创建函数
将登录信息从主窗口发送到editorBackend
相关问题 更多 >
编程相关推荐