检查输入 PyQt4

0 投票
1 回答
1373 浏览
提问于 2025-04-18 02:24

我想检查用户输入的内容。如果用户输入的是一个整数,就要抛出一个错误,提示用户重新输入一个字符串,这样“确定”按钮就会被拒绝。如果用户什么都没有输入,也要有同样的处理,也就是不允许没有字符串的输入。

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):      

        self.btn = QtGui.QPushButton('Dialog', self)
        self.btn.move(20, 20)
        self.btn.clicked.connect(self.showDialog)

        self.le = QtGui.QLineEdit(self)
        self.le.move(130, 22)

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Input dialog')
        self.show()

    def showDialog(self):

        text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog', 
            'Enter your name:')

        if ok:
            self.le.setText(str(text))

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

我该如何将这个应用到上面的代码中呢?

我正在使用Pyqt4,适用于Python 3。

提前谢谢你!

1 个回答

0

我没有PyQt4,但我想我的代码示例应该还是适用的。不过无论如何,你给出的代码接受的是一个字符串作为名字。如果你检查这个名字是否是整数,那它肯定不会是整数,因为你接受的答案是字符串。

至于空白的情况,这里是我的代码:

#Start a while loop to repeatedly ask.
while True:

    #A flag to help with detecting if it's a blank string.
    noneFlag = True

    #The equivalent of your  
    name = input("Your name: ")

    #A for loop - It checks if the string is nothing but blanks, or is nothing. 
    for char in name:

        if char != " ":
            noneFlag = False
            break

    #Responds on if the name is blank or not.
    if noneFlag:
        print("Name field is blank.")
    else:
        #Breaks the loop.
        break

注意:你这一行:

text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog', 
        'Enter your name:')

相当于我的输入语句。

--- 编辑 ---

好的,这里是你想要的代码;不过要记住,除非你把代码改成接受整数类型的变量,否则它永远不会把它当作整数来看。

if noneFlag:
    print("Name field is blank.")
elif isinstance(name, int):
    print("Name field is an int.")
else:
    break

简单来说,我想说的是,如果一个变量是字符串,Python是无法检测它是否是数字的。例如:“1234567890”作为一个字符串是不会被视为整数的,因为它的实际类型是字符串。

撰写回答