PyQt中登录框设计
来源:互联网 发布:网页恶搞软件 编辑:程序博客网 时间:2024/06/16 18:58
很多软件,比如QQ,亦或一些管理系统,运行之后都会先弹出一个登录框,只有登录成功了,才能进入软件主界面。以前在邮件列表中回答过如何做登录框,这里重新整理下。从刚开始做Delphi的时候就有不少人纠结登录框问题,我考虑造成困惑的原因是有几个地方搞不明白:何时弹出登录框?何处弹出登录框?登录逻辑写在何处?这里有两种方案:在打开主窗体前打开登录对话框,如果验证成功,再创建主窗体并打开;在创建主窗体时,既__init__方法里创建并显示登录框,如果成功,显示主窗体,失败则退出程序。我推荐第一种方案,这里也用第一种做例子,逻辑清晰,如果登录验证不成功,直接退出,不需要创建主窗体。为什么会有第二种方案,网上能找到类似的例子,还有以前学Delphi的时候,好多书上都用的第二种方案,其实这种方案不好。说到这里你可能还是不清楚如何弄,那我们弄得更简单点,抛开登录框不谈,定义一个login方法,如果成功,就创建并显示主窗体,失败则退出:def login():"""返回True或False"""returnTrue if __name__ =='__main__':import sysapp =QtGui.QApplication(sys.argv)if login():mainWindow =QtGui.QMainWindow()mainWindow.show()sys.exit(app.exec_())现在应该很清楚了吧,把打开登录框隐藏到login里,并根据登录框的结果返回值。def login():"""返回True或False"""dialog =LoginDialog()if dialog.exec_():returnTrueelse:returnFalse在登录框中验证是否成功,验证这块如果复杂,你可以放到其他模块中,在登录框中进行调用,给登录按钮绑定事件处理即可。classLoginDialog(QtGui.QDialog):def __init__(self, parent=None):QtGui.QDialog.__init__(self, parent)self.setWindowTitle(u'登录')self.resize(300,150) self.leName =QtGui.QLineEdit(self)self.leName.setPlaceholderText(u'用户名') self.lePassword =QtGui.QLineEdit(self)self.lePassword.setEchoMode(QtGui.QLineEdit.Password)self.lePassword.setPlaceholderText(u'密码') self.pbLogin =QtGui.QPushButton(u'登录',self)self.pbCancel =QtGui.QPushButton(u'取消',self) self.pbLogin.clicked.connect(self.login)self.pbCancel.clicked.connect(self.reject) layout =QtGui.QVBoxLayout()layout.addWidget(self.leName)layout.addWidget(self.lePassword) # 放一个间隔对象美化布局spacerItem =QtGui.QSpacerItem(20,48,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)layout.addItem(spacerItem) # 按钮布局buttonLayout =QtGui.QHBoxLayout()# 左侧放一个间隔spancerItem2 =QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)buttonLayout.addItem(spancerItem2)buttonLayout.addWidget(self.pbLogin)buttonLayout.addWidget(self.pbCancel) layout.addLayout(buttonLayout) self.setLayout(layout)完整代码和截图如下:# -*- coding: utf-8 -*-fromPyQt4importQtGui,QtCore classLoginDialog(QtGui.QDialog):def __init__(self, parent=None):QtGui.QDialog.__init__(self, parent)self.setWindowTitle(u'登录')self.resize(300,150) self.leName =QtGui.QLineEdit(self)self.leName.setPlaceholderText(u'用户名') self.lePassword =QtGui.QLineEdit(self)self.lePassword.setEchoMode(QtGui.QLineEdit.Password)self.lePassword.setPlaceholderText(u'密码') self.pbLogin =QtGui.QPushButton(u'登录',self)self.pbCancel =QtGui.QPushButton(u'取消',self) self.pbLogin.clicked.connect(self.login)self.pbCancel.clicked.connect(self.reject) layout =QtGui.QVBoxLayout()layout.addWidget(self.leName)layout.addWidget(self.lePassword) # 放一个间隔对象美化布局spacerItem =QtGui.QSpacerItem(20,48,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)layout.addItem(spacerItem) # 按钮布局buttonLayout =QtGui.QHBoxLayout()# 左侧放一个间隔spancerItem2 =QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)buttonLayout.addItem(spancerItem2)buttonLayout.addWidget(self.pbLogin)buttonLayout.addWidget(self.pbCancel) layout.addLayout(buttonLayout) self.setLayout(layout) def login(self):print'login'ifself.leName.text()=='admin'andself.lePassword.text()=='jimmykuu':self.accept()# 关闭对话框并返回1else:QtGui.QMessageBox.critical(self, u'错误', u'用户名密码不匹配') def login():"""返回True或False"""dialog =LoginDialog()if dialog.exec_():returnTrueelse:returnFalse if __name__ =='__main__':import sysapp =QtGui.QApplication(sys.argv)if login():mainWindow =QtGui.QMainWindow()mainWindow.show()sys.exit(app.exec_())"""如果不写login方法可以这么写:dialog = LoginDialog()if dialog.exec_():mainWindow = QtGui.QMainWindow()mainWindow.show()sys.exit(app.exec_())"""
![http://jimmykuu.qiniudn.com/blog/10_1.jpg](http://jimmykuu.qiniudn.com/blog/10_1.jpg)
0 0
- PyQt中登录框设计
- pyQt 每日一练习 -- 登录框
- pyqt的登录窗口
- pyqt的登录窗口
- PyQt自定义选择输入框(类似QQ登录输入框)
- 使用pyqt自动登录5sing.com
- [PyQt]使用Qt Designer设计师完成PyQt界面图标设计
- HTML5 登录框设计
- 在PyCharm中安装PyQt
- PyQt中嵌入图片资源
- 详解Pyqt中设置图标
- pyqt中tablewidget的使用
- 在linux中安装pyqt
- PyQt
- PyQt
- PyQt
- PYQT
- 使用Eclipse + PyQT设计GUI程序
- phpstorm8的使用
- ios各种地图的跳转并导航
- maven仓库快速镜像
- python __init__.py
- 用户pin转码
- PyQt中登录框设计
- 好文章-地址
- 【Java并发编程】之一:可重入内置锁
- IPC封装官方标准IPC-SM-782A
- /bin /sbin/ /usr/bin/ /usr/loca/bin/ 各目录的区别
- iOS地球坐标,火星坐标,百度坐标互转
- 如何成为“逼格”邮件营销专家?
- ARP协议作用
- Spring配置文件中的C3P0数据源配置和事务配置(采用mysql)