Как избавиться от зазоров между виджетами?
Проблема кода ниже заключается в том, что между элементами QListWidget создаются отступы, т.е. они не прилегают друг к другу вплотную:
Мне необходимо убрать эти зазоры, чтобы элементы располагались таким образом:
Я пытался поправить это, добавив элементам QListWidget рамку, цвет которой идентичен цвету этих элементов. Мне кажется, что это плохой способ, т.к. нарушились бы текущие размеры. В любом случае, добавил в таблицу стиля элементов QListWidget следующие строки:
...
border-color: #7189DB;
border-style: solid;
border-width: 1px;
...
Как это полагается, я только все сломал.
Пожалуйста, подскажите, как мне добиться такого результата?
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
class LeftTabWidget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
super(LeftTabWidget, self).__init__(*args, **kwargs)
self.setMinimumSize(500, 300)
btn = QtWidgets.QPushButton('Button')
layout1 = QtWidgets.QHBoxLayout(self)
layout1.addWidget(btn)
self.listWidget = QtWidgets.QListWidget()
self.listWidget.setContentsMargins(0, 0, 0, 0)
self.listWidget.setViewMode(QtWidgets.QListView.IconMode)
self.listWidget.setIconSize(QtCore.QSize(60, 60))
self.listWidget.setMovement(QtWidgets.QListView.Static)
self.listWidget.setMaximumWidth(61)
self.listWidget.setMinimumWidth(61)
self.listWidget.setSpacing(0)
self.stackedWidget = QtWidgets.QStackedWidget()
for i in range(2):
label = QtWidgets.QLabel('Страница %d' % (i + 1), self)
label.setAlignment(QtCore.Qt.AlignCenter)
# label.setStyleSheet('background: #7189DB; margin: 0px;')
self.stackedWidget.addWidget(label)
self.createIcons()
self.listWidget.setCurrentRow(0)
layout2 = QtWidgets.QHBoxLayout(spacing=0)
layout2.setContentsMargins(0, 0, 0, 0)
layout2.addWidget(self.listWidget)
layout2.addWidget(self.stackedWidget, 1)
layout1.addLayout(layout2)
def createIcons(self):
configButton = QtWidgets.QListWidgetItem(self.listWidget)
configButton.setIcon(QtGui.QIcon('play.png'))
configButton.setTextAlignment(Qt.AlignHCenter)
configButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
updateButton = QtWidgets.QListWidgetItem(self.listWidget)
updateButton.setIcon(QtGui.QIcon('play.png'))
updateButton.setTextAlignment(Qt.AlignHCenter)
updateButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
self.listWidget.currentItemChanged.connect(self.changePage)
def changePage(self, current, previous):
if not current:
current = previous
self.stackedWidget.setCurrentIndex(self.listWidget.row(current))
Stylesheet = '''
QListWidget {
border: none;
}
QListWidget::item {
width: 60px;
height: 60px;
color: #3b4155;
}
QListWidget::item:selected {
background-color: #7189DB;
}
QLabel {
background: #7189DB;
margin: 0px;
color: white;
font: 21pt;
}
'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(Stylesheet)
w = LeftTabWidget()
w.show()
sys.exit(app.exec_())
Ответы (1 шт):
Попробуйте так:
- измените
self.listWidget.setMaximumWidth(60) - измените
self.listWidget.setMinimumWidth(60) добавьте
QListWidget::item:!selected { /* <<<-----< */ background-color: #7189DB; }
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
class LeftTabWidget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
super(LeftTabWidget, self).__init__(*args, **kwargs)
self.setMinimumSize(500, 300)
btn = QtWidgets.QPushButton('Button')
layout1 = QtWidgets.QHBoxLayout(self)
layout1.addWidget(btn)
self.listWidget = QtWidgets.QListWidget()
self.listWidget.setContentsMargins(0, 0, 0, 0)
self.listWidget.setViewMode(QtWidgets.QListView.IconMode)
self.listWidget.setIconSize(QtCore.QSize(60, 60))
self.listWidget.setMovement(QtWidgets.QListView.Static)
self.listWidget.setMaximumWidth(60) # - 61 + 60
self.listWidget.setMinimumWidth(60) # - 61 + 60
self.listWidget.setSpacing(0)
self.stackedWidget = QtWidgets.QStackedWidget()
for i in range(2):
label = QtWidgets.QLabel('Страница %d' % (i + 1), self)
label.setAlignment(QtCore.Qt.AlignCenter)
# label.setStyleSheet('background: #7189DB; margin: 0px;')
self.stackedWidget.addWidget(label)
self.createIcons()
self.listWidget.setCurrentRow(0)
layout2 = QtWidgets.QHBoxLayout(spacing=0)
layout2.setContentsMargins(0, 0, 0, 0)
layout2.addWidget(self.listWidget)
layout2.addWidget(self.stackedWidget, 1)
layout1.addLayout(layout2)
def createIcons(self):
configButton = QtWidgets.QListWidgetItem(self.listWidget)
configButton.setIcon(QtGui.QIcon('play.png'))
configButton.setTextAlignment(Qt.AlignHCenter)
configButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
updateButton = QtWidgets.QListWidgetItem(self.listWidget)
updateButton.setIcon(QtGui.QIcon('play.png'))
updateButton.setTextAlignment(Qt.AlignHCenter)
updateButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
self.listWidget.currentItemChanged.connect(self.changePage)
def changePage(self, current, previous):
if not current:
current = previous
self.stackedWidget.setCurrentIndex(self.listWidget.row(current))
Stylesheet = '''
QListWidget {
border: none;
}
QListWidget::item {
width: 60px;
height: 60px;
color: #3b4155;
}
QListWidget::item:selected {
background-color: #7189DB;
}
QListWidget::item:!selected { /* <<<-----< */
background-color: #7189DB;
}
QLabel {
background: #7189DB;
margin: 0px;
color: white;
font: 21pt;
}
'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(Stylesheet)
w = LeftTabWidget()
w.show()
sys.exit(app.exec_())


