今天初次使用了PyQt5,感覺不錯。
注意的問題是,PyQt5貌似只支持Python 3
碰到的問題:
沒有找到QString類型,貌似是使用的Python的內建str類型。因此無法使用trimmed等方法,而要使用strip()方法。
connect方法和C++版本不一樣。具體情況見代碼。
在Qt5中,沒有找到QVBoxLayout的setMargin方法,查找文檔發現已經替換成了setContentsMargins方法。
OK,看一下代碼吧:
#!/usr/bin/python3
#coding:utf-8
from PyQt5.QtWidgets import *
import sys
class LoginDlg(QDialog):
def __init__(self, parent=None):
super(LoginDlg, self).__init__(parent)
usr = QLabel("用戶:")
pwd = QLabel("密碼:")
self.usrLineEdit = QLineEdit()
self.pwdLineEdit = QLineEdit()
self.pwdLineEdit.setEchoMode(QLineEdit.Password)
gridLayout = QGridLayout()
gridLayout.addWidget(usr, 0, 0, 1, 1)
gridLayout.addWidget(pwd, 1, 0, 1, 1)
gridLayout.addWidget(self.usrLineEdit, 0, 1, 1, 3);
gridLayout.addWidget(self.pwdLineEdit, 1, 1, 1, 3);
okBtn = QPushButton("確定")
cancelBtn = QPushButton("取消")
btnLayout = QHBoxLayout()
btnLayout.setSpacing(60)
btnLayout.addWidget(okBtn)
btnLayout.addWidget(cancelBtn)
dlgLayout = QVBoxLayout()
dlgLayout.setContentsMargins(40, 40, 40, 40)
dlgLayout.addLayout(gridLayout)
dlgLayout.addStretch(40)
dlgLayout.addLayout(btnLayout)
self.setLayout(dlgLayout)
okBtn.clicked.connect(self.accept)
cancelBtn.clicked.connect(self.reject)
self.setWindowTitle("登錄")
self.resize(300, 200)
def accept(self):
if self.usrLineEdit.text().strip() == "eric" and self.pwdLineEdit.text() == "eric":
super(LoginDlg, self).accept()
else:
QMessageBox.warning(self,
"警告",
"用戶名或密碼錯誤!",
QMessageBox.Yes)
self.usrLineEdit.setFocus()
app = QApplication(sys.argv)
dlg = LoginDlg()
dlg.show()
dlg.exec_()
app.exit()
效果如下: