Выделение строки в таблице pyqt5, через стилизацию css
Есть интерфейс, написанный на pyqt5, и отдельный css файл в котором задается стиль приложения. Я пытаюсь реализовать выделение строки таблицы при наведении на строку. Но пока что удалось сделать только выделение по отдельности строки таблицы и её номера. Как сделать одновременное выделение и строки и номера строки?
Файл CSSstyle.css:
QWidget#MainWindow{
background-image: url("backgroundimg.jpg");
background-repeat: no-repeat;
}
QLabel{
color: #e4f1fe;
}
QWidget#horizontalLayoutWidget{
border-radius: 2px;
background-color: rgba(0, 0, 0, 0.8);
}
QWidget#verticalLayoutWidget{
border-radius: 4px;
background-color: rgba(0, 0, 0, 0.8);
}
QPushButton{ /* Общая настройка кнопок */
background: #22313f;
border-radius: 2px;
color: #e4f1fe;
}
QPushButton:pressed{
background-color: #556478;
border-style: inset;
}
QTableWidget{
selection-background-color: #556478;
background: #2a323b;
border-radius: 8px;
color: #fff;
}
QHeaderView:section:hover, QTableWidget:item:hover{
background-color: rgba(255, 156, 156, 0.8);
}
QHeaderView::section{
color: #fff;
background-color: #2a313b;
border: 1px solid #22313f;
}
QHeaderView{
background: #2a313b;
border-radius: 6px;
text-align: center;
}
Конкретно следующие строчки файла отвечают за выделение элементов таблицы:
QHeaderView:section:hover, QTableWidget:item:hover{
background-color: rgba(255, 156, 156, 0.8);
}
Файл интерфейса Qt5Interface.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setFixedSize(600, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
#Контейнеры
#Контейнер верхних кнопок
self.horizontalLayoutWidget = QtWidgets.QFrame(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 600, 30))
self.horizontalLayoutWidget.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.hbox = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.hbox.setContentsMargins(0, 0, 0, 0)
self.hbox.setObjectName("hbox")
#Контейнер для боковых кнопок
self.verticalLayoutWidget = QtWidgets.QFrame(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(543, 39, 57, 340))
self.verticalLayoutWidget.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.vbox = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.vbox.setContentsMargins(5, 5, 5, 5)
self.vbox.setObjectName("vbox")
#Кнопки
#Back
self.back_button = QtWidgets.QPushButton()
self.back_button.setFlat(True)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("Icons/back-left.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.back_button.setIcon(icon)
self.back_button.setObjectName("back_button")
#Forward
self.Forward_button = QtWidgets.QPushButton()
self.Forward_button.setFlat(True)
self.Forward_button.setObjectName("Forward_button")
#Разделитель
self.separator_vertical_1 = QtWidgets.QFrame()
self.separator_vertical_1.setFrameShape(QtWidgets.QFrame.VLine)
self.separator_vertical_1.setFrameShadow(QtWidgets.QFrame.Raised)
self.separator_vertical_1.setObjectName("separator_vertical_1")
#Save
self.save_button = QtWidgets.QPushButton()
self.save_button.setFlat(True)
self.save_button.setText("")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap("Icons/save.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.save_button.setIcon(icon1)
self.save_button.setObjectName("save_button")
#Разделитель снова
self.separator_vertical_2 = QtWidgets.QFrame()
self.separator_vertical_2.setFrameShape(QtWidgets.QFrame.VLine)
self.separator_vertical_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.separator_vertical_2.setObjectName("separator_vertical_2")
#Cut
self.cut_button = QtWidgets.QPushButton()
self.cut_button.setFlat(True)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap("Icons/cut.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.cut_button.setIcon(icon2)
self.cut_button.setObjectName("cut_button")
#Copy
self.Copy_button = QtWidgets.QPushButton()
self.Copy_button.setFlat(True)
self.Copy_button.setObjectName("Copy_button")
#Paste
self.paste_button = QtWidgets.QPushButton()
self.paste_button.setFlat(True)
self.paste_button.setObjectName("paste_button")
#Change
self.change_button = QtWidgets.QPushButton()
self.change_button.setFlat(True)
self.change_button.setObjectName("change_button")
#Разделитель снова снова
self.separator_vertical_3 = QtWidgets.QFrame()
self.separator_vertical_3.setFrameShape(QtWidgets.QFrame.VLine)
self.separator_vertical_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.separator_vertical_3.setObjectName("separator_vertical_3")
# Down (сам ты даун)
self.down_button = QtWidgets.QPushButton()
self.down_button.setFlat(True)
icon4 = QtGui.QIcon()
icon4.addPixmap(QtGui.QPixmap("Icons/arrow-down.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.down_button.setIcon(icon4)
self.down_button.setObjectName("down_button")
#UP
self.Up_button = QtWidgets.QPushButton()
self.Up_button.setFlat(True)
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap("Icons/arrow-up.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.Up_button.setIcon(icon3)
self.Up_button.setObjectName("Up_button")
#Разделитель снова снова снова
self.separator_vertical_4 = QtWidgets.QFrame()
self.separator_vertical_4.setFrameShape(QtWidgets.QFrame.VLine)
self.separator_vertical_4.setFrameShadow(QtWidgets.QFrame.Raised)
self.separator_vertical_4.setObjectName("separator_vertical_4")
# Delete line
self.Delete_line_button = QtWidgets.QPushButton()
self.Delete_line_button.setFlat(True)
icon5 = QtGui.QIcon()
icon5.addPixmap(QtGui.QPixmap("Icons/trash.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.Delete_line_button.setIcon(icon5)
self.Delete_line_button.setObjectName("Delete_line_button")
# Delete all
self.Delete_all_button = QtWidgets.QPushButton()
self.Delete_all_button.setFlat(True)
self.Delete_all_button.setIcon(icon5)
self.Delete_all_button.setObjectName("Delete_all_button")
#Разделитель снова снова снова снова
self.separator_vertical_5 = QtWidgets.QFrame()
self.separator_vertical_5.setFrameShape(QtWidgets.QFrame.VLine)
self.separator_vertical_5.setFrameShadow(QtWidgets.QFrame.Raised)
self.separator_vertical_5.setObjectName("separator_vertical_5")
# Stop
self.Stop_button = QtWidgets.QPushButton()
self.Stop_button.setFlat(True)
self.Stop_button.setObjectName("Stop_button")
#Play
self.play_button = QtWidgets.QPushButton()
self.play_button.setFlat(True)
self.play_button.setCheckable(True) #Отвечает за то, будет кнопка вжимаемой
self.play_button.setObjectName("play_button")
#Добавление верхних кнопок в контейнер
self.hbox.addWidget(self.back_button)
self.hbox.addWidget(self.Forward_button)
self.hbox.addWidget(self.separator_vertical_1)
self.hbox.addWidget(self.save_button)
self.hbox.addWidget(self.separator_vertical_2)
self.hbox.addWidget(self.cut_button)
self.hbox.addWidget(self.Copy_button)
self.hbox.addWidget(self.paste_button)
self.hbox.addWidget(self.change_button)
self.hbox.addWidget(self.separator_vertical_3)
self.hbox.addWidget(self.down_button)
self.hbox.addWidget(self.Up_button)
self.hbox.addWidget(self.separator_vertical_4)
self.hbox.addWidget(self.Delete_line_button)
self.hbox.addWidget(self.Delete_all_button)
self.hbox.addWidget(self.separator_vertical_5)
self.hbox.addWidget(self.Stop_button)
self.hbox.addWidget(self.play_button)
#Таблица биндов
table = QtWidgets.QTableWidget(self.centralwidget)
table.setGeometry(QtCore.QRect(50, 39, 484, 340))
table.setColumnCount(1)
table.setRowCount(10)
table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
table.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
table.verticalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
table.verticalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
table.setHorizontalHeaderLabels(["Column 1"])
table.horizontalHeader().hide()
table.horizontalHeaderItem(0).setTextAlignment(QtCore.Qt.AlignLeft)
table.setItem(0, 0, QtWidgets.QTableWidgetItem("Нажать S"))
table.setItem(1, 0, QtWidgets.QTableWidgetItem("Перейти к n строке"))
table.setItem(2, 0, QtWidgets.QTableWidgetItem("Повторять n количество раз"))
#Боковые кнопки
self.Button_1 = QtWidgets.QPushButton(self.centralwidget)
self.Button_1.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum))
self.Button_1.setObjectName("Button_1")
self.Button_2 = QtWidgets.QPushButton(self.centralwidget)
self.Button_2.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum))
self.Button_2.setObjectName("Button_2")
self.Button_3 = QtWidgets.QPushButton(self.centralwidget)
self.Button_3.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum))
self.Button_3.setObjectName("Button_3")
self.Button_4 = QtWidgets.QPushButton(self.centralwidget)
self.Button_4.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum))
self.Button_4.setObjectName("Button_4")
self.Button_5 = QtWidgets.QPushButton(self.centralwidget)
self.Button_5.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum))
self.Button_5.setObjectName("Button_5")
self.Button_6 = QtWidgets.QPushButton(self.centralwidget)
self.Button_6.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum))
self.Button_6.setObjectName("Button_6")
self.Button_7 = QtWidgets.QPushButton(self.centralwidget)
self.Button_7.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum))
self.Button_7.setObjectName("Button_7")
# Добавление боковых кнопок в контейнер
self.vbox.addWidget(self.Button_1)
self.vbox.addWidget(self.Button_2)
self.vbox.addWidget(self.Button_3)
self.vbox.addWidget(self.Button_4)
self.vbox.addWidget(self.Button_5)
self.vbox.addWidget(self.Button_6)
self.vbox.addWidget(self.Button_7)
#Верхняя менюшка
MainWindow.setCentralWidget(self.centralwidget)
#Пока что закомментил, мб снесём это и сделаем по лучше
'''
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 490, 21))
self.menubar.setObjectName("menubar")
self.menuSettings = QtWidgets.QMenu(self.menubar)
self.menuSettings.setObjectName("menuSettings")
self.menuProfile = QtWidgets.QMenu(self.menubar)
self.menuProfile.setObjectName("menuProfile")
MainWindow.setMenuBar(self.menubar)
self.menubar.addAction(self.menuSettings.menuAction())
self.menubar.addAction(self.menuProfile.menuAction())
#Доабавление в меню комманды
self.NewProfadd = QtWidgets.QAction("Create new")
self.SettingsProf = QtWidgets.QAction("Profile settings")
self.Openfilesettings = QtWidgets.QAction("Open file")
self.SaveFile = QtWidgets.QAction("Save file")
self.SaveFileAs = QtWidgets.QAction("Save file as")
self.SettingsMenuOpen = QtWidgets.QAction('Settings')
self.FaqButton = QtWidgets.QAction('FAQ')
self.Exitbutton = QtWidgets.QAction('Exit')
self.menuProfile.addAction(self.NewProfadd)
self.menuProfile.addAction(self.SettingsProf)
self.menuSettings.addAction(self.Openfilesettings)
self.menuSettings.addAction(self.SaveFile)
self.menuSettings.addAction(self.SaveFileAs)
self.menuSettings.addSeparator() #Отделитель
self.menuSettings.addAction(self.SettingsMenuOpen)
self.menuSettings.addAction(self.FaqButton)
self.menuSettings.addAction(self.Exitbutton)
'''
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Биндяра(pyqt5)"))
self.Forward_button.setText(_translate("MainWindow", "forward"))
self.Copy_button.setText(_translate("MainWindow", "copy"))
self.paste_button.setText(_translate("MainWindow", "paste"))
self.change_button.setText(_translate("MainWindow", "change"))
self.play_button.setText(_translate("MainWindow", "Play"))
self.Stop_button.setText(_translate("MainWindow", "stop"))
self.Delete_all_button.setText(_translate("MainWindow", "All"))
self.Delete_line_button.setText(_translate("MainWindow", "Line"))
self.Button_1.setText(_translate("MainWindow", "Задержка"))
self.Button_2.setText(_translate("MainWindow", "Переходник"))
self.Button_3.setText(_translate("MainWindow", "Цикл"))
self.Button_4.setText(_translate("MainWindow", "Комментарий"))
self.Button_5.setText(_translate("MainWindow", "$Цвет$"))
self.Button_6.setText(_translate("MainWindow", "Язык"))
self.Button_7.setText(_translate("MainWindow", "$Пере$"))
#self.menuSettings.setTitle(_translate("MainWindow", "Settings"))
#self.menuProfile.setTitle(_translate("MainWindow", "Profile"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
with open("CSSstyle.css", "r") as file:
app.setStyleSheet(file.read())
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())