2017-07-25 23 views
0

私は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 
+0

にメインウィンドウからログイン情報を送信editorBackend

from loginBackend import loginBackend class editorBackend(QWidget, editordesign.Ui_Form): def __init__(self): super(self.__class__, self).__init__() self.setupUi(self) self.initUI() self.url = None def initUI(self): self.submitPushButton.clicked.connect(self.Insert) #### NEW FUNCTION #### def getUrl(self, url): self.url = url print('getUrl '+url) ###################### def Insert(self): print('url: ' + self.url) 

で関数を作成します.uiか、それを介して生成されたクラスを共有してください。 – eyllanesc

+0

@eyllanescどのクラスから生成されたクラスですか? – JBChenault

+0

Quit Designer with pyuic。 – eyllanesc

答えて

0

だから私は解決私の問題は、私が情報を必要とするクラスで関数を作成することです。私はそれから、主なウィンドウ(私が値を得ることができることを知っていたところ)から引数として渡すことができました。下に示された。

は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) 

     ### PASS THE INFORMATION TO editorBackend ### 
     self.edit.getUrl(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() 
関連する問題