我试图用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 item1
, item2
和 button1
> 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)