使用 QtDesigner 的 pyQt 信号/槽

2024-04-29

我正在尝试编写一个与 QGraphicsView 交互的程序。我想在 QGraphicsView 中发生事件时收集鼠标和键盘事件。例如,如果用户单击 QGraphicsView 小部件,我将获得鼠标位置,类似的东西。我可以很容易地对其进行硬编码,但我想使用 QtDesigner,因为 UI 会经常更改。

这是我的 gui.py 代码。一个简单的小部件,其中包含 QGraphicsView。

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_graphicsViewWidget(object):
    def setupUi(self, graphicsViewWidget):
        graphicsViewWidget.setObjectName(_fromUtf8("graphicsViewWidget"))
        graphicsViewWidget.resize(400, 300)
        graphicsViewWidget.setMouseTracking(True)
        self.graphicsView = QtGui.QGraphicsView(graphicsViewWidget)
        self.graphicsView.setGeometry(QtCore.QRect(70, 40, 256, 192))
        self.graphicsView.setObjectName(_fromUtf8("graphicsView"))

        self.retranslateUi(graphicsViewWidget)
        QtCore.QMetaObject.connectSlotsByName(graphicsViewWidget)

    def retranslateUi(self, graphicsViewWidget):
        graphicsViewWidget.setWindowTitle(QtGui.QApplication.translate("graphicsViewWidget", "Form", None, QtGui.QApplication.UnicodeUTF8))

该程序的代码:

#!/usr/bin/python -d

import sys
from PyQt4 import QtCore, QtGui
from gui import Ui_graphicsViewWidget

class MyForm(QtGui.QMainWindow):

    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_graphicsViewWidget()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.ui.graphicsView, QtCore.SIGNAL("moved"), self.test)

    def mouseMoveEvent(self, event):
        print "Mouse Pointer is currently hovering at: ", event.pos()
        self.emit(QtCore.SIGNAL("moved"), event)

    def test(self, event):
        print('in test')

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

当我运行这段代码时,它给出的结果与我想要的相反。除了 QGraphicsView 内部之外,我在任何地方都可以获取鼠标位置。

我确定这是我的 QObject.connect 的问题。但每次我回去阅读有关信号和槽的内容时,它都是有道理的,但我无法理解。

请大家帮帮忙,我这几天一直头疼。如果之前有人问过这个问题,我很抱歉,但我已经浏览了有关此主题的所有线程,但我无法得到任何结果。

Thanks


信号必须来自QGraphicsViewui 中定义的对象。

您可以创建一个派生类QGraphicsView像这样

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MyView(QGraphicsView):
    moved = pyqtSignal(QMouseEvent)

    def __init__(self, parent = None):
        super(MyView, self).__init__(parent)

    def mouseMoveEvent(self, event):
        # call the base method to be sure the events are forwarded to the scene
        super(MyView, self).mouseMoveEvent(event)

        print "Mouse Pointer is currently hovering at: ", event.pos()
        self.moved.emit(event)

然后,在设计器中:

  • 右键单击QGraphicsView then 晋升至
  • 将类名写入晋升班级名称字段(例如“MyView”),
  • 写入该类所在的文件名头文件场但没有.py扩大,
  • 单击Add按钮,然后按Promote button.

你可以重新生成你的文件gui.py与 pyuic4。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 QtDesigner 的 pyQt 信号/槽 的相关文章

随机推荐

  • Excel VLOOKUP 和 SEARCH 组合

    我试图在文本列中搜索文本字符串的一部分并返回第二列 希望这通过一个示例更有意义 请注意 这个示例是编造的 我无法发布我正在使用的确切数据 但这与它类似 例如 A D E Really good dog Good dog text1 red
  • 对早期设备使用 Roboto 字体

    我想在我的 Android 应用程序中使用 Roboto 字体 并确保它适用于未安装该字体的早期版本的 Android 我知道我可以通过使用 Typeface createFromAsset 然后手动设置每个 TextViews Butto
  • 了解使用 Overflow:hidden 的内联块元素的换行行为

    我想要两个inline block元素保留在同一行 无论它们如何width or margin 快速解决方案是申请white space nowrap到容器 Flex 和 float 是同样有效的替代方案 我只是坚持找出特定的包装行为whi
  • Laravel 5.2 升级 - 找不到类 AuthServiceProvider

    我目前正在花时间将我的项目从 Laravel 4 2 升级到 Laravel 5 2 经过很多麻烦 我设法让 5 1 版本正确运行 因此我按照官方文档中所述开始了 5 1 到 5 2 的过程 https laravel com docs 5
  • Android 日期/时间显示 0 而不是 12

    我想知道下面的代码有什么问题 Assign hour set in the picker c set Calendar HOUR selectedHour c set Calendar MINUTE selectedMinute For a
  • 如何从属性中获取枚举值

    我有一个带有值的枚举VALID and INVALID 它们有一个与之关联的布尔属性 我想根据我提供的布尔值获取枚举值 如果是true我应该得到VALID 如果是false我应该得到INVALID 我想根据成员变量的值 在如下所示的 get
  • 每行 5 个项目,自动调整 Flexbox 中项目的大小

    我现在有这个 container background gray width 600px display flex flex flow row wrap position relative item background blue widt
  • 如何提高加速度计和指南针传感器的精度?

    我正在创建一个增强现实应用程序 当手机面向兴趣点 GPS 位置存储在手机上 时 它可以简单地可视化文本视图 文本视图绘制在屏幕中的兴趣点位置上 它工作正常 问题是指南针和加速度计非常 变体 并且文本视图由于传感器的准确性而不断左右上下移动
  • 如何在输入Bootstrap Datepicker中仅显示年份?

    我使用以下代码仅显示年份 datepicker datepicker viewMode years minViewMode years 但输入以格式显示 dd mm yyyy 由于我没有格式 我该如何解决这个问题 yyyy 尝试这个 dat
  • Flex 子项上的文本溢出省略号不起作用[重复]

    这个问题在这里已经有答案了 我有一个容器flex 我希望中间的孩子占据整个空间 所以我设置了它flex 1 到目前为止 一切都很好 下一个级别是中间的孩子有 2 个孩子 所以我也想将其设置为 Flex 如果你迷失了我 只需跳到片段 第一个孩
  • 如何抑制有关已弃用 api 的 javac 警告?

    当我编译时 javac 输出 Note Some input files use or override a deprecated API Note Recompile with Xlint deprecation for details
  • 如何将文件保存到 iPhone 上?

    我有一个问题 你们大多数人可能会觉得有点奇怪 我正在为 OS X 制作一个应用程序 但我需要它来将文本文件写入 iPhone 文件夹 我知道 iPhone 必须连接到电脑 而且我认为发送电子邮件不起作用 我认为这就像在连接时找到 iPhon
  • 作为 iOS 应用程序向 Google Cloud Endpoints 进行身份验证(不是具有 Google 帐户凭据的用户)

    我的一个 iOS 应用程序使用 Google Cloud Endpoints 联系我的一项服务 我想限制该应用程序实例对该服务的访问 我已按照有关添加的说明进行操作授权 https developers google com appengi
  • 我们可以在 Mysql 查询中使用 PHP 函数 strtotime [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有以下 MySQL 语法 这给了我一个错误 我知道你不能直接比较日期变量 所以我使用strtotime创建 Unix 时间戳来比较日
  • 尽管设置为 1.7,IntelliJ IDEA 13 仍使用 Java 1.5

    尽管在所有项目设置中指定了 JDK 1 7 包括File gt Project Structure gt Project Project SDK 则产生以下错误IntelliJ 13当尝试编译一些使用菱形运算符的简单 Java 7 代码时
  • Spring:当我的类已经用@RestController注释时,为什么我仍然应该使用@RequestBody?

    我目前正在将 Java 和 Spring 用于我的 Web 服务应用程序 我正在使用 RestController希望消除使用注释的需要 ResponseBody and RequestBody注释 不幸的是 删除 RequestBody注
  • “程序中出现杂散'\226'”编译器错误[重复]

    这个问题在这里已经有答案了 我写了下面的代码 其目的是实施一个双向链表 但出现了错误 while x 1 This line showed errors return 1 Errors DoublyLinkedList c In funct
  • 如何在 django 中为模板应用背景图像

    在我的网站中 在特定的表格中 我必须插入图像作为背景 我这样做了 但图像看起来像双图像 因为图像小于单元格宽度和高度 它正在重叠 在背景图像单元格中 我使用 no repeat 来结束同一图像的重复显示 但它不起作用 我正在 django
  • 如何使用 UIImagePickerController 呈现 ViewController

    我试图提出一个ImagePicker 然后在用户选择图像后 呈现图像编辑ViewController用户可以在其中操作图像 然后将编辑后的图像发送回原始图像ViewController 问题 是否有一种标准或最佳实践方法从初始 ViewCo
  • 使用 QtDesigner 的 pyQt 信号/槽

    我正在尝试编写一个与 QGraphicsView 交互的程序 我想在 QGraphicsView 中发生事件时收集鼠标和键盘事件 例如 如果用户单击 QGraphicsView 小部件 我将获得鼠标位置 类似的东西 我可以很容易地对其进行硬