如何使用pyqt4禁用表格小部件中突出显示为绿色的选项

问题描述 投票:0回答:1

这是我的示例代码。我需要在我的表小部件中删除绿色突出显示的选项,因为我写了QtGui.QAbstractItemView.NoSelection但是使用这一行我无法在表格小部件中向上,向下,向左和向右移动我的光标。可以任何人请告诉我如何禁用绿色选择,我想用键盘上的箭头键移动我的光标..请帮助我..提前谢谢你..鉴于以下是我的代码:

import sys
from PyQt4 import QtCore,QtGui
global data_arraylist,count,pushBtnList,lineeditList
class Table_Program(QtGui.QMainWindow ):
    def __init__(self,config=None, parent=None):
        super(Table_Program, self).__init__(parent)
        global data_arraylist,count,pushBtnList,lineeditList
        self.scrollArea_left = QtGui.QScrollArea(widgetResizable=True)
        self.mainw2 = QtGui.QWidget()
        self.mainw2.showFullScreen()
        self.scrollArea_left.setWidget(self.mainw2)
        self.newvbox = QtGui.QGridLayout(self.mainw2)
        self.table = QtGui.QTableWidget()
        self.table_item = QtGui.QTableWidgetItem()
        self.table.setRowCount(1)
        self.table.verticalHeader().hide()
        self.table.setColumnCount(4)
        self.table.setHorizontalHeaderLabels(("S.no, Item Description,Qty,Rate(Rs:),"",").split(','))
        self.newvbox.addWidget(self.table,0,0)
        self.table.setColumnWidth(2,170)
        self.table.setColumnWidth(3,200)
        self.btn1 = QtGui.QPushButton(icon=QtGui.QIcon("./plus1.png"))
        self.btn1.setIconSize(QtCore.QSize(30,20))
        self.table.setCellWidget(0,0,self.btn1)
        self.btn1.clicked.connect(self.insert_rows)
        self.table.setItem(0,4,QtGui.QTableWidgetItem(str(" ")))
        self.setCentralWidget(self.scrollArea_left)
        # QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Up), self, self.moveup)
    def insert_rows(self,typ=None):
        layout_item = QtGui.QHBoxLayout()
        cellWidget = QtGui.QWidget()
        self.itemlineedit = QtGui.QLineEdit()
        self.itemlineedit.setFrame(False)
        self.search_btn = QtGui.QPushButton(icon=QtGui.QIcon('search.png'))
        self.search_btn.setIconSize(QtCore.QSize(20,20))
        layout_item.addWidget(self.itemlineedit)
        layout_item.addStretch()
        layout_item.addWidget(self.search_btn)
        cellWidget.setLayout(layout_item)
        global pushBtnList
        ct = self.table.rowCount()
        self.table.insertRow(ct-1)
        self.btn = QtGui.QPushButton()
        self.btn.setIcon(QtGui.QIcon("./delete.png"))
        self.btn.setIconSize(QtCore.QSize(30,60))
        self.table.setItem(ct-1,0,QtGui.QTableWidgetItem(str(ct)))
        self.table.setCellWidget(ct -1,5,self.btn)
        index = QtCore.QPersistentModelIndex(self.table.model().index(ct -1, 5))
        self.quantybutton = QtGui.QLineEdit()
        self.itemlineedit.textChanged.connect(partial(self.product_rate,ct))
        completer = QtGui.QCompleter()
        self.itemlineedit.setCompleter(completer)
        self.model = QtGui.QStringListModel()
        self.itemlineedit.resize(100,50)
        completer.setModel(self.model)
        self.item_rate = QtGui.QLabel()
        self.table.setCellWidget(ct-1, 3,self.item_rate)
        self.table.setCellWidget(ct-1, 2,  self.quantybutton)
        self.table.setCellWidget(ct -1, 1, cellWidget)
        self.table.setRowHeight(ct-1,50)
        self.table.setColumnWidth(1,170)


    def get_data(self,model):
        model.setStringList(["item1","item2","item3"])
    def product_rate(self,text,index):
        self.quantybutton.setText("1")
        self.item_rate.setText(str("20"))
        self.get_data(self.model)
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    tb = Table_Program()
    tb.show()
    tb.resize(600,300)
    sys.exit(app.exec_())
python-2.7 pyqt4
1个回答
0
投票

一个简单的解决方案是实现一个自定义QStyle,禁用QTableWidget中的高亮选项:

from PyQt4 import QtCore, QtGui

class CustomStyle(QtGui.QCommonStyle):
    def drawPrimitive(self, element, option, painter, widget):
        if element == QtGui.QStyle.PE_PanelItemViewItem:
            option.state &= ~QtGui.QStyle.State_Selected
        super(CustomStyle, self).drawPrimitive(element, option, painter, widget)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = QtGui.QTableWidget(5, 4)
    w.setStyle(CustomStyle()) # <--- set style
    w.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.