如何将光标放置在QTableWidget单元格的开头

2024-10-03 09:07:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是以下PyQt代码,要求光标在单元格0,1的开始处闪烁

import sys 
from PyQt4.QtCore import *
from PyQt4.QtGui import *

data = {'col1':['1','2','3'], 'col2':['4','5','6'], 'col3':['7','8','9']}

class MyTable(QTableWidget):
    def __init__(self, data, *args):
         QTableWidget.__init__(self, *args)
         self.data = data
         self.setmydata()
         self.resizeColumnsToContents()
         self.resizeRowsToContents()
         self.setCursorPosition()

    def setmydata(self):

        horHeaders = []
        for n, key in enumerate(sorted(self.data.keys())):
            horHeaders.append(key)
            for m, item in enumerate(self.data[key]):
              newitem = QWidget()
              self.setCellWidget(m, n, newitem)
              self.setHorizontalHeaderLabels(horHeaders)

    def setCursorPosition(self):
         wid = self.cellWidget(0,1)
         wid.setCursor(QCursor(Qt.WaitCursor))
         wid.setFocus()

要求在单元格0,1的开始处闪烁光标。方法setCursorPosition中的行对我没有帮助。有人能帮我解决这个问题吗


Tags: keyfromimportselfdatainitdefargs
1条回答
网友
1楼 · 发布于 2024-10-03 09:07:35

根据您的代码,您将QWidget设置为不处理光标的cellwidget,而不是闪烁的光标。因此您不应该使用QWidget,也许QLineEdit应该是一个更好的选择,尽管我发现没有必要使用cellwidget,因为它足以打开默认使用edit()方法的编辑器

import sys
from PyQt4.QtGui import QApplication, QTableWidget, QTableWidgetItem


class MyTable(QTableWidget):
    def __init__(self, data, parent=None):
        super(MyTable, self).__init__(parent)
        self.data = data
        self.setCustomData()
        self.resizeColumnsToContents()
        self.resizeRowsToContents()

        index = self.model().index(0, 1)
        self.edit(index)

    def setCustomData(self):
        labels = list(self.data.keys())
        self.setColumnCount(len(labels))
        self.setHorizontalHeaderLabels(labels)

        for i, (key, value) in enumerate(self.data.items()):
            for j, v in enumerate(value):
                if j >= self.rowCount():
                    self.insertRow(self.rowCount())
                it = QTableWidgetItem(v)
                self.setItem(j, i, it)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    data = {"col1": ["1", "2", "3"], "col2": ["4", "5", "6"], "col3": ["7", "8", "9"]}
    w = MyTable(data)
    w.show()
    sys.exit(app.exec_())

相关问题 更多 >