import sys, os from PyQt4.QtGui import * from PyQt4.QtCore import * class ButtonArea(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.label_names = [] self.label_properties = {} self.properties = {} self.last_checked_label = None def create_button(self, button_name): button = QPushButton(button_name) button.setFlat(True) button.setCheckable(True) button.clicked.connect(self.clickedButton) return button def update_label_buttons(self): label_vlayout = self.create_choice_list("Labels") self.label_buttongroup = QButtonGroup() for label_name in self.label_names: button = QPushButton(label_name) button.setFlat(True) button.setCheckable(True) button.clicked.connect(self.clickedLabelButton) label_vlayout.addWidget(button) self.label_buttongroup.addButton(button) if label_name == self.last_checked_label: button.setChecked(True) self.hlayout = QHBoxLayout() self.hlayout.addLayout(label_vlayout) self.setLayout(self.hlayout) def update_buttons(self): layout = self.hlayout.takeAt(1) dynamic_hlayout = QHBoxLayout() if self.last_checked_label != None: for key in self.label_properties[self.last_checked_label].keys(): if key in ["type", "class"]: continue vlayout = self.create_choice_list(key) buttongroup = QButtonGroup() for value in self.properties[key]: button = self.create_button(value) vlayout.addWidget(button) buttongroup.addButton(button) dynamic_hlayout.addLayout(vlayout) self.hlayout.addLayout(dynamic_hlayout) self.update() self.updateGeometry() def add_label(self, label_name, properties = {}): self.label_names.append(label_name) self.label_properties[label_name] = properties for key, value in properties.iteritems(): if self.properties.has_key(key): self.properties[key] |= set(value) else: self.properties[key] = set(value) def get_checked_label_button(self): return self.label_buttongroup.checkedButton() def create_choice_list(self, list_name, elements = []): vlayout = QVBoxLayout() vlayout.setSpacing(0) #vlayout.setMargin(0) #vlayout.setContentsMargins(0, 0, 0, 0) vlayout.addWidget(QLabel("