在相同位置隐藏或显示QLabel
我想在用户名和密码错误时,分别显示“无效用户名”和“无效密码”的提示标签,否则就不显示它们。
我试过使用hide()和show()这两个方法,但使用show()方法时,这些提示标签会在一个单独的弹出窗口中显示,而不是像上面那样(在黑色框框里)显示。
我是在用Python写代码。
请给我一些建议。
导入的库:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
下面是代码:
#Labels
self.ErrorUsrName = QLabel("Invalid Username")
self.ErrorPasswd = QLabel("Invalid Password")
#Buttons
self.Lbutton = QPushButton("Login")
self.Cbutton = QPushButton("Cancel")
#Line Edits
self.UsrName = QLineEdit("Username")
self.Passwd = QLineEdit("Password")
self.UsrName.selectAll()
#Grid Layout
self.grid = QGridLayout()
self.grid.addWidget(self.UsrName,1,0)
self.grid.addWidget(self.ErrorUsrName.hide(),2,0)
self.grid.addWidget(self.Passwd,3,0)
self.grid.addWidget(self.ErrorPasswd.hide(),4,0)
self.grid.addWidget(self.Lbutton,5,0)
self.grid.addWidget(self.Cbutton,6,0)
self.setLayout(self.grid)
self.UsrName.setFocus()
#Signals
self.connect(self.Cbutton,SIGNAL("clicked()"), self, SLOT("reject()"))
self.connect(self.Lbutton,SIGNAL("clicked()"),self.login)
按钮的登录功能
def login(self):
if (self.UsrName.text() == "Ejaz" and self.Passwd.text() == "test"):
print "Login Successful!"
elif self.UsrName.text() <> "Ejaz":
self.ErrorUsrName.show()
elif self.Passwd.text() <> "test":
self.ErrorPasswd.show()
1 个回答
1
你的问题出在以下几行代码:
self.grid.addWidget(self.ErrorUsrName.hide(),2,0)
...
self.grid.addWidget(self.ErrorPasswd.hide(),4,0)
这里的 hide 函数并没有返回 QLabel 对象,所以你没有把它们添加到网格中。你应该在其他地方调用 hide() 函数,比如:
#Labels
self.ErrorUsrName = QLabel("Invalid Username")
self.ErrorUsrName.hide()
self.ErrorPasswd = QLabel("Invalid Password")
self.ErrorPasswd.hide()
...
self.grid.addWidget(self.ErrorUsrName,2,0)
self.grid.addWidget(self.ErrorPasswd,4,0)
这样就能解决你的问题了。