У меня есть всплывающее окно, в котором оно читает список параметров и заполняет его в групповые поля и флажки.
У меня есть выборка, в которой он содержит следующие данные:
my_selection = {'drinks': ['coffee'], 'snacks': ['m&m']}
и я пытаюсь получить опции - coffee
и - m&m
отмечены во всплывающем окне.
Однако мой выбор может варьироваться, то есть itemA может иметь один из drinks
элементов, и если я выберу itemB (itemA больше не будет выделен), он может иметь элемент из drinks
и 2 элемента в snacks
и я хотел убедиться, что отмечена правильная опция, в случае, если существуют одинаковые наименования предметов, но в разных категориях или наоборот.
Я попытался вставить регистр выбора в класс следующим образом:
class FormWindow(QtGui.QWidget):
def __init__(self, main_items, my_selection, parent=None, callback=None):
...
if my_selection:
for k, v in my.items():
for i in v:
if sub_chk.text() == i:
sub_chk.setChecked(True)
Проверяется только последний найденный элемент, в этом случае учитываются только элементы в Snacks
.
import sys
from PyQt4 import QtGui, QtCore
from collections import defaultdict
class FormWindow(QtGui.QWidget):
def __init__(self, main_items, parent=None, callback=None):
super(FormWindow, self).__init__(parent=parent)
self.callback = callback
layout = QtGui.QVBoxLayout()
self.checkbox_options = []
self.menu_tag_dict = defaultdict(set)
for main_name, sub_name in main_items.items():
# Set the main item
groupbox = QtGui.QGroupBox(self)
groupbox.setTitle(main_name.title())
groupbox.setLayout(QtGui.QVBoxLayout())
layout.addWidget(groupbox)
if sub_name:
# sub_txt = [(action.text()) for action in sub_name]
sub_txt = [action for action in sub_name]
# Creates QCheckbox for each option
for s in sub_txt:
sub_chk = QtGui.QCheckBox(s)
self.checkbox_options.append(sub_chk)
groupbox.layout().addWidget(sub_chk)
layout.addStretch()
self.setLayout(layout)
self.setWindowTitle('Form Checking')
self.show()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main_items = {'drinks': ['coffee', 'tea', 'water'], 'snacks': ['biscuits', 'm&m']}
my_win = FormWindow(main_items)
sys.exit(app.exec_())
# Example1 of what my selection will return
my_selection = {'drinks': ['coffee'], 'snacks': ['m&m']}
# Example2 of what my selection will return
my_selection = {'drinks': ['water', 'coffee'], 'snacks': ['biscuits']}