PyQt5 как считывать list widget?
Я хочу написать что-то на подобии музыкального плеера, где при выборе mp3 в списке она будет проигрываться.
Но, пока, я даже не дошёл до того чтобы при выборе элемента в консоль писалось click.
Помогите сделать обработку нажатий в листе. Визуал делал с помощью Qt Disigner.
from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtWidgets import *
import sys
def clicked(): #Функция которая должна вызываться при выборе элемента из списка(можно не обращать внимание.)
print("click")
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 402)
MainWindow.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0.182, y1:0.102409, x2:1, y2:1, stop:0.113636 rgba(0, 62, 79, 147), stop:0.306818 rgba(28, 14, 68, 156));")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(-130, -40, 1031, 491))
self.label.setText("")
self.label.setPixmap(QtGui.QPixmap("2HYI.gif"))
self.label.setObjectName("label")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(0, 310, 641, 80))
self.widget.setObjectName("widget")
self.listWidget = QtWidgets.QListWidget(self.centralwidget) #Начиная отсюда list
self.listWidget.setGeometry(QtCore.QRect(0, 0, 121, 311))
self.listWidget.setStyleSheet("font: 75 italic 8pt \"MS Sans Serif\";\n"
"color: rgb(121, 92, 121);")
self.listWidget.setObjectName("listWidget")
item = QtWidgets.QListWidgetItem()
font = QtGui.QFont()
font.setFamily("Roman")
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
item.setFont(font)
self.listWidget.addItem(item)
item = QtWidgets.QListWidgetItem()
self.listWidget.addItem(item)
item = QtWidgets.QListWidgetItem()
self.listWidget.addItem(item)
item = QtWidgets.QListWidgetItem()
self.listWidget.addItem(item)
#сюда я пытался привязать clicked и connect
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
__sortingEnabled = self.listWidget.isSortingEnabled()
self.listWidget.setSortingEnabled(False)
item=self.listWidget.item(0)
item.setText(_translate("MainWindow", "New Item"))
item = self.listWidget.item(1)
item.setText(_translate("MainWindow", "New Item"))
item = self.listWidget.item(2)
item.setText(_translate("MainWindow", "New Item"))
item = self.listWidget.item(3)
item.setText(_translate("MainWindow", 'w'))
self.listWidget.setSortingEnabled(__sortingEnabled)
#сюда тоже
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
В Qt Designer использовал listwidget нашёл ещё что-то про listview.
Ответы (2 шт):
В общем мне нужно сделать обработку нажатий в листе
Вы можете воспользоваться функцией itemClicked.
Например, обработку нажатия на элемент из listWidget можно привязать к функции clicked, только саму функцию добавьте в класс Ui_MainWindow:
def setupUi(self, MainWindow):
. . .
self.listWidget.itemClicked.connect(self.clicked)
def clicked(self, item):
print(f'clicked {item}')
Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
void QListWidget::
itemClicked(QListWidgetItem *item)Этот сигнал излучается с указанным элементом при нажатии кнопки мыши на элементе в виджете.
main.py
import sys
from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtWidgets import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 402)
MainWindow.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0.182, y1:0.102409, x2:1, y2:1, stop:0.113636 rgba(0, 62, 79, 147), stop:0.306818 rgba(28, 14, 68, 156));")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(-130, -40, 1031, 491))
self.label.setText("")
self.label.setPixmap(QtGui.QPixmap("2HYI.gif"))
self.label.setObjectName("label")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(0, 310, 641, 80))
self.widget.setObjectName("widget")
self.listWidget = QtWidgets.QListWidget(self.centralwidget) #Начиная отсюда list
self.listWidget.setGeometry(QtCore.QRect(0, 0, 121, 311))
self.listWidget.setStyleSheet("font: 75 italic 8pt \"MS Sans Serif\";\n"
"color: rgb(121, 92, 121);")
self.listWidget.setObjectName("listWidget")
item = QtWidgets.QListWidgetItem()
font = QtGui.QFont()
font.setFamily("Roman")
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
item.setFont(font)
self.listWidget.addItem(item)
item = QtWidgets.QListWidgetItem()
self.listWidget.addItem(item)
item = QtWidgets.QListWidgetItem()
self.listWidget.addItem(item)
item = QtWidgets.QListWidgetItem()
self.listWidget.addItem(item)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
__sortingEnabled = self.listWidget.isSortingEnabled()
self.listWidget.setSortingEnabled(False)
item=self.listWidget.item(0)
item.setText(_translate("MainWindow", "New Item"))
item = self.listWidget.item(1)
item.setText(_translate("MainWindow", "New Item"))
item = self.listWidget.item(2)
item.setText(_translate("MainWindow", "New Item"))
item = self.listWidget.item(3)
item.setText(_translate("MainWindow", 'w'))
self.listWidget.setSortingEnabled(__sortingEnabled)
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.myList = ['Item 1', 'Item 2', 'Item 3', 'Item 4', ]
self.listWidget.addItems(self.myList)
self.listWidget.itemClicked.connect(self.onClicked)
def onClicked(self, item):
print(f'\nitem: {item}') #
print(f'item.text: {item.text()}') #
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
