一个祸害我很久的东东——事件过滤器之按键触发

下面这个东东其实很常见,也很实用,平时上网的时候对之经常见,以为很简单,当然弄懂后,其实发现,他确实蛮简单的,但就是这小东西害了我好久好久啊。。。。

就是在很多页面中,我们按下特定的键就会触发特定的功能,如果是按下按钮的话,其实还蛮简单的,但是,比如当你输入在输入银行卡号的时候,尤其是电话输入的时候,没有界面上的按钮让你按,一般银行是“请输入银行卡号,以#结束”,当然我不知道,银行用的是什么系统,我只是说自己模拟这个功能的时候,发现其实还蛮伤脑筋的。。。

不多说,先上代码再解释:

from PyQt4 import QtCore,QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.edit = QtGui.QTextEdit(self)
        self.edit.installEventFilter(self)    #这句是关键的关键,以前就是少了这句折腾了老半天。。。。
        self.edit.insertPlainText(‘Please press the enter to input!\n‘) #提示用户按下Enter键输入
        self.edit.setReadOnly(True) #我将Text编辑器设为了只读
        self.setCentralWidget(self.edit)
        self.setWindowTitle(‘EventFilter‘)

    def eventFilter(self, widget, event):
        if event.type() == QtCore.QEvent.KeyPress:
            key = event.key()
            if key ==  QtCore.Qt.Key_Return:
                text,ok = QtGui.QInputDialog.getText(self,"title","Please write the sentence you want to say to me" )
                if ok and text != ‘‘:
                    self.edit.insertPlainText(text+‘\n‘)  #将用户输入的东东插入到text中
        return QtGui.QWidget.eventFilter(self,widget,event)

if __name__ == ‘__main__‘:
    import  sys
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.setGeometry(500,300,500,200)
    window.show()
    sys.exit(app.exec_())

这里其实不设置只读的话就可以输入了,好像是画蛇添足了,但是是为了说明一下eventFliter的功能呀!

再次上图(鄙视那些不上图的!)

初始ui:

按下Enter健并输入东东:

效果图:

最后提一点:那个大大的Enter键(笔记本上好像只有一个,台式机上有两个)是QtGui.Qt.Key_Return,在台式机上,右下角的Enter键对应的才是QtGui.Qt.Key_Enter

时间: 2024-10-26 20:56:56

一个祸害我很久的东东——事件过滤器之按键触发的相关文章

一个考试模拟界面——先记录一下下ui上的东东

先上图,有图有真相 要记录的有以下几点: (1)如何给控件widget加背景图片 (2)如何改变控件中的字体大小,如何让界面中字体都改变 (3)如何构造除了这么漂亮的布局呀,这一点上还是很骄傲的!嘿嘿... (4)在python2.7编写出的界面上显示中文 Part1: 还是先写如何布局吧..按照时间顺序来.. 在pyside中,关于layout,已经接触的有:QtGui.QVBoxLayout(竖直向下的),QtGui.QHBoxLayout(横向的),这两天接触到了一个QtGui.QGrid

SQLSERVER 里经常看到的CACHE STORES是神马东东?

SQLSERVER 里经常看到的CACHE STORES是神马东东? 当我们在SSMS里执行下面的SQL语句清空SQLSERVER的缓存的时候,我们会在SQL ERRORLOG里看到一些信息 DBCC FREEPROCCACHE 大家可以看到cachestore.object plans.sql plan.bound tress等名词 cachestore flush for the 'Object Plans' cachestore (part of plan cache) cachestor

推荐一些socket工具,TCP、UDP调试、抓包工具. 还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用。好工具

还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用.好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 假如有一天,你写"传统"的PHP有些累了,想玩玩socket了,搞搞python.NodeJS.GO之类的新兴语言或框架(当然我不是说这些语言不能写web),或者干脆就用PHP吧,事实上PHP5.4的性能提高的真是相当之多,用PHP 的socket函数就能简单的写一个web socket服务器

JDK8的随笔(01)_Lambda表达式是个神马东东,初尝禁果

Lambda表达式 先写写背景和最基本的东东,泛型加入和各种循环的复杂模式后面再慢慢深入. 需要看JDK8的背景 虽然网上的介绍很多,但是不如自己读一下document后来得正宗. 说一下缘由,突发的这个项目客户貌似是个暴发户,发疯什么都要用最新的,JDK8是否稳定也不管,各种要求最新.Lambda语法全上,各种jdk8最新的东西全往上搞,我靠...WS还有其他的容器是否对8的支持很好也不知道....不过,这也不是坏事,学呗~~~~ 等jdk出到12的时候再回头看看也挺有意思. 本文也是以JDK

(转)loff_t *ppos是什么东东

ssize_t generic_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos) 这是一个文件读函数 我们很容易看出输入参数中 filp 是文件 buf 是文件要读到什么地方去,用户buf count是要读多少东西 那么ppos是什么东东,是当前文件的偏移量嘛?? 但是当前文件的偏移量在filp中有定义呀.struct file { struct list_head f_list; struct dentr

BEPL是个什么东东

研究团队有个做智能服务组合的,其中用到叫BEPL的东西,因为全称是Business Process Execution Language,译成中文就是商业执行过程语言,这个东东的是整合SOA的一个执行标准语言,其中有那么一个研究叫做BPM,即业务过程管理,专门研究业务过程的.当然这些研究使用的最多的工具就是流程图啊之类的,其中也较多的用到BEPL BEPL有很多实现引擎,大部分是基于java的,因为主导里面有Oracle可能,当然我也发现了了python的一个实现在这里 基于SOA是我企业业务整

笔记:记录两个新接触的东东- required + placeholder

1.1 required="required" 1.2 placeholder 当用户还没有输入值时,输入型控件可能通过placeholder向用户显示描述性说明文字或者提示信息,这在目前网站中很常见,一些JS框架都会提供类似功能,简单的说下在旧版本中常用的解决方案,为输入控件创建一个label,然后通过CSS控制些label的位置使之覆盖在输入控件上面,当label获得焦点时,浏览器会把焦点指向输入控件.不过有了placeholder,新的浏览器就内置了这一功能,其特性值会以浅灰色样

【转】DSP是什么--DSP是神马东东??

原文:http://www.eepw.com.cn/article/272908.htm 导读:本文主要介绍的是DSP是什么,不懂得童鞋们快随小编一起学习一下DSP到底是个神马东东吧! 本文引用地址:http://www.eepw.com.cn/article/272908.htm 1.DSP是什么--简介 DSP的全称为Digital Signal Process,即数字信号处理技术,DSP芯片即指能够实现数字信号处理技术的芯片.近年来,数字信号处理器(DSP)芯片已经广泛用于自动控制.图像处

在JS中,一切东东其实都是对象

对象是组成JavaScript的基本单元,在JS中,一切东东其实都是对象,而且功能非常强大,它不仅风格独特,功能也与众不同. 一.引用(reference) 引用的概念是JS的基础之一,它是指向对象实际位置的指针.见下面的例子: var items = new Array("abc","def","hig"); //创建此数组的引用 var Ref = items; items.push("klm"); alert(Ref.l