Форум сайта python.su
Имеется папка в которой лежат файлы. Далее считываем кол-во файлов и генерим энное кол-во чекбоксов в цикле (по кол-ву файлов)
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
Отредактировано (Июль 8, 2010 15:26:02)
Офлайн
GeleosКоторый создан последним? :)
но отрабатывает только один чекбокс
GeleosВ self.name вы каждый раз присваиваете новый чекбокс, соответственно и обращаетесь только к нему в дальнейщем.
self.name = QtGui.QCheckBox(self.gridLayoutWidget)
Офлайн
hellsladeУгу =\
Который создан последним? smile
hellsladeНо ведь по идее я меняю параметр name
В self.name вы каждый раз присваиваете новый чекбокс, соответственно и обращаетесь только к нему в дальнейщем.
hellsladeА можно с примерами? =)
Можно записывать все чекбоксы в список, либо получить все дочерние элементы виджета и если это чекбокс – изменить состояние.
Офлайн
Что мешает делать self.name.append(…), или self.name += , конечно же, предварительно объявив список, и затем использовать for chkbox in self.name:?
Офлайн
Geleosможете попробовать примерно так:
Но ведь по идее я меняю параметр name
name = ‘checkBox’ + ‘_’ +str(i)
self.name = QtGui.QCheckBox(self.gridLayoutWidget)
Офлайн
Спасибо огромное! помогло =)
Офлайн
Теперь новая головная боль…
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!
Офлайн
Geleos
Должен быть ексепшн, Вы его видели? он вам ничего не подсказал?
Geleosвиноват del self.checkBoxs
что самое странное удаляется ровно половина чекбоксов =\ я так понимаю виноваты каким то боком:
self.gridLayout.removeWidget(self.checkBoxs)
self.checkBoxs.setParent(None)
del self.checkBoxs
Офлайн
После цикла self.chekBoxs = и всё.
Офлайн
И снова здравствуйте =) Спасибо, что помогаете в решении моих проблем. Вот ещё 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. Заранее спасибо
Офлайн