Python 如何获取文件名并在Qlistwidget上显示它?
我想通过打开QFile对话框添加文件来制作歌曲列表。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,
现在,当我单击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()