Pyqt:将名称表单登录对话框传递给MainWindow



这是我的代码。一切都很好。但我想在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类中的pilotname标签。怎么做?

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

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

def GetPilot(self):
    return self.pilot

2)Main_Window类中将__init__行更改为:

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

3),这就是main的样子:

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_())

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

EDIT一旦Main_Window中有self.pilot字符串,就可以将其设置为pilotname标签,如下所示:

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

或者简单地尝试使用:self.ui.pilotname.setText(self.pilot)

如果"pilotname"是ui文件中标签的名称。

最新更新