在 Linux 的 PyQt 表格视图中单击鼠标更改选择的背景颜色
On mouse click changing selection's background color in tableview PyQt on Linux
我试图在双击列表中的项目时出现问题时通知用户。
我使用了 setStyleSheet,却发现它不适用于 unity 和 cinnamon,而它适用于 KDE 和 i3。
我对 qbrushes 或我正在谷歌搜索的其他东西不是那么精通。
那么解决这个问题的最佳方法是什么,以便它在任何地方都有效?谢谢
这是我的解决方案的 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_())
试试over-riding 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/Plasma 5中尝试过这个。我没有GNOME/Unity接口来检查代码。
好的,我在看 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_())
我试图在双击列表中的项目时出现问题时通知用户。
我使用了 setStyleSheet,却发现它不适用于 unity 和 cinnamon,而它适用于 KDE 和 i3。
我对 qbrushes 或我正在谷歌搜索的其他东西不是那么精通。
那么解决这个问题的最佳方法是什么,以便它在任何地方都有效?谢谢
这是我的解决方案的 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_())
试试over-riding 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/Plasma 5中尝试过这个。我没有GNOME/Unity接口来检查代码。
好的,我在看 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_())