在相同位置隐藏或显示QLabel

0 投票
1 回答
3471 浏览
提问于 2025-04-18 14:55

登录页面

我想在用户名和密码错误时,分别显示“无效用户名”和“无效密码”的提示标签,否则就不显示它们。

我试过使用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)

这样就能解决你的问题了。

撰写回答