Найти - Пользователи
Полная версия: проблема с checkBox
Начало » GUI » проблема с checkBox
1 2
Geleos
Имеется папка в которой лежат файлы. Далее считываем кол-во файлов и генерим энное кол-во чекбоксов в цикле (по кол-ву файлов)

for i in xrange(len(os.listdir('./Dumps/ATM/NDC'))):
j1 = j1 + 1
name = ‘checkBox’ + ‘_’ +str(i)
print name
self.name = QtGui.QCheckBox(self.gridLayoutWidget)
self.gridLayout.addWidget(self.name, i1, j1, 1, 1)

self.name.setObjectName(“checkBox” + str(i) )
self.name.setText(QtGui.QApplication.translate(“MainWindow”, j.decode('cp1251'), None, QtGui.QApplication.UnicodeUTF8))
if j1 == 3:
j1 = -1
i1 = i1 + 1

Генерация проходит успешно(Всё в итоге корректно отображается).
далее имеем 2 кнопки:

self.pushButton = QtGui.QPushButton(self.tab)
self.pushButton.setGeometry(QtCore.QRect(20, 480, 75, 23))
self.pushButton.setObjectName(“pushButton”)
self.connect(self.pushButton, QtCore.SIGNAL('clicked()'),self.SelectAll)


self.pushButton_2 = QtGui.QPushButton(self.tab)
self.pushButton_2.setGeometry(QtCore.QRect(110, 480, 75, 23))
self.pushButton_2.setObjectName(“pushButton_2”)
self.connect(self.pushButton_2, QtCore.SIGNAL('clicked()'),self.DeSelectAll)

Собственно по нажатию кнопок должны селектиться или деселектиться все чекбоксы.

def SelectAll(self):
for i in range(len(os.listdir('./Dumps/ATM/NDC'))):
name = ‘checkBox’ + ‘_’ + str(i)
print name
self.name.setCheckState(QtCore.Qt.Checked)

def DeSelectAll(self):
for i in range(len(os.listdir('./Dumps/ATM/NDC'))):
name = ‘checkBox’ + ‘_’ + str(i)
print name
self.name.setCheckState(QtCore.Qt.Unchecked)


Собственно пробую так… но отрабатывает только один чекбокс =( Как сделать так, чтобы селектились все чекбоксы?
P.S. Заранее спасибо
P.P.S. Используется Python 2.6 и PyQt 4.7.3
hellslade
Geleos
но отрабатывает только один чекбокс
Который создан последним? :)
Geleos
self.name = QtGui.QCheckBox(self.gridLayoutWidget)
В self.name вы каждый раз присваиваете новый чекбокс, соответственно и обращаетесь только к нему в дальнейщем.

Можно записывать все чекбоксы в список, либо получить все дочерние элементы виджета и если это чекбокс – изменить состояние.
Geleos
hellslade
Который создан последним? smile
Угу =\
hellslade
В self.name вы каждый раз присваиваете новый чекбокс, соответственно и обращаетесь только к нему в дальнейщем.
Но ведь по идее я меняю параметр name
name = ‘checkBox’ + ‘_’ +str(i)

self.name = QtGui.QCheckBox(self.gridLayoutWidget)

hellslade
Можно записывать все чекбоксы в список, либо получить все дочерние элементы виджета и если это чекбокс – изменить состояние.
А можно с примерами? =)
P.S. Заранее спасибо
Griffon
Что мешает делать self.name.append(…), или self.name += , конечно же, предварительно объявив список, и затем использовать for chkbox in self.name:?
hellslade
Geleos
Но ведь по идее я меняю параметр name
name = ‘checkBox’ + ‘_’ +str(i)

self.name = QtGui.QCheckBox(self.gridLayoutWidget)
можете попробовать примерно так:
exec(“”“self.%s = QtGui.QCheckBox(self.gridLayoutWidget)”“” % name)
ну и обращаться соответственно
exec(“”“self.%s.setCheckState(QtCore.Qt.Checked)”“” % name)

А вообще сделайте как Griffon написал - объявите список, в него добавляйте свои чекбоксы
Geleos
Спасибо огромное! помогло =)
Geleos
Теперь новая головная боль…

self.checkBoxs =

for i in xrange(len(os.listdir('./Dumps/ATM/Diebold'))):
j1 = j1 + 1
self.checkBoxs.append(QtGui.QCheckBox(self.gridLayoutWidget))
self.gridLayout.addWidget(self.checkBoxs, i1, j1, 1, 1)
self.checkBoxs.setObjectName(str(self.checkBoxs))
self.checkBoxs.setText(QtGui.QApplication.translate(“MainWindow”, j.decode('cp1251'), None, QtGui.QApplication.UnicodeUTF8))
if j1 == 3:
j1 = -1
i1 = i1 + 1

генерим чекбоксы, затем по нажатию кнопки они должны удаляться:

def Printt(self):
ind = self.comboBox.currentIndex()
lenn = len(self.checkBoxs)
print lenn

if ind == 0:
base_dir = ‘./Dumps/ATM/Diebold/’
j = os.listdir(base_dir)

for i in xrange(lenn):
print ‘lenn =’, lenn , ‘; i = ’, i

self.gridLayout.removeWidget(self.checkBoxs)
self.checkBoxs.setParent(None)
del self.checkBoxs







что самое странное удаляется ровно половина чекбоксов =\ я так понимаю виноваты каким то боком:

self.gridLayout.removeWidget(self.checkBoxs)
self.checkBoxs.setParent(None)
del self.checkBoxs

Не могу понять почему цикл доходит только до половины… при этом если ещё раз нажать на кнопку удалится опять половина и так дале…

Собственно Help!
hellslade
Geleos
Должен быть ексепшн, Вы его видели? он вам ничего не подсказал?
Geleos
что самое странное удаляется ровно половина чекбоксов =\ я так понимаю виноваты каким то боком:

self.gridLayout.removeWidget(self.checkBoxs)
self.checkBoxs.setParent(None)
del self.checkBoxs
виноват del self.checkBoxs
вы удаляете начиная с начала списка. Т.е. удаляя первый элемент, второй элемент становится первым и т.д. Удалять начинайте с конца списка, либо после цикла занулите self.checkBoxs
Griffon
После цикла self.chekBoxs = и всё.
Geleos
И снова здравствуйте =) Спасибо, что помогаете в решении моих проблем. Вот ещё 1 новая =))
Генерируется нечто в цикле:
self.tabWidget_3 = QtGui.QTabWidget(self.tab_5)
self.tabWidget_3.setGeometry(QtCore.QRect(320, 30, 421, 131))
self.tabWidget_3.setObjectName(“tabWidget_3”)
self.spinBox = QtGui.QSpinBox(self.tab_5)
self.spinBox.setGeometry(QtCore.QRect(90, 30, 42, 22))
self.spinBox.setMinimum(2)
self.spinBox.setObjectName(“spinBox”)
self.connect(self.spinBox, QtCore.SIGNAL('valueChanged(int)'),self.AddTCase)

self.labelTcase=
self.lineEditTcase=
self.pushButtonTcase=
self.tabTcase=
self.tabWidgetTcase=
self.plainTextEdits=

for i in xrange(self.spinBox.value()):
self.labelTcase.append(QtGui.QLabel(self.gridLayoutWidget_5))
self.gridLayout_5.addWidget(self.labelTcase, i, 0, 1, 1)
self.labelTcase.setText(QtGui.QApplication.translate(“MainWindow”,str(i+1), None, QtGui.QApplication.UnicodeUTF8))
self.lineEditTcase.append(QtGui.QLineEdit(self.gridLayoutWidget_5))
self.gridLayout_5.addWidget(self.lineEditTcase, i, 1, 1, 1)
self.pushButtonTcase.append(QtGui.QPushButton(self.gridLayoutWidget_5))
self.pushButtonTcase.setText(QtGui.QApplication.translate(“MainWindow”, “Load Dump”, None, QtGui.QApplication.UnicodeUTF8))
self.gridLayout_5.addWidget(self.pushButtonTcase, i, 2, 1, 1)
self.scrollAreaWidgetContents_6.setGeometry(QtCore.QRect(0, 0, 285, 30*len(self.labelTcase)))
self.gridLayoutWidget_5.setGeometry(QtCore.QRect(0, 0, 285, 30*len(self.labelTcase)))

self.tabTcase.append(QtGui.QWidget())
self.plainTextEdits.append(QtGui.QTextEdit(self.tabTcase))
self.plainTextEdits.setGeometry(QtCore.QRect(10, 10, 391, 81))
self.tabWidget_3.addTab(self.tabTcase, str(i+1))

далее по изменению QSpinBox происходит эвент:

def AddTCase(self):
for i in xrange(len(self.plainTextEdits)):
self.gridLayout_5.removeWidget(self.labelTcase)
self.labelTcase.setParent(None)
del self.labelTcase
self.gridLayout_5.removeWidget(self.lineEditTcase)
self.lineEditTcase.setParent(None)
del self.lineEditTcase
self.gridLayout_5.removeWidget(self.pushButtonTcase)
self.pushButtonTcase.setParent(None)
del self.pushButtonTcase
self.scrollAreaWidgetContents_6.setGeometry(QtCore.QRect(0, 0, 285, 30*len(self.labelTcase)))
self.gridLayoutWidget_5.setGeometry(QtCore.QRect(0, 0, 285, 30*len(self.labelTcase)))

self.tabTcase.setParent(None)
del self.tabTcase

del self.plainTextEdits


self.labelTcase=
self.lineEditTcase=
self.pushButtonTcase=
self.tabTcase=
self.tabWidgetTcase=
self.plainTextEdits=

for i in xrange(self.spinBox.value()):

self.labelTcase.append(QtGui.QLabel(self.gridLayoutWidget_5))
self.gridLayout_5.addWidget(self.labelTcase, i, 0, 1, 1)
self.labelTcase.setText(QtGui.QApplication.translate(“MainWindow”,str(i+1), None, QtGui.QApplication.UnicodeUTF8))
self.lineEditTcase.append(QtGui.QLineEdit(self.gridLayoutWidget_5))
self.gridLayout_5.addWidget(self.lineEditTcase, i, 1, 1, 1)
self.pushButtonTcase.append(QtGui.QPushButton(self.gridLayoutWidget_5))
self.pushButtonTcase.setText(QtGui.QApplication.translate(“MainWindow”, “Load Dump”, None, QtGui.QApplication.UnicodeUTF8))
self.gridLayout_5.addWidget(self.pushButtonTcase, i, 2, 1, 1)
self.scrollAreaWidgetContents_6.setGeometry(QtCore.QRect(0, 0, 285, 30*len(self.labelTcase)))
self.gridLayoutWidget_5.setGeometry(QtCore.QRect(0, 0, 285, 30*len(self.labelTcase)))

self.tabTcase.append(QtGui.QWidget())
self.tabWidget_3.addTab(self.tabTcase, str(i+1))

self.plainTextEdits.append(QtGui.QTextEdit(self.tabTcase))
self.plainTextEdits.setGeometry(QtCore.QRect(10, 10, 391, 81))


Проблема в следующем:
Всё отрабатывает с виду нормально, если не считать, что в первую вкладку в таблисте не вставляется plainTextEdits. Есть подозрение, что криво удаляю и отвязываю от родителей, т.к. до евента всё работает так как надо .


P.S. Заранее спасибо
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