Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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 如何获取文件名并在Qlistwidget上显示它?_Python_Pyqt - Fatal编程技术网

Python 如何获取文件名并在Qlistwidget上显示它?

Python 如何获取文件名并在Qlistwidget上显示它?,python,pyqt,Python,Pyqt,我想通过打开QFile对话框添加文件来制作歌曲列表。 现在,当我单击QlistWidget的项目时,我可以播放列表之歌了。 但项目名称是其路径。 我想在QlistWidget上显示文件名。 当我单击QlistWidget的项目时,它必须将路径传输到openaudio()方法。 以下是部分代码: expand='Image Files(*.mp3 *.wav)' tips=open the file'' path = QtGui.QFileDialog.getOpenFileName(self,

我想通过打开QFile对话框添加文件来制作歌曲列表。
现在,当我单击QlistWidget的项目时,我可以播放列表之歌了。
但项目名称是其路径。
我想在QlistWidget上显示文件名。
当我单击QlistWidget的项目时,它必须将路径传输到
openaudio()
方法。

以下是部分代码:

expand='Image Files(*.mp3 *.wav)'
tips=open the file''
path = QtGui.QFileDialog.getOpenFileName(self, tips,QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MusicLocation), expand)
if path:
   mlist.append(path)
   index=mlist.index(path) 
   self.ui.listWidget.insertItem(index,mlist[index])
以下是openaudio()的代码:


顺便问一下,如何一次打开多个文件?

一种方法是子类化
QListWidgetItem

class MyItem(QListWidgetItem):
    def __init__(self, path, parent=None):
        self.path = path

        import os
        filename = os.path.basename(self.path)
        super().__init__(filename)
然后将
QListWidget
连接到
openaudio(path)
方法:

self.ui.listWidget.itemClicked.connect(lambda n: openaudio(n.path))
除了这个特定的问题之外,您的代码似乎还有一些其他问题。在这种特殊情况下,不需要使用附加列表(mlist):

path = QtGui.QFileDialog.getOpenFileName(self, tips, QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MusicLocation), expand)
if path:
    self.ui.listWidget.addItem(MyItem(path))


非常感谢。但我有另一个“类StartQT4(QtGui.QDialog)”。它用于连接用户界面。比如,“QtGui.QWidget.\uuuuu init\uuuuuu(self,parent)”,“self.ui=ui\u Form(),“self.ui.setupUi(self)”。当我点击ui的按钮时,它将显示QFileDialog()。因此我可以将歌曲添加到QListWidgetItem。我是一个初学者,所以我不知道如何调用“类MyItem(QListWidgetItem)”和访问ui的virables。你能说得更详细些吗?谢谢类
MyItem
是一个常规python类,它是
QListWidgetItem
的子类。因此,您可以像常规的
QListWidgetItem
一样使用
MyItem
。您的listWidget可以使用
addItem(…)
简单地添加它们。我不明白您的连接问题到底是什么,抱歉…当我调用类MyItem时,它将显示错误“\uuu init\uuuu()缺少1个必需的位置参数:'path'”。另一个错误是“'MyItem'对象没有属性'ui'”。我不知道如何解决它们。这就是为什么我们把它作为一个子类的原因。现在我们必须给出一个附加参数,路径:
MyItem(path)
其中
path
只是一个字符串,其中包含mp3文件的所需路径。这是我在回答中写的:
self.ui.listWidget.addItem(MyItem(path))
path = QtGui.QFileDialog.getOpenFileName(self, tips, QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MusicLocation), expand)
if path:
    self.ui.listWidget.addItem(MyItem(path))
def openaudio(self, path):
    # Do not do this here! Connections should usually be made in the init() method of the container!
    # self.connect(self.ui.listWidget,QtCore.SIGNAL('currentTextChanged(QString)'),self.ui.label_4,QtCore.SLOT('setText(QString)'))

    # Also take a look at the 'new' PyQt signals & slots style:
    # self.ui.listWidget.currentTextChanged.connect(self.ui.label_4.setText)

    self.mediaObject.setCurrentSource(phonon.Phonon.MediaSource(path))
    self.mediaObject.play()