限定QLineEdit只接收某一范围的整数

记不清是第几次看到有人问这个问题了:"如何限定QLineEdit只接收某一范围的整数"

方法一

不使用 QLineEdit,因为 QSpinBox 提供了我们和整数打交道需要的功能,直接使用 QSpinBox 是最简单的。

可能有人想:我不想要 QSpinBox 提供的那两个按钮,我不想让用户修改数据,...

这些都容易解决,具体看QSpinBox 的 Manual,或者看下面的例子

方法二

这个可能比上一个更容易想到,用 QIntValidator 。但说实话,这个没有前面的方法好用。

比如:有人抱怨,编辑结束时它不会自动 fixup 无效的数据(例如,范围为100~200,输入50,它就显示50,不会修正为100)

当然,这些问题都可以解决,子类化 QValidator 就行了。具体看QValidator的Manual 或下面的例子

例子

  • PyQt4 4.7.4 (注意:PySide 0.4.2 有bug)

  • Python2.7 + Qt 4.7.0

分别采用上面的两种方式(QSpinBox 和 QLineEdit+Validator),实现大致类似的结果(优劣自己评判吧)

截图

代码

#!/usr/bin/env python




#--*-- coding:utf-8 --*--




# (C) dbzhang800 2010




import

 sys




try

:


    raise

 ImportError




    from

 PySide

 import

 QtCore

, QtGui




except

 ImportError

:


    import

 sip




    sip

.setapi

("

QString

"

, 2

)


    from

 PyQt4

 import

 QtCore

, QtGui





class

 Validator

(QtGui

.QIntValidator

):


    def

 __init__

(self

, minimun

, maximum

, parent

):


        super

(Validator

, self

).__init__

(minimun

, maximum

, parent

)



    def

 fixup

(self

, input

): # 



not work



 in PySide 0.4.2 




        return

 str

(self

.bottom

())



class

 Dialog

(QtGui

.QDialog

):


    def

 __init__

(self

, parent

=None

):


        super

(Dialog

, self

).__init__

(parent

)



        self

.lineEdit

 = QtGui

.QLineEdit

()


        self

.validator

 = Validator

(100

,200

, self

)


        self

.lineEdit

.setValidator

(self

.validator

)


        self

.spinBox

 = QtGui

.QSpinBox

()


        self

.spinBox

.setRange

(100

, 200

)


        self

.spinBox

.setButtonSymbols

(QtGui

.QAbstractSpinBox

.NoButtons

)



        vbox

 = QtGui

.QVBoxLayout

(self

)


        vbox

.addWidget

(self

.lineEdit

)


        vbox

.addWidget

(self

.spinBox

)


        


        self

.setWindowTitle

('

Qt Validator

'

)



if

 __name__

 == '

__main__

'

:


    app

 = QtGui

.QApplication

(sys

.argv

)


    dlg

 = Dialog

()


    dlg

.show

()


    sys

.exit

(app

.exec_

())

来源:http://hi.baidu.com/cyclone/blog/item/663709236315e95e925807d1.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值