terabayt
скинуть код
Вот обрезанный рабочий вариант.
# coding=utf-8
import sys
from PyQt4 import QtCore, QtGui
class Tuner(QtGui.QWidget):
def __init__(self,*args):
QtGui.QWidget.__init__(self,*args)
self.setWindowTitle(u'Тест')
boxlay = QtGui.QHBoxLayout(self)
frame = QtGui.QFrame(self)
gridlay = QtGui.QGridLayout(frame)
self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.MSWindowsFixedSizeDialogHint)
# Базовый список словарей, загружается парсером(длина неизвестна)
self.actor_classes = [{u'one':u'Один'}, {u'two':u'Два'}, {u'three':u'Три'}]
# Текущие настройки, загружаются парсером
self.actor = [u'one',u'three']
# Списки чеков и методов(создаётся с запасом)
self.actor_class_0 = self.actor_class_1 = self.actor_class_2 = self.actor_class_3 = None
self.actor_class = [self.actor_class_0,self.actor_class_1,self.actor_class_2,self.actor_class_3]
self.changeActor = [self.changeActor_0,self.changeActor_1,self.changeActor_2,self.changeActor_3]
for index_actor in range(len(self.actor_class)):
if index_actor == len(self.actor_classes): break
# Создаём чекбокс
self.actor_class[index_actor] = QtGui.QCheckBox(self.actor_classes[index_actor].values()[0], frame)
if self.actor_classes[index_actor].keys()[0] in self.actor: self.actor_class[index_actor].setCheckState(QtCore.Qt.Checked)
gridlay.addWidget(self.actor_class[index_actor],0,index_actor)
# Посылаем сигнал
self.connect(self.actor_class[index_actor], QtCore.SIGNAL('stateChanged(int)'), self.changeActor[index_actor])
boxlay.addWidget(frame)
def changeActor_0(self,value):
if value:
actors = []
for actor in self.actor_classes:
if actor.keys()[0] in self.actor or actor.keys()[0] == self.actor_classes[0].keys()[0]:
actors.append(actor.keys()[0])
self.actor = actors
else:
self.actor.remove(self.actor_classes[0].keys()[0])
print self.actor
def changeActor_1(self,value):
if value:
actors = []
for actor in self.actor_classes:
if actor.keys()[0] in self.actor or actor.keys()[0] == self.actor_classes[1].keys()[0]:
actors.append(actor.keys()[0])
self.actor = actors
else:
self.actor.remove(self.actor_classes[1].keys()[0])
print self.actor
def changeActor_2(self,value):
if value:
actors = []
for actor in self.actor_classes:
if actor.keys()[0] in self.actor or actor.keys()[0] == self.actor_classes[2].keys()[0]:
actors.append(actor.keys()[0])
self.actor = actors
else:
self.actor.remove(self.actor_classes[2].keys()[0])
print self.actor
def changeActor_3(self,value):pass
app = QtGui.QApplication(sys.argv)
window = Tuner()
window.show()
sys.exit(app.exec_())
Кликая по чекбоксам, в консоли будет показываться, как изменяются настройки.
P.S. проблему решила, вместо отлавливания от какого чекбокса поступил сигнал, проверяю статус всех элементов
# coding=utf-8
import sys
from PyQt4 import QtCore, QtGui
new = 'some_name'
globals()[new] = 'some_value'
print some_name
class Tuner(QtGui.QWidget):
def __init__(self,*args):
QtGui.QWidget.__init__(self,*args)
self.setWindowTitle(u'Тест')
boxlay = QtGui.QHBoxLayout(self)
frame = QtGui.QFrame(self)
gridlay = QtGui.QGridLayout(frame)
self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.MSWindowsFixedSizeDialogHint)
# Базовый список словарей, загружается парсером(длина неизвестна)
self.actor_classes = [{u'one':u'Один'}, {u'two':u'Два'}, {u'three':u'Три'}]
# Текущие настройки, загружаются парсером
self.actor = [u'one',u'three']
# Списки чеков и методов(создаётся с запасом)
self.actor_class_0 = self.actor_class_1 = self.actor_class_2 = self.actor_class_3 = None
self.actor_class = [self.actor_class_0,self.actor_class_1,self.actor_class_2,self.actor_class_3]
for index_actor in range(len(self.actor_class)):
if index_actor == len(self.actor_classes): break
# Создаём чекбокс
self.actor_class[index_actor] = QtGui.QCheckBox(self.actor_classes[index_actor].values()[0], frame)
if self.actor_classes[index_actor].keys()[0] in self.actor: self.actor_class[index_actor].setCheckState(QtCore.Qt.Checked)
gridlay.addWidget(self.actor_class[index_actor],0,index_actor)
# Посылаем сигнал
self.connect(self.actor_class[index_actor], QtCore.SIGNAL('stateChanged(int)'), self.changeActor)
boxlay.addWidget(frame)
def changeActor(self):
actors = []
for index_actor in range(len(self.actor_class)):
if index_actor == len(self.actor_classes): break
if self.actor_class[index_actor].isChecked():
actors.append(self.actor_classes[index_actor].keys()[0])
self.actor = actors
print self.actor
app = QtGui.QApplication(sys.argv)
window = Tuner()
window.show()
sys.exit(app.exec_())