Loading src/gui.py 100755 → 100644 +83 −74 Original line number Diff line number Diff line Loading @@ -57,110 +57,116 @@ class Ui(QtWidgets.QMainWindow): raise # Create right gui wcols = 3 wcount = 0 policy = QtWidgets.QSizePolicy.Policy gb_img:QtWidgets.QWidget = self.findChild(QtWidgets.QGroupBox, 'gb_img') policy = QtWidgets.QSizePolicy.Policy # add image container w = QtWidgets.QLabel(None) w.setObjectName("imageLabel") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)) gb_img.layout().addWidget(w, 0, 0, 1, 3) # add flags wcols = 3 wcount = 3+3 for k in config.keys(): widget = QtWidgets.QLabel(None) widget.setObjectName("imageLabel") widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Expanding, policy.Expanding)) gb_img.layout().addWidget(widget, 0, 0, 1, 3) wcount += 3 # add widgets for tconf in config: tconf:dict count = 0 cols = 2 try: tconf:dict = config[k] name = k.capitalize() # check basic define params if 'id' in tconf.keys(): id:str = tconf['id'] name = id.capitalize() if 'name' in tconf.keys(): name = tconf['name'] if 'type' not in tconf.keys(): print(f"type of {k}:{name} not specified") print(f"type of {id}:{name} not specified") continue # COMMENTBOX if tconf['type'] == 'text': gb = createGroupBox(name) gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Ignored)) gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Maximum, policy.Ignored)) w = QtWidgets.QPlainTextEdit(None) w.setObjectName("commentBox") #f"cm_{ename}") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)) w.setSizePolicy(QtWidgets.QSizePolicy(policy.Expanding, policy.Minimum)) w.setPlaceholderText(f"Press [{tconf['shortcut']}] to insert comments. Press [Enter] to save, and [Esc] to discard.") gb.layout().addWidget(w) # CHECKBOX elif tconf['type'] == 'checkbox': count = 0 cols = 2 if 'ncolumns' in tconf.keys(): cols = tconf['ncolumns'] gb = createGroupBox(name) gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Maximum)) gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Minimum, policy.Maximum)) for key in tconf['elements'].keys(): for element in tconf['elements']: try: ename, evalue = key, tconf['elements'][key] # add checkbox w = QtWidgets.QCheckBox(None) w.setObjectName(f"cb_{ename}") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)) addTexts(w, evalue, ename) addToolTip(w, evalue) widget = QtWidgets.QCheckBox(None) widget.setObjectName(f"cb_{element['id']}") widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed)) addCheckBoxTexts(widget, element) addToolTip(widget, element) gb.layout().addWidget(w,count//cols, count%cols) gb.layout().addWidget(widget, count//cols, count%cols) count += 1 except KeyError as e: print(e) # RADIOBUTTON TYPE elif tconf['type'] == 'radiobutton': count = 0 cols = 2 if 'ncolumns' in tconf.keys(): cols = tconf['ncolumns']*2 cols = tconf['ncolumns']*2 # *2 -> shortcut and name in 2 rows gb = createGroupBox(name) gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)) gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Preferred, policy.Preferred)) gbb = QtWidgets.QButtonGroup() gbb.setObjectName(f"gbb_{name.lower()}") gbb.setObjectName(f"gbb_{id}") for key in tconf['elements'].keys(): for element in tconf['elements']: element:dict try: ename, evalue = key, tconf['elements'][key] shortcut = '' if 'shortcut' in element.keys(): shortcut = element['shortcut'] # radiobutton w = QtWidgets.QRadioButton(None) w.setObjectName(f"rb_{ename}") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)) w.setShortcut(evalue['shortcut']) w.setText(f"{evalue['name']}") addToolTip(w, evalue) gbb.addButton(w) gb.layout().addWidget(w,count//cols, count%cols) widget = QtWidgets.QRadioButton(None) widget.setObjectName(f"rb_{element['id']}") widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed)) widget.setText(f"{element['name']}") widget.setShortcut(shortcut) addToolTip(widget, element) gbb.addButton(widget) gb.layout().addWidget(widget, count//cols, count%cols) count += 1 # shortcut label w = QtWidgets.QLabel(None) w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)) w.setText(f"[{evalue['shortcut']}]") gb.layout().addWidget(w,count//cols, count%cols) if shortcut != '': widget = QtWidgets.QLabel(None) widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Preferred, policy.Preferred)) widget.setText(f"[{shortcut}]") gb.layout().addWidget(widget, count//cols, count%cols) count += 1 except KeyError as e: print(e) if 'add_clear' in tconf.keys() and tconf['add_clear'] is True: w = QtWidgets.QPushButton(None) w.setObjectName(f"pb_clear") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)) widget = QtWidgets.QPushButton(None) widget.setObjectName(f"pb_clear") widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed)) text = f"Clear" if 'clear_shortcut' in tconf.keys(): text += f" [{tconf['clear_shortcut']}]" w.setText(text) #w.clicked.connect(self.clear_morphology_rb) gb.layout().addWidget(w, count//cols, count%cols, 1, cols) widget.setText(text) widget.clicked.connect(self.clear_morphology_rb) gb.layout().addWidget(widget, count//cols, count%cols, 1, cols) self.gbb = gbb else: print(f"{tconf['type']} not implemented") Loading Loading @@ -195,7 +201,6 @@ class Ui(QtWidgets.QMainWindow): for i, cb in enumerate(self.rbNames): self.rb[self.rbTypes[i]] = self.findChild(QtWidgets.QRadioButton, self.rbNames[i]) self.clear_morphology_rb() # find comment box: self.commentBox = self.findChild(QtWidgets.QPlainTextEdit, Loading Loading @@ -379,10 +384,14 @@ class Ui(QtWidgets.QMainWindow): def clear_morphology_rb(self): for i, cb in enumerate(self.rbNames): self.rb[self.rbTypes[i]].setAutoExclusive(False) self.rb[self.rbTypes[i]].setChecked(False) self.rb[self.rbTypes[i]].setAutoExclusive(True) # for i, cb in enumerate(self.rbNames): # self.rb[self.rbTypes[i]].setAutoExclusive(False) # self.rb[self.rbTypes[i]].setChecked(False) # self.rb[self.rbTypes[i]].setAutoExclusive(True) if self.gbb.checkedButton() is not None: self.gbb.setExclusive(False) self.gbb.checkedButton().setChecked(False) self.gbb.setExclusive(True) # Actions helpers Loading Loading @@ -465,10 +474,10 @@ class Ui(QtWidgets.QMainWindow): # Widget ops def createGroupBox(name:str) -> QtWidgets.QGroupBox: def newGroupBox(id:str, name:str, policy:QtWidgets.QSizePolicy) -> QtWidgets.QGroupBox: gb = QtWidgets.QGroupBox(name) gb.setObjectName(f"gb_{name.lower()}") #gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Ignored)) gb.setObjectName(f"gb_{id}") gb.setSizePolicy(policy) #gb.setMinimumSize(50, 150) gb.setLayout(QtWidgets.QGridLayout()) return gb Loading @@ -479,18 +488,18 @@ def addToolTip(widget: QtWidgets.QWidget, element:dict) -> None: except KeyError as e: print(e) def addTexts(widget: QtWidgets.QWidget, element:dict, element_key:str) -> None: name = None shortcut = None def addCheckBoxTexts(widget: QtWidgets.QCheckBox, element:dict) -> None: id, name, shortcut = None, None, None try: id = element['id'] name = element['name'] shortcut = element['shortcut'] except KeyError as e: if name is None: name = element_key.capitalize() name = id.capitalize() print(e) finally: text = f"{name}" text = name if shortcut is not None: widget.setShortcut(shortcut) text = f"[{shortcut}] {name}" Loading Loading
src/gui.py 100755 → 100644 +83 −74 Original line number Diff line number Diff line Loading @@ -57,110 +57,116 @@ class Ui(QtWidgets.QMainWindow): raise # Create right gui wcols = 3 wcount = 0 policy = QtWidgets.QSizePolicy.Policy gb_img:QtWidgets.QWidget = self.findChild(QtWidgets.QGroupBox, 'gb_img') policy = QtWidgets.QSizePolicy.Policy # add image container w = QtWidgets.QLabel(None) w.setObjectName("imageLabel") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)) gb_img.layout().addWidget(w, 0, 0, 1, 3) # add flags wcols = 3 wcount = 3+3 for k in config.keys(): widget = QtWidgets.QLabel(None) widget.setObjectName("imageLabel") widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Expanding, policy.Expanding)) gb_img.layout().addWidget(widget, 0, 0, 1, 3) wcount += 3 # add widgets for tconf in config: tconf:dict count = 0 cols = 2 try: tconf:dict = config[k] name = k.capitalize() # check basic define params if 'id' in tconf.keys(): id:str = tconf['id'] name = id.capitalize() if 'name' in tconf.keys(): name = tconf['name'] if 'type' not in tconf.keys(): print(f"type of {k}:{name} not specified") print(f"type of {id}:{name} not specified") continue # COMMENTBOX if tconf['type'] == 'text': gb = createGroupBox(name) gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Ignored)) gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Maximum, policy.Ignored)) w = QtWidgets.QPlainTextEdit(None) w.setObjectName("commentBox") #f"cm_{ename}") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)) w.setSizePolicy(QtWidgets.QSizePolicy(policy.Expanding, policy.Minimum)) w.setPlaceholderText(f"Press [{tconf['shortcut']}] to insert comments. Press [Enter] to save, and [Esc] to discard.") gb.layout().addWidget(w) # CHECKBOX elif tconf['type'] == 'checkbox': count = 0 cols = 2 if 'ncolumns' in tconf.keys(): cols = tconf['ncolumns'] gb = createGroupBox(name) gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Maximum)) gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Minimum, policy.Maximum)) for key in tconf['elements'].keys(): for element in tconf['elements']: try: ename, evalue = key, tconf['elements'][key] # add checkbox w = QtWidgets.QCheckBox(None) w.setObjectName(f"cb_{ename}") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)) addTexts(w, evalue, ename) addToolTip(w, evalue) widget = QtWidgets.QCheckBox(None) widget.setObjectName(f"cb_{element['id']}") widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed)) addCheckBoxTexts(widget, element) addToolTip(widget, element) gb.layout().addWidget(w,count//cols, count%cols) gb.layout().addWidget(widget, count//cols, count%cols) count += 1 except KeyError as e: print(e) # RADIOBUTTON TYPE elif tconf['type'] == 'radiobutton': count = 0 cols = 2 if 'ncolumns' in tconf.keys(): cols = tconf['ncolumns']*2 cols = tconf['ncolumns']*2 # *2 -> shortcut and name in 2 rows gb = createGroupBox(name) gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)) gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Preferred, policy.Preferred)) gbb = QtWidgets.QButtonGroup() gbb.setObjectName(f"gbb_{name.lower()}") gbb.setObjectName(f"gbb_{id}") for key in tconf['elements'].keys(): for element in tconf['elements']: element:dict try: ename, evalue = key, tconf['elements'][key] shortcut = '' if 'shortcut' in element.keys(): shortcut = element['shortcut'] # radiobutton w = QtWidgets.QRadioButton(None) w.setObjectName(f"rb_{ename}") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)) w.setShortcut(evalue['shortcut']) w.setText(f"{evalue['name']}") addToolTip(w, evalue) gbb.addButton(w) gb.layout().addWidget(w,count//cols, count%cols) widget = QtWidgets.QRadioButton(None) widget.setObjectName(f"rb_{element['id']}") widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed)) widget.setText(f"{element['name']}") widget.setShortcut(shortcut) addToolTip(widget, element) gbb.addButton(widget) gb.layout().addWidget(widget, count//cols, count%cols) count += 1 # shortcut label w = QtWidgets.QLabel(None) w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)) w.setText(f"[{evalue['shortcut']}]") gb.layout().addWidget(w,count//cols, count%cols) if shortcut != '': widget = QtWidgets.QLabel(None) widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Preferred, policy.Preferred)) widget.setText(f"[{shortcut}]") gb.layout().addWidget(widget, count//cols, count%cols) count += 1 except KeyError as e: print(e) if 'add_clear' in tconf.keys() and tconf['add_clear'] is True: w = QtWidgets.QPushButton(None) w.setObjectName(f"pb_clear") w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)) widget = QtWidgets.QPushButton(None) widget.setObjectName(f"pb_clear") widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed)) text = f"Clear" if 'clear_shortcut' in tconf.keys(): text += f" [{tconf['clear_shortcut']}]" w.setText(text) #w.clicked.connect(self.clear_morphology_rb) gb.layout().addWidget(w, count//cols, count%cols, 1, cols) widget.setText(text) widget.clicked.connect(self.clear_morphology_rb) gb.layout().addWidget(widget, count//cols, count%cols, 1, cols) self.gbb = gbb else: print(f"{tconf['type']} not implemented") Loading Loading @@ -195,7 +201,6 @@ class Ui(QtWidgets.QMainWindow): for i, cb in enumerate(self.rbNames): self.rb[self.rbTypes[i]] = self.findChild(QtWidgets.QRadioButton, self.rbNames[i]) self.clear_morphology_rb() # find comment box: self.commentBox = self.findChild(QtWidgets.QPlainTextEdit, Loading Loading @@ -379,10 +384,14 @@ class Ui(QtWidgets.QMainWindow): def clear_morphology_rb(self): for i, cb in enumerate(self.rbNames): self.rb[self.rbTypes[i]].setAutoExclusive(False) self.rb[self.rbTypes[i]].setChecked(False) self.rb[self.rbTypes[i]].setAutoExclusive(True) # for i, cb in enumerate(self.rbNames): # self.rb[self.rbTypes[i]].setAutoExclusive(False) # self.rb[self.rbTypes[i]].setChecked(False) # self.rb[self.rbTypes[i]].setAutoExclusive(True) if self.gbb.checkedButton() is not None: self.gbb.setExclusive(False) self.gbb.checkedButton().setChecked(False) self.gbb.setExclusive(True) # Actions helpers Loading Loading @@ -465,10 +474,10 @@ class Ui(QtWidgets.QMainWindow): # Widget ops def createGroupBox(name:str) -> QtWidgets.QGroupBox: def newGroupBox(id:str, name:str, policy:QtWidgets.QSizePolicy) -> QtWidgets.QGroupBox: gb = QtWidgets.QGroupBox(name) gb.setObjectName(f"gb_{name.lower()}") #gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Ignored)) gb.setObjectName(f"gb_{id}") gb.setSizePolicy(policy) #gb.setMinimumSize(50, 150) gb.setLayout(QtWidgets.QGridLayout()) return gb Loading @@ -479,18 +488,18 @@ def addToolTip(widget: QtWidgets.QWidget, element:dict) -> None: except KeyError as e: print(e) def addTexts(widget: QtWidgets.QWidget, element:dict, element_key:str) -> None: name = None shortcut = None def addCheckBoxTexts(widget: QtWidgets.QCheckBox, element:dict) -> None: id, name, shortcut = None, None, None try: id = element['id'] name = element['name'] shortcut = element['shortcut'] except KeyError as e: if name is None: name = element_key.capitalize() name = id.capitalize() print(e) finally: text = f"{name}" text = name if shortcut is not None: widget.setShortcut(shortcut) text = f"[{shortcut}] {name}" Loading