Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x QFileDialog:参数1具有意外类型';str';_Python 3.x_Pyqt5 - Fatal编程技术网

Python 3.x QFileDialog:参数1具有意外类型';str';

Python 3.x QFileDialog:参数1具有意外类型';str';,python-3.x,pyqt5,Python 3.x,Pyqt5,我在代码的第47行遇到一个错误 Traceback (most recent call last): File "C:\Users\Bryan\Desktop\PlayMedia3.py", line 47, in open_file filename, _ = QFileDialog.getOpenFileName("Open Song") TypeError: getOpenFileName(parent: QWidget = None,

我在代码的第47行遇到一个错误

Traceback (most recent call last):
  File "C:\Users\Bryan\Desktop\PlayMedia3.py", line 47, in open_file
    filename, _ = QFileDialog.getOpenFileName("Open Song")
TypeError: getOpenFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0): argument 1 has unexpected type 'str'
不知道发生了什么事

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import*
from PyQt5.QtGui import *
from PyQt5.QtWidgets import*
from PyQt5.QtCore import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(471, 145)
        self.timeSlider = QtWidgets.QSlider(Form)
        self.timeSlider.setGeometry(QtCore.QRect(40, 80, 360, 22))
        self.timeSlider.setOrientation(QtCore.Qt.Horizontal)
        self.timeSlider.setObjectName("timeSlider")
        self.playButton = QtWidgets.QPushButton(Form)
        self.playButton.setGeometry(QtCore.QRect(120, 20, 75, 23))
        self.playButton.setObjectName("playButton")
        self.stopButton = QtWidgets.QPushButton(Form)
        self.stopButton.setGeometry(QtCore.QRect(220, 20, 75, 23))
        self.stopButton.setObjectName("stopButton")
        self.openButton = QtWidgets.QPushButton(Form)
        self.openButton.setGeometry(QtCore.QRect(20, 20, 75, 23))
        self.openButton.setObjectName("openButton")
        
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.playButton.setText(_translate("Form", "Play"))
        self.stopButton.setText(_translate("Form", "Stop"))
        self.openButton.setText(_translate("Form", "Open File"))
 #Connect control buttons/slides for media player.
        self.playButton.pressed.connect(self.play)
        self.stopButton.pressed.connect(self.stop)
        self.timeSlider.valueChanged.connect(self.setPosition)
        self.openButton.pressed.connect(self.open_file)
        

        self.player = QMediaPlayer()
        self.player.play()

    def open_file(self):
        filename, _ = QFileDialog.getOpenFileName("Open Song")
 
        if filename != '':
            self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(filename)))
            self.playButton.setEnabled(True)
        
    def play():
        print("Play Button was pressed")
        pass
    def stop(self):
        print("Stop Button was pressed")
        self.timeSlider.setValue(0)
        pass
    def setPosition(self,x):
        print("Slider sliding")
        print(x)
        pass
    
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

如果查看错误消息,会发现参数必须是QWidget或None,因此它有两个可能的选项:

  • 将None作为第一个参数传递:
filename,QFileDialog.getOpenFileName(无,“打开歌曲”)
  • 传递kwarg的名称:
filename,QFileDialog.getOpenFileName(caption=“Open Song”)

请尝试将所有这些代码减少到