1. 程式人生 > >python之PyQt4製作登陸介面

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_()) 
完整程式碼:

  1. from PyQt4 import QtGui
  2. class LoginDialog(QtGui.QDialog):
  3. def __init__(self, parent=None):
  4. QtGui.QDialog.__init__(self, parent)
  5. self.setWindowTitle(‘login’)
  6. self.user = QtGui.QLineEdit(self)
  7. self.user.move(10, 20)
  8. self.user.setText(‘admin’)
  9. self.pwd = QtGui.QLineEdit(self)
  10. self.pwd.move(10, 60)
  11. self.pwd.setText(‘admin’)
  12. self.pwd.setEchoMode(QtGui.QLineEdit.Password)
  13. self.loginBtn = QtGui.QPushButton(‘Login’, self)
  14. self.loginBtn.move(100, 90)
  15. self.loginBtn.clicked.connect(self.login) # 繫結方法判斷使用者名稱和密碼
  16. def login(self):
  17. if self.user.text() == ‘admin’ and self.pwd.text() == ‘admin’:
  18. # 如果使用者名稱和密碼正確,關閉對話方塊,accept()關閉後,如果增加一個取消按鈕呼叫reject()
  19. self.accept()
  20. else:
  21. QtGui.QMessageBox.critical(self, ‘Error’, ‘User name or password error’)
  22. if __name__ == ‘__main__’:
  23. import sys
  24. app = QtGui.QApplication(sys.argv)
  25. dialog = LoginDialog()
  26. if dialog.exec_():
  27. win = QtGui.QMainWindow()
  28. win.setWindowTitle(‘MainWindow’)
  29. win.show()
  30. sys.exit(app.exec_())