【发布时间】:2017-07-25 15:34:54
【问题描述】:
我在 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 和主窗口中的打印语句打印我需要的内容,但我无法让它在 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
【问题讨论】:
-
请分享通过它生成的.ui或类。
-
@eyllanesc 这些类是通过什么生成的?
-
带有 pyuic 的 Qt 设计器。
-
我不想要一个模式,但是完整的代码或者至少它是可重现的。
标签: python python-3.x function class pyqt