私はPythonで、3つの別個のウィジェット、loginBackend、editorBackend、mapBackendを含むスタックウィジェットからなるGUIを作成しました。それらは、loginBackend、editorBackend、mapBackendという名前の別々のクラスです。それぞれはmainBackendと呼ばれるクラスとメインウィジェットから呼び出されます。アイデアは、ユーザーが(loginBackendウィジェットを使用して)ログインし、残りのウィジェットにアクセスできるようにすることです。問題は、他のウィジェットのそれぞれがデータベースに接続するためにログイン情報を必要とすることです。何らかの理由で、editorBackendクラスから情報を呼び出すときに情報が正しく返されないことがあります。私は何をしようとしていますと、これは別のGUIクラスから関数を呼び出すPython
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)
これはloginBackend
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
であるが、これはこれらとプットの両方を呼び出すメインウィンドウeditorBackendである。この
のようなものですそれらを積み重なったウィジェットに変換します。
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には何も印刷することができません。誰かがこれを修正する方法や回避策に関する提案はありますか?
デザイナーファイル(省略):
logindesignクラス:
class Ui_Login(object):
def setupUi(self, Login):
Login.setObjectName("Login")
...
...
...
def retranslateUi(self, Login):
_translate = QtCore.QCoreApplication.translate
editordesignクラス:
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
で関数を作成します.uiか、それを介して生成されたクラスを共有してください。 – eyllanesc
@eyllanescどのクラスから生成されたクラスですか? – JBChenault
Quit Designer with pyuic。 – eyllanesc