我正在使用Pygame和OSC编写Python脚本,它允许我通过在Pygame中执行操作来控制音乐跟踪器软件Renoise(版本3.0.0) (1.9.1)环境并通过OSC向软件发送消息。如果你想知道,这个剧本的目的是为了现场表演和创作音乐的创作。然而,我有一个非常烦人的问题:当我试图关闭Pygame窗口时,它只是挂起 - 甚至没有响应Control + C - 但只有在Renoise打开或至少打开一次在会议期间。如果我重新启动并在不打开Renoise的情况下运行脚本,它将按预期工作。这可能是什么问题?Python/Pygame脚本在关闭时没有响应,而Renoise已打开
我正在使用Python版本2.7.6,Pygame版本1.9.1和Renoise版本3.0.0。这些都在Xubuntu 14.04笔记本电脑上运行。
代码为我的主脚本(进口OSC模块仅仅是OSC.py可在很多地方on the internet):
#!/usr/bin/python
import sys
import pygame
import OSC
from pygame.locals import *
class Pot:
def __init__(self, ip, port):
self.clk = pygame.time.Clock()
self.screen = pygame.display.set_mode((1600, 900))
self.fillColor = pygame.Color(255,255,255)
pygame.display.set_caption("Pygame OSC Test")
self.client = OSC.OSCClient()
self.client.connect((ip, port))
def oscsend(self, addr, *data):
msg = OSC.OSCMessage()
msg.setAddress("/renoise" + str(addr))
for d in data:
msg.append(d)
try:
self.client.send(msg)
except OSC.OSCClientError, err:
print err
def tick(self):
# clear the screen
self.screen.fill(self.fillColor)
#TODO: other drawing stuff here
# process events
for event in pygame.event.get():
if event.type == QUIT:
self.client.close()
del(self.client)
return False
pygame.display.update()
self.clk.tick(10)
return True
if __name__ == "__main__":
p,f = pygame.init()
print "Num modules passed:", p
print "Num modules failed:", f
pot = Pot("localhost", 8000)
running = True
while running:
running = pot.tick()
pygame.quit()
sys.exit(0)
哈哈,感谢捕捉,但不幸的是它并没有解决我的问题。计划仍然像以前一样行事。 – Holo
啊,对不起,我明白了,明天再仔细看看这个问题。我必须在某处获得雷诺思 - 是免费的吗?否则,我不能真正尝试:/ –
感谢帕特里克,但我设法找出我自己的问题。看到我对这篇文章的回答。 – Holo