如何集成Pygame和PyQt4?

2024-02-04

我正在使用 python 2.7 和 Ubuntu 14.04。

我正在尝试做this http://www.pygame.org/docs/ref/display.html#pygame.display.init为了让我的 pygame 窗口位于我的 GUI 中

在某些平台上,可以将 pygame 显示嵌入到已有的窗口中。为此,必须将环境变量 SDL_WINDOWID 设置为包含窗口 ID 或句柄的字符串。 pygame显示初始化时检查环境变量

这就是我所做的:

from PyQt4 import QtGui, QtCore
import os
import subprocess
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    MainWindow.setWindowModality(QtCore.Qt.ApplicationModal)
    MainWindow.setFixedSize(800, 600)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)
    self.iniMap()

def iniMap(self):
    command = "xprop -root _NET_ACTIVE_WINDOW"
    output = subprocess.Popen(["/bin/bash", "-c", command], stdout=subprocess.PIPE)
    activeWindowID = str(output.communicate()[0].decode("utf-8").strip().split()[-1])
    os.environ['SDL_WINDOWID'] = activeWindowID
    import pygame
    pygame.init()
    screen = pygame.display.set_mode((565, 437), pygame.NOFRAME)

class frmMain(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(frmMain, self).__init__(parent, flags=QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self)

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

但这不起作用。它只显示我的 PyQt 窗口。我不知道是我做错了什么还是pygame无法与PyQt集成

我应该怎么做才能将我的 pygame 窗口嵌入frmMain?

先感谢您。


这是根据上面评论的示例解决方案:

from PyQt4 import QtGui
import pygame
import sys

class ImageWidget(QtGui.QWidget):
    def __init__(self,surface,parent=None):
        super(ImageWidget,self).__init__(parent)
        w=surface.get_width()
        h=surface.get_height()
        self.data=surface.get_buffer().raw
        self.image=QtGui.QImage(self.data,w,h,QtGui.QImage.Format_RGB32)

    def paintEvent(self,event):
        qp=QtGui.QPainter()
        qp.begin(self)
        qp.drawImage(0,0,self.image)
        qp.end()


class MainWindow(QtGui.QMainWindow):
    def __init__(self,surface,parent=None):
        super(MainWindow,self).__init__(parent)
        self.setCentralWidget(ImageWidget(surface))



pygame.init()
s=pygame.Surface((640,480))
s.fill((64,128,192,224))
pygame.draw.circle(s,(255,255,255,255),(100,100),50)

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

如何集成Pygame和PyQt4? 的相关文章

随机推荐

  • oracle apex 值列表 - 选择值并在下一个字段的 SQL 查询中使用

    我将 Apex 4 0 2 与 Oracle XE 11 结合使用 我有一个表格 上面有一个字段 P200 CARD TYPE 是从值列表中设置的 我想要发生的是使用我在设置 仅显示 字段的查询中选择的值 P200 DESC 在源代码部分中
  • 在for循环中声明两个变量

    是否可以在 for 循环的初始化部分声明两个变量 我想对字符串的每个字符调用一个函数 for var i 0 c aString charAt i i lt aString length i problem here not itterat
  • 使用 javascript 区分表单中的两个提交按钮

    我怎样才能知道在javascript中点击了哪个提交按钮 function submitForm if find open popup else if add continue in the same window
  • 骆驼模拟 - MockEndpoint.whenAnyExchangeReceived 处理方法不执行

    我下面有示例代码 为什么 MockEndpoint whenAnyExchangeReceived 中的 process 方法没有执行 我期望响应是 来自模拟远程 http 调用的预期正文 但实际响应是请求中传递的内容 Camelrocks
  • 如何通过批处理将 SQL 存储过程保存到 .sql 文件

    我想将我的 MS SQL Server 2005 存储过程自动保存到 sql 文件 更喜欢可以通过 bat 调用的工具 这样我就不必手动单击每个存储过程并保存它 我已经从 devio IT 找到了 SMOscript 但它会收集所有表和存储
  • 无法更改 Android 模拟器中的电池配置

    我试图在模拟器中将电池状态更改为容量和交流状态 但不起作用 我做了整个步骤 1 通过telnet连接到模拟器 2 尝试使用 power ac off 和 powercapacity 70 等命令3 每次我检查电量显示时 都会出现相同的配置
  • 完整 .NET Framework 控制台应用程序中的 JSON 配置

    我有一个针对 NET 4 7 1 的控制台应用程序 我正在尝试在我的 Net Framework 应用程序中使用 net core 之类的配置 我的 App config 是
  • 限制 C++ 函数允许的抛出有什么好处? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 Hibernate 尝试加载“not-found=ignore”关联?

    我有一个类 代表一个项目 它通过多对一关系映射另一个类 代表一个用户 随着用户的来来去去 我确保设置未找到财产给ignore关系上 然而 Hibernate 似乎仍然尝试通过为每个项目执行一个额外的 SQL 查询来加载 丢失的 用户 未找到
  • 如何让我的 DIV 出现在彼此下方

    我有以下内容 div style padding right 1 div
  • 如何访问对象ID标识属性?

    在 IB 的 身份 选项卡下 您可以找到一个名为 对象 ID 的属性 我找不到从代码中获取此 ID 的方法 哦 我知道标签属性 但这不是我需要的 我本质上想获取屏幕上触摸的 UIComponent 的唯一对象 ID 我已经有了 UITouc
  • Xcode 构建完美失败——找不到 COpenSSL

    代码 8 0 Swift 工具链 3 0 版本 完美的 Package url https github com PerfectlySoft Perfect HTTPServer git majorVersion 2 minor 0 跑起来
  • PID和TID的区别

    PID和TID有什么区别 标准答案是 PID 用于进程 而 TID 用于线程 然而 我发现有些命令可以互换使用它们 例如 htop有一个 PID 列 其中显示同一进程的线程的 PID 具有不同的值 那么PID什么时候代表线程或进程呢 这很复
  • 如何检测IE6,并显示警报?

    我试图在使用 IE6 的用户使用我的网站时显示警报 我想这样的事情会起作用 我会对此进行测试 但我没有可以使用 ATM 的 Windows 盒子 这是正确的方法吗 是的 这有效 当然 你可以使用像这样的东西 http code google
  • 如何解析 XML 并获取特定节点属性的实例?

    我在 XML 中有很多行 并且正在尝试获取特定节点属性的实例
  • 如何使 Eclipse Formatter 不破坏注释掉的代码?

    我的很多同事喜欢留下注释掉的代码 以及如何使 Eclipse Formatter 不破坏该代码的格式 现在它会生成一个大斑点或块 附 我知道我可以以某种方式配置格式化程序以忽略该代码 我做过一次 但我不记得如何做 在 Eclipse 格式化
  • 使用 Python 通过 Mailgun 提交变量时出错

    我正在尝试使用 Python 通过 Mailgun 发送邮件 在这种情况下 我正在尝试将变量推到旁边 我的代码如下 requests post MailGun URL auth api api key data from From Mail
  • 使用 Cx_freeze 或 Py2Exe 打包 Scrapy 应用程序

    我正在尝试打包一个网络抓取脚本 使用 scrapy 构建 作为独立应用程序运行 供我的老板使用 我使用 Tkinter 构建了一个小型桌面 GUI 它通过 os system 调用来调用我的 Scrapy 蜘蛛 我当前的构建实现 使用 cx
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • 如何集成Pygame和PyQt4?

    我正在使用 python 2 7 和 Ubuntu 14 04 我正在尝试做this http www pygame org docs ref display html pygame display init为了让我的 pygame 窗口位