Pyqt:将名称格式的登录对话框传递给MainWindow

时间:2014-11-04 05:35:26

标签: python pyqt qt-designer

这是我的code.all工作正常。但我想在MainWindow的标签中显示一个名称(在登录对话框中输入)。

 import sys
 from PyQt4 import QtGui,QtCore
 from loginD import *
 from mainwindow import Ui_MainWindow
 class Login(QtGui.QDialog):

  def __init__(self,parent=None):
    QtGui.QDialog.__init__(self,parent)
    self.ui=Ui_LoginD()
    self.ui.setupUi(self)
    self.ui.PasswordLE.setEchoMode(QtGui.QLineEdit.Password)
    pilot=str(self.ui.PilotNameLE.text())
    QtCore.QObject.connect(self.ui.LoginPB,QtCore.SIGNAL('clicked()'),
                           self.HandleLogin)
 def HandleLogin(self):
    if  self.ui.PasswordLE.text()=="a":
        self.accept()
    else:
        QtGui.QMessageBox.warning(
            self,'Error;','bad')
class Main_Window(QtGui.QMainWindow):
   def __init__(self, parent=None):
     QtGui.QWidget.__init__(self,parent)
     self.ui=Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.PioltNameL.setText(str(pilot) )
if __name__=='__main__':
  app=QtGui.QApplication(sys.argv)
  if Login().exec_()==QtGui.QDialog.Accepted:
    window=Main_Window()
    window.show()
    sys.exit(app.exec_())

我想在对话框类中将pilot(从pilotnamelinediet)传递到MainWindow class.how中的pilotname标签来执行此操作吗?

1 个答案:

答案 0 :(得分:1)

您应该发布工作示例(请注意,我们没有您的loginDUi_MainWindow), 无论如何,这应该工作:

Login课程中的

1)将此pilot=str(self.ui.PilotNameLE.text())修复为self.pilot=str(self.ui.PilotNameLE.text())并添加方法:

def GetPilot(self):
    return self.pilot
Main_Window班级中的

2)__init__行更改为:

def __init__(self, pilot, parent=None):

3)这就是主要应该是这样的:

if __name__=='__main__':
    app=QtGui.QApplication(sys.argv)
    loginDialog = Login()
    if loginDialog.exec_()==QtGui.QDialog.Accepted:
        window=Main_Window(loginDialog.GetPilot())# pass pilot from login to mainwindow
        window.show()
    sys.exit(app.exec_())

如果有任何错误,我没有测试它,所以纠正我

编辑self.pilot中有Main_Window字符串后,您可以将其设置为pilotname标签,如下所示:

self.ui.pilotname.setText(QtGui.QApplication.translate("MainWindow", self.pilot, None, QtGui.QApplication.UnicodeUTF8))

或尝试使用:self.ui.pilotname.setText(self.pilot)

如果“pilotname”是您的ui文件中的标签名称。