当前位置: 首页 > 面试题库 >

PyQt连接到KeyPressEvent

党源
2023-03-14
问题内容

某些小部件将允许我执行以下操作:

self.widget.clicked.connect(on_click)

但这样做:

self.widget.keyPressEvent.connect(on_key)

无法说对象没有属性“连接”。

我知道子类化小部件并重新实现该keyPressEvent方法将使我能够响应事件。但是,如何.connect()从用户上下文来看此后的键盘事件或以其他方式说呢?


问题答案:

创建一个自定义信号,并从重新实现的事件处理程序中发出它:

class MyWidget(QtGui.QWidget):
    keyPressed = QtCore.pyqtSignal(int)

    def keyPressEvent(self, event):
        super(MyWidget, self).keyPressEvent(event)
        self.keyPressed.emit(event.key())
...

def on_key(key):
    # test for a specific key
    if key == QtCore.Qt.Key_Return:
        print('return key pressed')
    else:
        print('key pressed: %i' % key)

self.widget.keyPressed.connect(on_key)

(注意:为了保持事件的现有处理,需要调用基类实现)。



 类似资料:
  • 问题内容: 我编写了一个程序,用于从串行发送和接收数据,但是我有一个问题,我想创建一个函数“ connect()”或一个类,并且当我按下按钮时,该函数就会执行,但是如果我创建“ MainWindow”类中的此函数,“ TestThread”类中的变量“ ser”未初始化,您能帮我吗? 问题答案: 与其使用pySerial +线程,不如使用它与Qt事件循环一起使用:

  • 问题内容: 我有一个任务栏菜单,单击该任务栏菜单将其连接到获取触发事件的插槽。现在的问题是,我想知道单击了哪个菜单项,但是我不知道如何将该信息发送到连接的功能。这是用于将操作连接到功能的代码: 我知道有些事件会返回一个值,但是Trigger()不会。那么我该如何实现呢?我必须发出自己的信号吗? 问题答案: 用一个 这是PyQt书中的一个示例: 顺便说一句,您也可以使用,但是我发现该方法更加简单明了

  • 问题内容: 我有以下代码,该代码在更新ui()中的进度条时执行后台操作()。迭代in中的某个值,每次更改该值都会发出一个信号()。由于此处不相关的原因,我必须将其包装在另一个线程的对象()中。当一个按钮扫描仪被称为是。这是我的问题……以下代码可以正常工作(即进度条会及时更新)。 但是,如果我将最后一部分更改为: 进度条仅在最后更新(我猜是所有东西都在同一线程上运行)。在将对象接收对象移动到线程之前

  • 问题内容: 因此,如果我进入QtDesigner并构建UI,它将被另存为.ui文件。如何将其作为python文件或在python中使用? 问题答案: 在代码中使用.ui的另一种方法是: 两种方法都很好。不要忘记,如果您将Qt资源文件(极其有用)用于图标等,则也必须对其进行编译: 注意,在编译接口时,它将在.py文件的末尾添加“ import images_rc”,因此您必须使用此名称将资源编译到文

  • 我正在尝试运行卡桑德拉,但每次它在连接时都会给出相同的错误...有什么我需要在配置文件或属性文件中编辑的吗? ('无法连接到任何服务器',{'127.0.0.1:9042 ':错误(61,"尝试连接到[('127.0.0.1 ',9042)]。最后一个错误:连接被拒绝")}) 启动cassandra时出错

  • PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次发布也是在1998年,但是当时它叫 PyKDE,因为开始的时候SIP和PyQt没有分开。PyQt是用SIP写的。PyQt 提供 GPL版和商业版。 PyQt向Python程序员提供了使用完整Qt应用程序接口的方法。您几乎可以用Python做任何C++能做的事。 既 然是应用程序接口,用C++或是Pyt