在鼠标点击改变桌面选择的背景颜色在Linux上的PyQt
问题描述:
我想通知用户,当列表中的项目出现问题时,它是双击。在鼠标点击改变桌面选择的背景颜色在Linux上的PyQt
我使用setStyleSheet,只是为了发现它不适用于统一和肉桂,而它适用于KDE和i3。
我不是那么聪明的qbrushes或其他的东西我googling出来。
那么最好的方法来解决这个问题,以便它可以在任何地方工作?谢谢。
继承人我的解决方案在行动中的一个gif。
继承人它的代码,它的pyqt5,python3
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
class My_Model_table(QAbstractTableModel):
def __init__(self, table_data=[], parent=None):
super().__init__()
self.table_data = table_data
def rowCount(self, parent):
return len(self.table_data)
def columnCount(self, parent):
return 1
def data(self, index, role):
if role == Qt.DisplayRole:
value = self.table_data[index.row()]
return value
if role == Qt.TextAlignmentRole:
return Qt.AlignCenter
class My_table(QTableView):
def __init__(self, parent=None):
super().__init__()
self.activated.connect(self.double_click_enter)
def double_click_enter(self, QModelIndex):
row = QModelIndex.row()
self.setStyleSheet('selection-background-color:red;')
self.alarm = QTimer()
self.alarm.timeout.connect(self.row_color_back)
self.alarm.setSingleShot(True)
self.alarm.start(200)
return
def row_color_back(self):
self.setStyleSheet('')
if __name__ == '__main__':
app = QApplication(sys.argv)
data = ['1', '2', '3', '4', '5']
main_table = My_table()
main_table.setModel(My_Model_table(data))
main_table.show()
sys.exit(app.exec_())
答
好的,当我看到qdarkstylesheet时发现我的错误。 而不是仅仅selection-background-color
我应该使用QTableView::item:selected:active
GIF是从Ubuntu的
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
class My_Model_table(QAbstractTableModel):
def __init__(self, table_data=[], parent=None):
super().__init__()
self.table_data = table_data
def rowCount(self, parent):
return len(self.table_data)
def columnCount(self, parent):
return 1
def data(self, index, role):
if role == Qt.DisplayRole:
value = self.table_data[index.row()]
return value
if role == Qt.TextAlignmentRole:
return Qt.AlignCenter
class My_table(QTableView):
def __init__(self, parent=None):
super().__init__()
self.activated.connect(self.double_click_enter)
def double_click_enter(self, QModelIndex):
row = QModelIndex.row()
self.setStyleSheet(
'''
QTableView::item:selected:active {
background: #00ff00;
}
'''
)
self.alarm = QTimer()
self.alarm.timeout.connect(self.row_color_back)
self.alarm.setSingleShot(True)
self.alarm.start(200)
return
def row_color_back(self):
self.setStyleSheet('')
if __name__ == '__main__':
app = QApplication(sys.argv)
data = ['1', '2', '3', '4', '5']
main_table = My_table()
main_table.setModel(My_Model_table(data))
main_table.show()
sys.exit(app.exec_())
答
尝试过骑着mousePressEvent
和mouseReleaseEvent
这是你的代码的修改。我相信这应该在所有的桌面环境中运行
#!/usr/bin/python3
# -*- encoding: utf-8 -*-
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
class TableData(QAbstractTableModel):
def __init__(self, data = [], parent = None):
super(QAbstractTableModel, TableData).__init__(self, parent)
self.data = data
def rowCount(self, parent):
return len(self.data)
def columnCount(self, parent):
return 1
def data(self, index, role):
if role == Qt.DisplayRole:
return self.data[ index.row() ]
elif role == Qt.TextAlignmentRole:
return Qt.AlignCenter
class Table(QTableView):
def __init__(self, parent = None):
super(QTableView, Table).__init__(self)
def mousePressEvent(self, mpEvent) :
self.setStyleSheet("QTableView{ selection-background-color: red; }")
QTableView.mousePressEvent(self, mpEvent)
def mouseReleaseEvent(self, mrEvent) :
self.setStyleSheet("QTableView{ selection-background-color: none; }")
QTableView.mouseReleaseEvent(self, mrEvent)
if __name__ == '__main__':
app = QApplication(sys.argv)
Gui = Table()
Gui.setModel(TableData(['1', '2', '3', '4', '5'], Gui))
Gui.show()
sys.exit(app.exec_())
PS:我刚才在KDE /等离子5.尝试这个我没有GNOME /统一的接口来检查代码。
不,团结是不行的,我觉得setStyleSheet的方式不会带来成功。 – DoTheEvo