在鼠标点击改变桌面选择的背景颜色在Linux上的PyQt

在鼠标点击改变桌面选择的背景颜色在Linux上的PyQt

问题描述:

我想通知用户,当列表中的项目出现问题时,它是双击。在鼠标点击改变桌面选择的背景颜色在Linux上的PyQt

我使用setStyleSheet,只是为了发现它不适用于统一和肉桂,而它适用于KDE和i3。

我不是那么聪明的qbrushes或其他的东西我googling出来。

那么最好的方法来解决这个问题,以便它可以在任何地方工作?谢谢。

继承人我的解决方案在行动中的一个gif。

enter image description here

继承人它的代码,它的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的

enter image description here

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_()) 

尝试过骑着mousePressEventmouseReleaseEvent这是你的代码的修改。我相信这应该在所有的桌面环境中运行

#!/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 /统一的接口来检查代码。

+0

不,团结是不行的,我觉得setStyleSheet的方式不会带来成功。 – DoTheEvo