Добавление QLineEdit в QLineWidget
Можно ли добавить QLineEdit справа от каждого элемента в списке?
Я знаю, что можно просто добавить QLable, но мне нужен именно элемент списка, для того чтобы я мог его выбирать.
По умолчанию все QLineEdit будут выключены, но после выбора какого-то элемента, QLineEdit рядом с ним должен включиться.
Интерфейс:
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QAbstractItemView, QApplication, QGridLayout, QListWidget,
QListWidgetItem, QMainWindow, QPushButton, QSizePolicy,
QWidget)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(631, 297)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.gridLayout = QGridLayout(self.centralwidget)
self.gridLayout.setObjectName(u"gridLayout")
self.listWidget = QListWidget(self.centralwidget)
self.listWidget.setObjectName(u"listWidget")
font = QFont()
font.setFamilies([u"Times New Roman"])
font.setPointSize(14)
font.setBold(False)
font.setItalic(False)
self.listWidget.setFont(font)
self.listWidget.viewport().setProperty("cursor", QCursor(Qt.PointingHandCursor))
self.listWidget.setFocusPolicy(Qt.NoFocus)
self.listWidget.setLineWidth(1)
self.listWidget.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.listWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.listWidget.setAutoScroll(False)
self.listWidget.setAutoScrollMargin(16)
self.listWidget.setSelectionMode(QAbstractItemView.MultiSelection)
self.listWidget.setSelectionBehavior(QAbstractItemView.SelectItems)
self.listWidget.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
self.listWidget.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel)
self.listWidget.setSpacing(4)
self.listWidget.setWordWrap(True)
self.gridLayout.addWidget(self.listWidget, 0, 0, 1, 1)
self.pushButton = QPushButton(self.centralwidget)
self.pushButton.setObjectName(u"pushButton")
self.gridLayout.addWidget(self.pushButton, 0, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.pushButton.setText(QCoreApplication.translate("MainWindow", u"PushButton", None))
# retranslateUi
Исполняемый файл:
from ListTest import *
import sys
lst = list(range(1, 21))
class Test(QMainWindow):
def __init__(self):
super(Test, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.print_list()
def print_list(self):
for i in lst:
item = QListWidgetItem(str(i))
item.setTextAlignment(Qt.AlignHCenter)
self.ui.listWidget.addItem(item)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Test()
window.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Не уверен что правильно понял вас, но предложу попробовать как вариант:
import sys
'''
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect, QSize, QTime, QUrl, Qt, Signal)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon, QImage, QKeySequence,
QLinearGradient, QPainter, QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QAbstractItemView, QApplication, QGridLayout, QListWidget,
QListWidgetItem, QMainWindow, QPushButton, QSizePolicy, QWidget)
'''
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
#from ListTest import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(631, 297)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.gridLayout = QGridLayout(self.centralwidget)
self.gridLayout.setObjectName(u"gridLayout")
self.listWidget = QListWidget(self.centralwidget)
self.listWidget.setObjectName(u"listWidget")
font = QFont()
font.setFamilies([u"Times New Roman"])
font.setPointSize(14)
font.setBold(False)
font.setItalic(False)
self.listWidget.setFont(font)
self.listWidget.viewport().setProperty("cursor", QCursor(Qt.PointingHandCursor))
self.listWidget.setFocusPolicy(Qt.NoFocus)
self.listWidget.setLineWidth(1)
self.listWidget.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.listWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.listWidget.setAutoScroll(False)
self.listWidget.setAutoScrollMargin(16)
self.listWidget.setSelectionMode(QAbstractItemView.MultiSelection)
self.listWidget.setSelectionBehavior(QAbstractItemView.SelectItems)
self.listWidget.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
self.listWidget.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel)
self.listWidget.setSpacing(4)
self.listWidget.setWordWrap(True)
self.gridLayout.addWidget(self.listWidget, 0, 0, 1, 1)
self.pushButton = QPushButton(self.centralwidget)
self.pushButton.setObjectName(u"pushButton")
self.gridLayout.addWidget(self.pushButton, 0, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.pushButton.setText(QCoreApplication.translate("MainWindow", u"PushButton", None))
class Label(QLabel):
# clicked = Signal() # PySide6.QtCore.Signal
clicked = pyqtSignal() # PyQt5
def __init__(self):
super().__init__()
def mouseReleaseEvent(self, event):
self.clicked.emit()
class MyWidget(QWidget):
def __init__(self, num):
super().__init__()
self.flag = True
self.label = Label()
self.label.setText(f'{num}')
self.label.setAlignment(Qt.AlignCenter)
self.label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.label.setStyleSheet("background-color: #E7F7F4;")
self.label.clicked.connect(self.onClicked)
self.lineEdit = QLineEdit("lineEdit")
self.lineEdit.setEnabled(False)
layout = QHBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(0)
layout.addWidget(self.label, 1)
layout.addWidget(self.lineEdit, 0, alignment=Qt.AlignRight)
def onClicked(self):
if self.flag:
self.label.setStyleSheet("background-color: #8AD8CA;")
self.lineEdit.setEnabled(True)
else:
self.label.setStyleSheet("background-color: #E7F7F4;")
self.lineEdit.setEnabled(False)
self.flag = not self.flag
class Test(QMainWindow, Ui_MainWindow):
def __init__(self):
super(Test, self).__init__()
self.setupUi(self)
self.lst = list(range(1, 21))
self.print_list()
def print_list(self):
for i in self.lst:
item = QListWidgetItem() # - str(i)
item.setTextAlignment(Qt.AlignHCenter)
self.listWidget.addItem(item)
widget = MyWidget(i) # +++
self.listWidget.setItemWidget(item, widget) # +++
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Test()
window.show()
sys.exit(app.exec())

