如何在前2列上添加字符串,并在PYQT TableWidget中的每行字符串的第三列上添加按钮



我试图用2个列表中的字符串填充2列,第一列应该从列表1和第2列带有列表2的字符串。对于这些列的earch行,我想要要有一个按钮"添加",但是我尝试的只是不起作用...

这是我的代码。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui

class Example(QtGui.QDialog):
    def __init__(self):
        super(Example, self).__init__()
        self.resize(700, 400)
        self.setWindowTitle("example of what i'm trying to do")
        self.setWindowFlags(QtCore.Qt.Window)
        self.searchEditText = QtGui.QLineEdit()
        self.searchEditText.setPlaceholderText("ignore this")
        self.searchEditText.setMaximumWidth(200)
        self.searchbutton = QtGui.QPushButton()
        self.searchbutton.setText("start")
        self.searchbutton.setMaximumWidth(100)
        self.isWrittenTo = False
        self.table = QtGui.QTableWidget()
        self.configureTable(self.table)
        self.searchbutton.clicked.connect(lambda: self.start(self.table))
        self.table.verticalHeader().hide()
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.addWidget(self.searchEditText)
        self.horizontalLayout.addWidget(self.searchbutton)
        self.horizontalLayout.setAlignment(QtCore.Qt.AlignRight)
        self.verticalLayout = QtGui.QVBoxLayout(self)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.verticalLayout.addWidget(self.table)

    def configureTable(self, table):
        table.setColumnCount(4)
        table.setHorizontalHeaderItem(0, QtGui.QTableWidgetItem("1st col"))
        table.setHorizontalHeaderItem(1, QtGui.QTableWidgetItem("2nd col"))
        table.setHorizontalHeaderItem(2, QtGui.QTableWidgetItem("3rd col"))
        table.setHorizontalHeaderItem(3, QtGui.QTableWidgetItem("4th col"))
        header = table.horizontalHeader()
        header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(2, QtGui.QHeaderView.ResizeToContents)
        table.horizontalHeader().setStretchLastSection(True)
        table.setRowCount(5)
    def start(self, table):
        list_a = ["a is first letter", "b is second letter","c is third letter"]
        list_b = ["e4", "f5", "g6"]
        i = 0
        j = 0
        item1 = QtGui.QTableWidgetItem()
        item2 = QtGui.QTableWidgetItem()
        button1 = QtGui.QPushButton()
        button1.setText("add")
        button1.clicked.connect(self.add)
        for x in list_a:
            item1.setText(x)
            table.setItem(i, 0, item1)
            i += 1
        for z in list_b:
                item2.setText(z)
                table.setItem(j, 1, item2)
                table.setCellWidget(j, 2, button1)
                j += 1

    def codeName(self):
       return "codename"
    def add(self):
        print "added"
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    about = Example()
    about.show()
    sys.exit(app.exec_())

问题在您的start方法中。您需要在中初始化widgets item1item2button1> for循环的每个迭代,否则您正在尝试将非常相同的小部件放在表的所有行中。此外,如果您的lists的长度相同,则不需要两个for循环(只需改进代码(。这是修改(和工作(start方法:

def start(self, table):
    list_a = ["a is first letter", "b is second letter","c is third letter"]
    list_b = ["e4", "f5", "g6"]
    for i in range(len(list_a)):
        item1 = QtGui.QTableWidgetItem()
        item1.setText(list_a[i])
        table.setItem(i, 0, item1)
        button1 = QtGui.QPushButton()
        button1.setText("add")
        button1.clicked.connect(self.add)
        item2 = QtGui.QTableWidgetItem()
        item2.setText(list_b[i])
        table.setItem(i, 1, item2)
        table.setCellWidget(i, 2, button1)

最新更新