PyQt4:添加QLineEdit和QComp后QTableWidget不稳定

2024-09-30 22:17:29 发布

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

我想有一个表,其中一列已自动完成。我认为最好的方法是使用QTableWidget,然后不使用默认的QTableWidgetItem(它不支持QCompleters),而是将单元格设置为带有完成符的QLineEdit。但是当我这样做的时候,单元格框的轮廓在闪烁,我得到了以下错误:QObject::startTimer: QTimer can only be used with threads started with QThread

这是一个样本。尝试添加几行(+在numpad上),向其中添加数据,然后快速关闭以获取错误。你知道吗

import sys
from PyQt4 import QtGui, QtCore


class DevTLog(QtGui.QMainWindow):

    def __init__(self):
        super(DevTLog, self).__init__()
        self.initUI()

    def initUI(self):
        # Actions
        self.addItemAction = QtGui.QAction("Add row", self)
        self.addItemAction.setShortcut(QtCore.Qt.Key_Plus)

        # Menu
        menu = self.menuBar()

        menu_file = menu.addMenu("File")
        menu_file.addAction(self.addItemAction)

        # Table
        self.log = QtGui.QTableWidget()
        self.log.setColumnCount(3)
        self.log.setColumnWidth(0,150)

        self.setCentralWidget(self.log)
        self.setGeometry(100, 100, 600, 600)

        # signals/slots
        self.addItemAction.triggered.connect(self.addItem)

    def addItem(self):

        nameItem = QtGui.QLineEdit()
        completer = QtGui.QCompleter()
        nameItem.setCompleter(completer)

        row = self.log.rowCount()
        self.log.insertRow(row)
        self.log.setItem(row, 0, QtGui.QTableWidgetItem())
        self.log.setCellWidget(row, 1, nameItem)
        self.log.setItem(row, 2, QtGui.QTableWidgetItem())



def main():
    app = QtGui.QApplication(sys.argv)
    ex = DevTLog()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

Tags: selflogmaindef错误sysrowmenu