Найти - Пользователи
Полная версия: QtableWidget не заполняется полностью таблица из списка.
Начало » Python для новичков » QtableWidget не заполняется полностью таблица из списка.
1
Holzer
Помогите пожалуйста. А то даже не представляю почему питон не берет из списка повторяющиеся значения. И еще вопрос. Если я в классе QWidget прописываю через сетшитстайл бекграунд, то картинка почему то не отображается. Зато в диалоговом окне беграунд у Qwidget отображается… Почему так происходит?
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QPushButton, QApplication, QVBoxLayout, QWidget, QDialog, QDialogButtonBox, \
QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt


class List(QDialog):


def __init__(self):

super().__init__()

self.list = [('list1', 1, 2, 1, 0), ('list2', 0, 2, 3, 0), ('list3', 1, 3, 3, 0), ('list4', 2, 2, 1, 0)]
self.setupUi()

def setupUi(self):

self.resize(540, 500)
self.image = QWidget()
self.image.setMinimumSize(540, 200)
self.image.setStyleSheet("background-image: url(D:/gui/img/hall100.jpg); background-attachment: fixed")
self.buttonBox = QDialogButtonBox()

self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok)
self.buttonBox.setCenterButtons(True)

self.table = QTableWidget()
self.table.setRowCount(len(self.list))
self.table.setColumnCount(5)
vbox = QVBoxLayout()
vbox.addWidget(self.table)
vbox.addWidget(self.image)
vbox.addWidget(self.buttonBox)

self.setLayout(vbox)

self.setModal(True)


i = 0
for item in self.list:
for atr in item:
print(item)
n = item.index(atr)
if n == 4 and atr == 0:
self.butt = QPushButton('+')
self.butt.clicked.connect(self.ing)
self.table.setCellWidget(i, n, self.butt)
elif n == 0:
atribut = QTableWidgetItem(atr)
atribut.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
atribut.setTextAlignment(Qt.AlignCenter)
self.table.setItem(i, n, atribut)
atribut.setCheckState(Qt.Checked)
else:
atribut = QTableWidgetItem(str(atr))
atribut.setFlags(Qt.ItemIsEnabled)
atribut.setTextAlignment(Qt.AlignCenter)
self.table.setItem(i, n, atribut)

i += 1

self.buttonBox.accepted.connect(self.acept_dialog)
self.buttonBox.rejected.connect(self.reject_dialog)

def acept_dialog(self):

choosnames = []

item = self.table.item

for row in range(self.table.rowCount()):

if item(row, 0).checkState() == Qt.Checked:

nam = item(row, 0).text()
choosnames.append(nam)
print(choosnames)
self.close()


def reject_dialog(self):

self.close()

def ing(self):
pass

if __name__ == '__main__':

app = QApplication(sys.argv)
ex = List()
ex.show()
app.exec_()
rami
Holzer
А то даже не представляю почему питон не берет из списка повторяющиеся значения.
В блоке “for” в строке кода n = item.index(atr), метод index возвращает номер первого из повторяющихся искомых значений.

Нужно переделать блок “for”:
         for i,item in enumerate(self.list):
            for n in range(self.table.columnCount()):
                if n == 4:
                    self.butt = QPushButton('+')
                    self.butt.clicked.connect(self.ing)
                    self.table.setCellWidget(i, 4, self.butt)
                elif n == 0:
                    atribut = QTableWidgetItem(str(item[n]))
                    atribut.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
                    atribut.setTextAlignment(Qt.AlignCenter)
                    self.table.setItem(i, n, atribut)
                    atribut.setCheckState(Qt.Checked)
                else:
                    atribut = QTableWidgetItem(str(item[n]))
                    atribut.setFlags(Qt.ItemIsEnabled)
                    atribut.setTextAlignment(Qt.AlignCenter)
                    self.table.setItem(i, n, atribut)
Holzer
Спасибо. Честно говоря в печали, что сам оказался не в состоянии найти в чем же причина, хотя это было очевидно…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB