처음 두 열에 문자열을 추가하고 pyqt tablewidget의 각 문자열 행에 대해 세 번째 열에 버튼을 추가하려면 어떻게해야합니까?

answerSeeker

2 개 열을 2 개 목록의 문자열로 채우려 고합니다. 1 열에는 목록 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방법에 있습니다. 당신은 위젯을 초기화 할 필요가 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)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관