Pygame не возвращает события во время встраивания в PyQt - PullRequest
1 голос
/ 13 января 2020

Я тестирую приложение, и пользовательский интерфейс использует PyQt4 со встроенным Pygame. Он использует таймер для «обновления» себя, так сказать, и в функции timerEvent Pygame пытается извлечь все обнаруженные события. Проблема в том, что Pygame не обнаруживает никаких событий.

Вот минималистская версия моего кода

#!/etc/python2.7
from PyQt4 import QtGui
from PyQt4 import QtCore
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)

        self.surface = surface

        self.timer = QtCore.QBasicTimer()
        self.timer.start(500, self)

    def timerEvent(self, event):
        w=self.surface.get_width()
        h=self.surface.get_height()
        self.data=self.surface.get_buffer().raw
        self.image=QtGui.QImage(self.data,w,h,QtGui.QImage.Format_RGB32)
        self.update()

        for ev in pygame.event.get():
            if ev.type == pygame.MOUSEBUTTONDOWN:
                print "Mouse down"

    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_()

Как я могу получить события Pygame, когда окно Pygame встроено в приложение PyQt?

1 Ответ

0 голосов
/ 13 января 2020

Нельзя.


TL; DR;

Вы не можете и не должны объединять 2 библиотеки, которые имеют свое собственное событие l oop, например, теперь Qt eventl oop блокирует событие pygame l oop.

...