0

我已经在自定义桌面上工作了一段时间(感谢所有帮助过的人)并且我:我正在尝试为用户编写一个“控制”桌面,主要是,顾名思义,可以很好地控制他们的电脑。这与pygame有什么关系?控制桌面的功能之一是播放音乐。除了播放的声音,我什么都没有。它总是决定制作“流行音乐”而不是播放实际歌曲。任何帮助将不胜感激,因为我有点急于在夏天结束之前推出“测试版”。

代码:

class control():

    def ctr(self):
        print("Going to control Desktop for Jupee...")

        midnightbg = pygame.image.load("MidNightUI.jpg").convert_alpha()
        midnightbg = pygame.transform.scale(midnightbg, (winx, winy))
        screen.blit(midnightbg, (0, 0))

        pygame.display.update()

        songlist = []

        songlist = os.listdir("/Users/"+getpass.getuser()+"/Desktop/JupeeMusic")

        pygame.time.wait(500)

        a = 0
        songsinlist = 0

        for things in songlist:
            songsinlist = songsinlist + 1
        songlist.remove(".DS_Store")
        songsinlist = songsinlist - 1

        pygame.mixer.init()

        for items in songlist:
            print("Song found : "+items)

        while 1:

            mx, my = pygame.mouse.get_pos()
            if a > songsinlist-1:
                a = 0

            for event in pygame.event.get():
                if event.type == MOUSEBUTTONDOWN:
                    print(mx, my, "is the location that the mouse button was pressed.")

                elif event.type == QUIT:
                    pygame.quit()
                    raise SystemExit
                elif event.type == KEYDOWN:
                    if event.key == K_LMETA:
                        print("Going to main desktop again...")
                        setup().setdesk()
                    elif event.key == K_RMETA:
                        print("Going to main desktop again...")
                        setup().setdesk()
                    elif event.key == ord("p"):
                        song = pygame.mixer.Sound(songlist[a])
                        song.play(0)
                        pygame.time.wait(600)
                        a = a + 1
                elif event.type == MOUSEBUTTONDOWN:
                    if mx <= 50 and my <= 50:
                        song = pygame.mixer.Sound(songlist[a])
                        song.play(0)
                        pygame.time.wait(600)
                        a = a + 1

这是在 Mac 上。

4

2 回答 2

1

如果您打算使用 Python 3,请检查以确保您没有使用 Python 2 运行它。您print的 s 编写得像 Python 3 函数而不是 Python 2 语句,但它们在 Python 2 中仍然有效。括号仅被视为括号而不是函数调用。我在您发布的内容中没有看到任何无效的 Python 2 代码。绝对有可能在 Python 3 中编写一个项目而不做任何会扰乱 Python 2 解释器的事情,但仍然会给出奇怪的错误,尤其是如果你发生了为两个版本的 Python 安装了几乎相同的库。(我已经做到了,但不是一个大项目。)

在 Python 2 中,pygame.mixer.Sound不知道字符串对象是缓冲区还是文件名,因此您应该使用 'file' 关键字告诉它您已传入文件名。(或者,将文件名转换为 unicode。)在 Python 3 中,到处使用 unicode 编码可以防止这种歧义。(但pygame.mixer.Sound现在将字节对象视为模棱两可。)


编辑:与您的问题无关,但只是想我会指出。

您的代码中有以下四行:

for things in songlist:
    songsinlist = songsinlist + 1
songlist.remove(".DS_Store")
songsinlist = songsinlist - 1

他们应该成为:

songlist.remove(".DS_Store")
songsinlist = len(songlist)
于 2013-08-04T04:44:33.263 回答
0

我仔细看了看,我可以看出哪里出了问题。在 pygame 中,使用音乐时,不应将文件加载为单纯的声音,而应加载为音乐:

pygame.mixer.music.load(songlist[a])

这将使音乐在后台播放。

于 2013-10-07T01:56:56.780 回答