在 pyqt4 中旋转像素图会产生不需要的翻译

2024-01-12

我正在尝试编写一个简单的应用程序,在按下按钮时旋转 png 图像。我一切正常,只是当图像旋转时,它偏离了东南方向的中心。我本以为它不是绕着中心旋转,但每旋转 45 度它就会回到原点,这很奇怪。

对于一个关键事件,我只是简单地调用:

pixmap = pixmap.transformed(QtGui.QTransform().rotate(-self.rot), QtCore.Qt.SmoothTransformation)

有没有办法设置变换的原点来阻止图像移动?


一个简单的解决方案,如果您使用的是QLabel https://srinikom.github.io/pyside-docs/PySide/QtGui/QLabel.html画出QPixmap https://srinikom.github.io/pyside-docs/PySide/QtGui/QPixmap.html,就是设置QLabel的对齐方式为AlignCenter。此外,为了避免在图像旋转的前 45 度期间初始调整 QLabel 的大小,可以将 QLabel 的最小大小设置为像素图对角线的值。然后图像应该绕其中心正确旋转,而不会出现任何不必要的来回平移。

下面我将演示如何在一个简单的应用程序中完成此操作:

import sys
from PyQt4 import QtGui, QtCore
import urllib

class myApplication(QtGui.QWidget):
    def __init__(self, parent=None):
        super(myApplication, self).__init__(parent)

        #---- Prepare a Pixmap ----

        url = ('http://sstatic.net/stackexchange/img/logos/' +
               'careers/careers-icon.png?v=0288ba302bf6')
        self.img = QtGui.QImage()
        self.img.loadFromData(urllib.urlopen(url).read())

        pixmap = QtGui.QPixmap(self.img)

        #---- Embed Pixmap in a QLabel ----

        diag = (pixmap.width()**2 + pixmap.height()**2)**0.5

        self.label = QtGui.QLabel()
        self.label.setMinimumSize(diag, diag)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setPixmap(pixmap)

        #---- Prepare a Layout ----

        grid = QtGui.QGridLayout()

        button = QtGui.QPushButton('Rotate 15 degrees')
        button.clicked.connect(self.rotate_pixmap)

        grid.addWidget(self.label, 0, 0)
        grid.addWidget(button, 1, 0)

        self.setLayout(grid)

        self.rotation = 0

    def rotate_pixmap(self):

        #---- rotate ----

        # Rotate from initial image to avoid cumulative deformation from
        # transformation

        pixmap = QtGui.QPixmap(self.img)
        self.rotation += 15

        transform = QtGui.QTransform().rotate(self.rotation)
        pixmap = pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)

        #---- update label ----

        self.label.setPixmap(pixmap)

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)

    instance = myApplication()  
    instance.show()    

    sys.exit(app.exec_())

结果是:

或者,这篇文章:无法让图像在Qt中中心旋转 https://stackoverflow.com/questions/10767587/cant-get-the-image-to-rotate-in-center-in-qt/12989406#12989406,如果您正在绘制,似乎可以解决您的问题QPixmap直接与QPainter.

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

在 pyqt4 中旋转像素图会产生不需要的翻译 的相关文章

  • PYQT4 - 如何编译 qrc 文件并将其导入到我的程序中?

    我在导入资源文件时遇到问题 我正在使用 pyqt4 和 Monkey Studio 我正在尝试导入 png 图像 当我运行该程序时 出现导入错误 例如 导入错误 没有名为 icon rc 的模块 我知道我必须使用pyrcc4 编译它 但我不
  • 如何在pyqt4中的Qt Designer中使用promote to?

    在设计器中 当我右键单击一个小部件 然后单击 升级 时 我会看到此窗口 请参阅下面的屏幕截图 我从来没有使用过这个功能 基本上 头文件让我感到困惑 它是做什么用的 这是否意味着我可以在这种情况下创建一个新类 继承 QLineEdit 并向其
  • 当在字符串中按下 QpushButton 时,如何在 QlineEdit 中获取文本?

    我正在尝试实现一个功能 我的代码如下 当用户单击名为 connect 的按钮时 我想在 shost 字符串中获取带有对象名 host 的 lineedit 中的文本 我怎样才能做到这一点 我尝试过但失败了 我该如何实现这个功能呢 impor
  • 如何在pyqt中检查复选框是否被选中

    我试图根据是否选中复选框来制作条件语句 我尝试过类似以下的操作 但它总是返回 true self folderactive QtGui QCheckBox self folders self folderactive setGeometry
  • 在qt4中单击按钮时从另一个窗口生成一个窗口

    我使用 qt4 设计器创建了两个窗口 并希望将它们链接在一起 我将它们都放在一个文件夹中 并在目录外创建了一个文件 我将使用该文件导入它们 我可以同时打开两个窗口 但这不是我想要做的 我想这样做 当在一个窗口上按下按钮时 它会打开另一个窗口
  • 无法更改 PySide.QtGui 对象的 __class__

    我经常使用 PyQt4 有时我喜欢重载一些对象以允许我添加一些功能 这在 PyQt4 中工作得很好 例如 from PyQt4 import QtGui button QtGui QPushButton class MyPushButton
  • python3 super 不适用于 PyQt 类

    python3中有一个简单的程序 from PyQt4 import QtCore import PyQt4 class Bar object def init self print Bar start super Bar self ini
  • 参数 1 具有意外类型“Ui_mainWindow”

    我正在尝试为我在这里的一些人的帮助下编写的一个小程序制作一个 GUI 无论如何 我在 PyQt 中制作了 GUI 它看起来不错 我添加了一个名为 dirButton 的按钮 上面写着 选择目录 self dirButton QtGui QP
  • 将 Python 控制台输出打印到 Qtextedit

    当我按下按钮时 我有这样的输出 版本 ROMMON 主机名 正常运行时间 RUNNING IMAGE 硬件 串行 CONFIG REGISTER 12 2 55 SE7 引导程序 Revo Solusindo 01 1 小时 27 分钟 c
  • PyInstaller 但保持 .py 文件可升级

    我已经成功地将我的 PyQt4 应用程序打包为 Windows 上的 独立 应用程序 它可以工作 然而 这个应用程序可以自我升级 这是通过用通过互联网下载的新版本替换我编写的实际代码 py 文件 来完成的 我怎样才能告诉 PyInstall
  • PyQt 连接到 KeyPressEvent

    某些小部件将允许我执行以下操作 self widget clicked connect on click 但正在做 self widget keyPressEvent connect on key 将失败 表明该对象没有属性 connect
  • 调用使用 PyInstaller(包括 PyQt4)制作的 .exe 时出现运行时错误

    所以 我有两个 py文件 一个由Qt设计器 http pyqt sourceforge net Docs PyQt4 designer html另一个基本上实现了 GUI 的功能 使用 py安装程序 https pyinstaller re
  • PIL 图像到 QPixmap 转换问题

    今天我一直在努力应对这一挑战 我已经利用之前的帖子和其他资源成功地获得了很好的观点 我正在尝试将 PIL Image 转换为 QPixmap 以便可以在 PyQT GUI 上使用 QgraphicsScene 进行显示 但是当图片显示时颜色
  • 如何在样式表中使用非标准自定义字体?

    我有一个PyQt4由外部设计的应用程序 qss使用以下代码创建文件 app QtGui QApplication sys argv stylesheet open mystylesheet qss read app setStyleShee
  • 应该避免通配符导入吗?

    我正在使用 PyQt 并且遇到了这个问题 如果我的导入语句是 from PyQt4 QtCore import from PyQt4 QtGui import 然后 pylint 会给出数百个 未使用的导入 警告 我犹豫是否要关闭它们 因为
  • 传递调用triggered.connect()的QAction对象作为我单击QAction后触发的函数中的参数

    我正在使用 for 循环创建 QAction 对象列表 如下所示 class some class self tabs for self i in range 0 10 self tabs self i QtGui QAction New
  • 如何从 PyQt4 中的 QVariant 取回我的 python 对象?

    我正在创建一个子类QAbstractItemModel要显示在QTreeView My index and parent 函数创建QModelIndex使用QAbstractItemModel继承功能createIndex并为其提供row
  • 实时数据监控:PyQtGraph

    我正在开展一个项目 我必须分析来自设备的信号 我有一个正在运行的库 它可以从设备获取数据 截至目前 我正在收集数据 然后绘制它 我有兴趣构建一个可以实时绘制图表的实时数据监视器 经过搜索 我发现 PyQtGraph 非常适合这项任务 我对
  • 使用 PyQt4 在 QWidget 上进行 eventFilter

    我有一个 QMainWindow 其中包含DrawingPointsWidget 该小部件随机绘制红点 我通过使用以下命令为 MouseHovering 事件安装事件过滤器 在 QMainWindow 的状态栏中显示鼠标坐标self ins
  • 导入错误:没有名为 PyQt4 的模块

    我使用 Homebrew 安装了 pyqt4 但是当我在 python 解释器中导入 PyQt4 时 它说 没有名为 PyQt4 的模块 有人可以帮我吗 After brew install pyqt 你可以brew test pyqt它将

随机推荐

  • Terraform - Azure 作为提供商和受限访问帐户

    我想使用 Terraform 在 Azure 上部署一些资源 在 Azure 上 我拥有一个仅对一个资源组 RGName 具有 所有者权限 的帐户 不在订阅级别 在我的 Linux 服务器上 我安装了 az cli 并执行了 az logi
  • +CNMI命令:如何接收通知并保存到SIM卡收到的短信

    我需要收到成功发送的通知 我读了很多并尝试过 我有 GSM 调制解调器中兴K4510Z 我没有收到任何通知或保存到 SIM 卡 在我的测试中 我以为我的SIM卡坏了 所以我尝试AT CMGW将临时消息写入 SIM 卡 它成功并存在 所以最后
  • 仅使用下划线检查是否存在重复的数组对

    我想知道如何检查数组中的重复值对是否作为 javascript 中较大数组的一部分存在 你可以看到有一对重复的 1 2 所以函数应该返回true i e var arr 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1
  • 如何让两个物体碰撞后粘在一起?

    我真的很困惑 我可以成功检测到碰撞 但我无法使参与碰撞的两个物体粘在一起 这是我的联系监听器 world setContactListener listener listener new ContactListener Override p
  • 获取 Android 通知以横幅形式显示

    我相当广泛地研究了各种术语 横幅 弹出 通知类型 但我似乎无法清楚地了解我 认为 的一个非常常见的问题 因此 如果由于缺乏术语而导致我错过了一个非常明显的解决方案 请提出建议 问题是这样的 我希望 Android 通知显示为从屏幕顶部掉落的
  • 如何自动填充 SQLAlchemy 数据库字段? (Flask-SQLAlchemy)

    我有一个简单的用户模型 定义如下 models py from datetime import datetime from myapp import db class User db Model id db Column db Intege
  • 在 Cakephp 中使用 $this->Auth 获取关联模型

    我正在使用 CakePHP 2 0 的集成 Auth 组件 我有以下表格 Users Groups Profiles 我的模型关系如下 User belongsTo Group User hasMany Profiles 登录该站点时 我注
  • 删除级联时是否有“反向”选项?

    假设我在 SQL Server 中有以下数据库 CREATE TABLE Order ID BIGINT IDENTITY 1 1 CONSTRAINT PK Order PRIMARY KEY CLUSTERED ID CREATE TA
  • 回收时注销

    在生产环境中 我有一个 IIS 托管的 ASP NET 应用程序 实际上是许多 Web 应用程序 每个应用程序都会消耗大量内存 但目前限制它的唯一方法是回收 nHibernate 似乎正在泄漏内存 并且它正在创建大量字符串集合 问题是 在回
  • 在 hashmap android 中添加 Arraylist> 中的值

    我必须获取数据列表 所以我使用了字符串的数组列表和列表 这里如何在地图上添加值 我使用了下面的代码 static final String KEY TITLE Category static final String KEY ARTICLE
  • 对 Angular2 中的对象数组进行排序

    我在 Angular2 中对对象数组进行排序时遇到问题 该对象看起来像 name t10 ts 1476778297100 value 32 339264 xid DP 049908 name t17 ts 1476778341100 va
  • ZF2 - 需要在特定条件失败时显示特定错误消息

    我正在使用 ZF2 表单验证 我必须验证两个字段 用户名 和 密码 一切正常 但我收到类似的消息 Please enter username Username can not be less than 3 characters Please
  • 在 Eclipse 启动时禁用插件

    我刚刚为 Eclipse 安装了一个插件 但结果 Eclipse 将不再启动 它说 有一个错误 或一些此类无信息的消息 如何在不加载插件的情况下启动 Eclipse 以便我可以实际卸载有问题的软件 正如另一个人提到的 您可以尝试 clean
  • 处理 R 中冲突的命名空间(不同包中的相同函数名称):重置包命名空间的优先级

    不同包的命名空间之间的名称冲突R可能是危险的 并且使用package function不幸的是没有普遍化R 是否有一个函数可以重置包命名空间相对于当前加载的所有其他命名空间的优先级 我们当然可以detach然后重新加载包 但是没有其他更实用
  • 如何使用 Google App Engine 重定向所有 URL

    我该如何配置app yaml文件将所有 URL 重定向到另一个 URL 例如我想要http example appspot com hello or http example appspot com hello28928723重定向到htt
  • 有 CSS 父选择器吗?

    我该如何选择 li 是锚元素的直接父元素吗 举个例子 我的 CSS 应该是这样的 li lt a active property value 显然 有多种方法可以使用 JavaScript 实现此目的 但我希望 CSS Level 2 本身
  • 使用 terraform 获取金库秘密值

    我正在使用带有 consul 的保管库服务器作为存储后端 并尝试使用 terraform 中的保管库提供程序获取密码值 但它并没有获得它的价值 我将我的秘密存储在位置秘密 实例中 main tf provider vault address
  • 如何加速 Mongodump,转储未完成

    在尝试使用来自大约 50 亿个数据库的查询来运行数据库转储时 进度条时间似乎表明此转储不会在任何合理的时间 100 多天 内完成 大约 22 小时后 查询似乎以 0 结束后也冻结了 之后的行是metadata json 行 转储行是 mon
  • 复制同名属性的简单代码?

    我有一个old这个问题在我脑海里停留了很长时间 当我在 Spring 中编写代码时 有很多 DTO 域对象的脏代码和无用代码 对于语言级别 我对 Java 毫无希望 但在 Kotlin 中看到了一些曙光 这是我的问题 Style 1我们通常
  • 在 pyqt4 中旋转像素图会产生不需要的翻译

    我正在尝试编写一个简单的应用程序 在按下按钮时旋转 png 图像 我一切正常 只是当图像旋转时 它偏离了东南方向的中心 我本以为它不是绕着中心旋转 但每旋转 45 度它就会回到原点 这很奇怪 对于一个关键事件 我只是简单地调用 pixmap