2017-05-04 109 views
0

传递变量所以我做Python中的音乐播放器,但传递变量到我的功能,当我有麻烦,我得到这个错误信息:麻烦与功能

TypeError: next() takes exactly 3 arguments (2 given) 

我已经搜查谷歌为anwser,但他们的程序和解决方案是不同的,我了解它是如何工作的,以及为什么它的工作原理。反正这里是我的代码:

import sys 
import os 
import pygame 
from PyQt4 import QtGui, QtCore 
from time import sleep 
class Window(QtGui.QMainWindow): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(50, 50, 500, 300) 
     self.setWindowTitle("Music Player Alpha") 
     AutoPlay = True 
     Play = True 
     SongQueue = [] 
     Song = os.listdir('/home/pi/Desktop/Muziek/') 
     Song = sorted(Song) 
     CurrentSong = 0 
     pygame.mixer.init() 
     pygame.mixer.music.load('/home/pi/Desktop/Muziek/' + Song[0]) 
     pygame.mixer.music.play() 
     self.home() 

    def home(self): 
     btnQuit = QtGui.QPushButton("Quit", self) 
     btnQuit.clicked.connect(self.close) 
     btnPlay = QtGui.QPushButton("Play", self) 
     btnPlay.clicked.connect(self.play) 
     btnPlay.move(100, 100) 
     btnPause = QtGui.QPushButton("Pause", self) 
     btnPause.clicked.connect(self.pause) 
     btnPause.move(200, 100) 
     btnNext = QtGui.QPushButton("Next", self) 
     btnNext.clicked.connect(self.next) 
     btnNext.move(300, 100) 
     btnPrevious = QtGui.QPushButton("Previous", self) 
     btnPrevious.clicked.connect(self.previous) 
     btnPrevious.move(0, 100) 
     self.show() 

    def close(self): 
     print("Closing application") 
     sys.exit() 

    def play(self, Play): 
     pygame.mixer.music.unpause() 
     Play = True 

    def pause(self, Play): 
     pygame.mixer.music.pause() 
     play = False 

    def next(self, CurrentSong, Song): 
     print("1") 
     CurrentSong = CurrentSong + 1 
     if CurrentSong > len(Song) + 1: 
      CurrentSong = 0 
      pygame.mixer.music.load('/home/pi/Desktop/Muziek/' + Song[CurrentSong]) 
      pygame.mixer.music.play() 
     else: 
      pygame.mixer.music.load('/home/pi/Desktop/Muziek/' + Song[CurrentSong]) 
      pygame.mixer.music.play() 

    def previous(self, CurrentSong, Song): 
     CurrentSong = CurrentSong - 1 
     if CurrentSong < 0: 
      CurrentSong = len(Song) -1 
      pygame.mixer.music.load('/home/pi/Desktop/Muziek/' + Song[CurrentSong]) 
      pygame.mixer.music.play() 
     else: 
      pygame.mixer.music.load('/home/pi/Desktop/Muziek/' + Song[CurrentSong]) 
      pygame.mixer.music.play() 


app = QtGui.QApplication(sys.argv) 
GUI = Window() 
sys.exit(app.exec_()) 
+0

显示你的函数调用 –

+0

你的'btnNext.clicked'事件处理程序正在调用'self.next'没有参数。 – Phylogenesis

回答

1

这是一个电话的定义:

btnNext.clicked.connect(self.next) 

所以单击该按钮,当您运行self.next(mouse_event)这是函数签名:

def next(self, CurrentSong, Song): 

所以当点击一个按钮时,你发送两个参数:self,来自self.next,和一个event,它与歌曲无关,它有点击信息。您期待3个参数self,CurrentSong,Song,而不是event--所以有两个错误。一种解决方法是不接受除自身参数到明年,并保存当前歌曲类:

def next(self,event): 
    currentSong = self.currentSong 

等等...如果你想放弃的情况下,你可以拉姆达隐藏:

btnNext.clicked.connect(lambda e:self.next) 

并相应地更改next

+0

谢谢! IT现在非常棒@kabanus – OADINC