Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 10, 2020 22:26:30

Holzer
Зарегистрирован: 2019-12-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

QtableWidget не заполняется полностью таблица из списка.

Помогите пожалуйста. А то даже не представляю почему питон не берет из списка повторяющиеся значения. И еще вопрос. Если я в классе 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_()

Отредактировано Holzer (Фев. 10, 2020 22:28:51)

Офлайн

#2 Фев. 11, 2020 08:48:28

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

QtableWidget не заполняется полностью таблица из списка.

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)

Отредактировано rami (Фев. 11, 2020 08:48:59)

Офлайн

#3 Фев. 11, 2020 15:26:50

Holzer
Зарегистрирован: 2019-12-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

QtableWidget не заполняется полностью таблица из списка.

Спасибо. Честно говоря в печали, что сам оказался не в состоянии найти в чем же причина, хотя это было очевидно…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version