python之PyQt4製作登陸介面
對於初次做GUI程式的人來說,確實登陸視窗程式會造成困惑,以前做Delphi時也有人問過我,好不容易人家才理解清楚,PyQt也是一樣的。
一般有兩種處理方式:
第一種:在開啟主窗體前開啟登陸對話方塊,如果登陸成功,再建立主窗體並開啟;
第二種:在建立主窗體後,在顯示主窗體前開啟登陸對話方塊,如果登陸成功,顯示主窗體,如果失敗,不顯示主窗體,並退出程式。
我推薦第一種方式,邏輯清晰,並且如果登陸不成功,那麼不需要建立主窗體。
先放開登陸對話方塊不管,最簡單的來理解,那麼可以我們可以把登陸這個行為理解為一個方法,如果這個方法成功,那麼就建立並顯示主窗體。說白了和確認對話方塊一樣的 ,確認對話方塊並不需要你來處理如何建立並開啟會對話方塊,你只要呼叫這個方法即可,系統會幫你開啟對話方塊。
那麼來看程式碼:
from PyQt4 import QtGui, QtCore
def login():
return True
if __name__ == ‘__main__’:
import sys
app = QtGui.QApplication(sys.argv)
if login():
win = QtGui.QMainWindow()
win.show()
sys.exit(app.exec_())
這段程式碼應該很好理解,這裡定義了這個login方法,你可以試著把返回值設成False,這樣主窗體就不會顯示了,說明可以達到你的要求了。這裡把複雜性都隱 藏到login方法裡了,把開啟對話方塊的程式碼就寫在這個方法裡面。
# 建立一個Login對話方塊:
class LoginDialog(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.user = QtGui.QLineEdit(self)
self.user.move(10, 20)
self.user.setText(‘admin’)
self.pwd = QtGui.QLineEdit(self)
self.pwd.move(10, 60)
self.pwd.setText(‘admin’)
self.pwd.setEchoMode(QtGui.QLineEdit.Password)
loginBtn = QtGui.QPushButton(‘Login’, self)
loginBtn.move(100, 90)
loginBtn.clicked.connect(self.login) # 繫結方法判斷使用者名稱和密碼
def login(self):
if unicode(self.user.text()) == u’admin’ and
unicode(self.pwd.text()) == u’admin’:
# 如果使用者名稱和密碼正確,關閉對話方塊,accept()關閉後,如果增加一個取消按鈕呼叫reject()
self.accept()
else:
QtGui.QMessageBox.critical(self, ‘Error’, ‘User name or
password error’)
# login方法更改如下:
def login():
dialog = LoginDialog()
if dialog.exec_():
return True
return False
# 當然如果你嫌login方法這樣寫囉嗦,那麼可以直接這樣寫:
if __name__ == ‘__main__’:
import sys
app = QtGui.QApplication(sys.argv)
dialog = LoginDialog()
if dialog.exec_():
win = QtGui.QMainWindow()
win.show()
sys.exit(app.exec_())
完整程式碼:
- from PyQt4 import QtGui
- class LoginDialog(QtGui.QDialog):
- def __init__(self, parent=None):
- QtGui.QDialog.__init__(self, parent)
- self.setWindowTitle(‘login’)
- self.user = QtGui.QLineEdit(self)
- self.user.move(10, 20)
- self.user.setText(‘admin’)
- self.pwd = QtGui.QLineEdit(self)
- self.pwd.move(10, 60)
- self.pwd.setText(‘admin’)
- self.pwd.setEchoMode(QtGui.QLineEdit.Password)
- self.loginBtn = QtGui.QPushButton(‘Login’, self)
- self.loginBtn.move(100, 90)
- self.loginBtn.clicked.connect(self.login) # 繫結方法判斷使用者名稱和密碼
- def login(self):
- if self.user.text() == ‘admin’ and self.pwd.text() == ‘admin’:
- # 如果使用者名稱和密碼正確,關閉對話方塊,accept()關閉後,如果增加一個取消按鈕呼叫reject()
- self.accept()
- else:
- QtGui.QMessageBox.critical(self, ‘Error’, ‘User name or password error’)
- if __name__ == ‘__main__’:
- import sys
- app = QtGui.QApplication(sys.argv)
- dialog = LoginDialog()
- if dialog.exec_():
- win = QtGui.QMainWindow()
- win.setWindowTitle(‘MainWindow’)
- win.show()
- sys.exit(app.exec_())