【问题标题】:QFileDialog: argument 1 has unexpected type 'str'QFileDialog:参数 1 具有意外类型“str”
【发布时间】:2021-02-28 04:41:26
【问题描述】:

我在此代码的第 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_())

【问题讨论】:

标签: python-3.x pyqt5


【解决方案1】:

如果查看错误消息,观察到参数必须是 QWidget 或 None,因此它有 2 个可能的选项:

  • 将 None 作为第一个参数传递:
filename, _ = QFileDialog.getOpenFileName(None, "Open Song")
  • 传递 kwarg 的名称:
filename, _ = QFileDialog.getOpenFileName(caption="Open Song")

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 2018-08-02
    • 1970-01-01
    • 2021-12-27
    • 2021-03-18
    • 2021-05-23
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多