【问题标题】:I want just the first column to be clickable in QTableWidget using pyqt5我只想使用 pyqt5 在 QTableWidget 中单击第一列
【发布时间】:2020-09-22 18:50:25
【问题描述】:

我有 2 列的 QTableWidget。我只希望第一列可点击或可选择,其他列不应该。

在下面的示例中,我只希望会话列是可点击的,而不是存档对象列

def _populateJobTW(self):
    #Populating ListWidget with data
    myDate = self.RundateEdit.date()
    SearchDate=myDate.toString('MM/dd/yyyy')
    mycursor=mydbhdb.cursor()
    mycursor.execute("""select "Archiving Session", "Archiving Object"||'('||"Variant"||')' from admirun where
     "Date of Archiving" = '{}' and "Archiving Object" != 'BC_XMB';""".format(SearchDate))
    result=mycursor.fetchall()
    self.JobTW.setRowCount(0)

   for row_number, row_data in enumerate(result):
        self.JobTW.insertRow(row_number)
        for column_number, data in enumerate(row_data):
            #item = self.cell("text")
            #item.setFlags(QtCore.Qt.ItemIsEnabled)
            self.JobTW.setItem(row_number, column_number, QTableWidgetItem(str(data)))
            ##############Make all column un selectable or other than the first column
            if column_number > 0:
                print(column_number)
                data1 = QTableWidgetItem(data)
                print(data1.text())
                data1.setFlags(data1.flags() | Qt.ItemIsSelectable)
                #data.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable)
def _cellClicked(self, row, col): 
    # Row and Col came directly from the click 
    item = self.JobTW.item(row, col) # Will assign the values 
    print("The session Nnumber is {} ".format(item.text()))

【问题讨论】:

  • 可点击还是可选择?它们是 2 个不同的概念
  • 我使用第一列来获取单击单元格的 int 值,然后我有一个适用于该值的逻辑。我想阻止用户点击第二列。
  • 您还没有回答我的问题,您能否展示一下您为点击实现的代码部分,您是否使用任何信号?
  • 谢谢 Eyllanesc,我不希望列中的任何行可点击。 def _cellClicked(self, row, col): # Row 和 Col 直接来自点击 item = self.JobTW.item(row, col) # 将赋值 print("The session Nnumber is {} ".format(item .text()))
  • 可点击对您意味着什么?你也没有提供我问你的东西。

标签: python pyqt pyqt5 qtablewidget


【解决方案1】:

防止为某些项目发出单击信号的可能解决方案可能是覆盖 mouseXEvents 方法,覆盖默认行为,但这可能会导致问题,而一个简单的解决方案是在插槽中进行过滤:

def _cellClicked(self, row, column): 
    # Row and Col came directly from the click 
    if column == 0:
        item = self.JobTW.item(row, col) # Will assign the values 
        if item is not None:
            print("The session Nnumber is {} ".format(item.text()))

通过上述方式,列仍处于选中状态,如果您不希望这种行为,您可以使用委托:

class NonSelectableDelegate(QStyledItemDelegate):
    def editorEvent(self, event, model, option, index):
        return index.column() != 0
delegate = NonSelectableDelegate(self.JobTW)
self.JobTW.setItemDelegate(delegate)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2019-01-08
    • 2019-07-06
    • 1970-01-01
    相关资源
    最近更新 更多