def test_45(self): triggered = "" class TriggerLog: triggered = "" def triggered1(self, b): if b: self.triggered += "1" else: self.triggered += "0" def triggered0(self): self.triggered += "*" # Ability to connect to signals while ignoring arguments and # to emit signals b = pya.QPushButton() log = TriggerLog() b.clicked(log.triggered1) self.assertEqual(log.triggered, "") b.emit_clicked(True) self.assertEqual(log.triggered, "1") b.emit_clicked(False) self.assertEqual(log.triggered, "10") b.clicked(log.triggered0) b.emit_clicked(True) self.assertEqual(log.triggered, "10*") b.emit_clicked(False) self.assertEqual(log.triggered, "10**") # We do the same with free functions since they behave differently in Python: global trigger_log trigger_log = "" def triggered_f0(): global trigger_log trigger_log += "x" def triggered_f1(b): global trigger_log if b: trigger_log += "+" else: trigger_log += "-" b.clicked(triggered_f1) self.assertEqual(trigger_log, "") b.emit_clicked(True) self.assertEqual(trigger_log, "+") b.emit_clicked(False) self.assertEqual(trigger_log, "+-") b.clicked(triggered_f0) b.emit_clicked(True) self.assertEqual(trigger_log, "+-x") b.emit_clicked(False) self.assertEqual(trigger_log, "+-xx")
def settings(self, parent=None): if parent is None: parent = self settingw = pya.QWidget(self) vbox = pya.QVBoxLayout(settingw) settingw.setLayout(vbox) self.settingspath = kgit.settings_path self.settings = {} scrollarea = pya.QScrollArea(self) optionswidget = pya.QWidget(self) scrollarea.setWidget(optionswidget) scrollarea.setWidgetResizable(True) optionvbox = pya.QVBoxLayout(optionswidget) categorydict = vars(kgit.settings) hbSplitter = pya.QHBoxLayout() vboxbuttons = pya.QVBoxLayout() vbox.addLayout(hbSplitter) hbSplitter.addWidget(scrollarea) hbSplitter.addLayout(vboxbuttons) resetButton = pya.QPushButton('Restore Defaults', self) resetButton.clicked(self.restoreDefaults) vboxbuttons.addWidget(resetButton) vboxbuttons.addStretch() # Repository Settings cat = 'Repository' groupbox = pya.QGroupBox(cat, self) optionvbox.addWidget(groupbox) vb = pya.QVBoxLayout(groupbox) self.settings['repository'] = {} repdic = self.settings['repository'] repdic['url'] = [ kgit.settings.repository.url(), kgit.settings.repository.url ] l = pya.QHBoxLayout() le = pya.QLineEdit(repdic['url'][0], self) def assignurl(text): repdic['url'][0] = text le.textChanged = assignurl la = pya.QLabel(kgit.settings.repository.url.description, self) l.addWidget(le) l.addWidget(la) vb.addLayout(l) l = pya.QHBoxLayout() repdic['autoupdate'] = [ kgit.settings.repository.autoupdate(), kgit.settings.repository.autoupdate ] b = pya.QCheckBox(kgit.settings.repository.autoupdate.description, groupbox) if repdic['autoupdate'][0]: b.setChecked(True) else: b.setChecked(False) def updateclicked(checked): repdic['autoupdate'][0] = checked b.toggled = updateclicked l.addWidget(b) vb.addLayout(l) # Log settings cat = "Logs" groupbox = pya.QGroupBox(cat, self) optionvbox.addWidget(groupbox) vb = pya.QVBoxLayout(groupbox) self.settings['logging'] = {} logdic = self.settings['logging'] logdic['filelvl'] = [ kgit.settings.logging.logfilelevel.value.index, kgit.settings.logging.logfilelevel ] logdic['streamlvl'] = [ kgit.settings.logging.logstreamlevel.value.index, kgit.settings.logging.logstreamlevel ] ## File Logging v = pya.QComboBox(self) l = pya.QHBoxLayout() for i in kgit.settings.logging.levels(): v.addItem(i) v.currentIndex = logdic['filelvl'][0] vb.addLayout(l) l.addWidget(v) d = pya.QLabel(kgit.settings.logging.logfilelevel.description, self) def logfileindexchanged(index): logdic['filelvl'][0] = index v.currentIndexChanged = logfileindexchanged l.addWidget(d) l.addStretch() ## Stream Logging v = pya.QComboBox(self) l = pya.QHBoxLayout() for i in kgit.settings.logging.levels(): v.addItem(i) v.currentIndex = logdic['streamlvl'][0] vb.addLayout(l) l.addWidget(v) d = pya.QLabel(kgit.settings.logging.logfilelevel.description, self) def logfileindexchanged(index): logdic['streamlvl'][0] = index v.logfileindexchanged = logfileindexchanged l.addWidget(d) l.addStretch() vbox.addStretch() save = pya.QPushButton("Save", self) save.clicked = self.save abort = pya.QPushButton("Cancel", self) abort.clicked = self.abort hbox = pya.QHBoxLayout() vbox.addLayout(hbox) hbox.addWidget(abort) hbox.addStretch() hbox.addWidget(save) optionvbox.addStretch() return settingw
def repoManager(self, parent=None): if parent is None: parent = self widget = pya.QWidget(self) vbox = pya.QVBoxLayout(widget) widget.setLayout(vbox) self.repolist = pya.QListWidget(widget) repos = kgit.getRepos() items = [] for r in repos: s = yaml.safe_load(r.read_text()) if '/' in s['name']: description = (f"Name:\t\t{s['name'].rsplit('/',1)[1]}\n" f"Project:\t\t{s['name'].rsplit('/',1)[0]}\n") else: description = f"Name:\t\t{s['name']}\n" description += "Location:\t\tlocal\n" if 'author' in s: description += f"Author:\t\t{s['author']}\n" pass description += f"Project URL:\t\t{s['url']}" if 'subdir' in s: description += f"\nProject Sub-URL:\t{s['subdir']}" item = pya.QListWidgetItem(description) item.whatsThis = s['name'] repo = git.Repo(r.parent) if repo.git.status('s'): pass items.append(item) self.repolist.addItem(item) remoterepos = kgit.getRemoteRepos() if remoterepos is not None: for r in remoterepos: if r['name'] in [i.whatsThis for i in items]: continue if '/' in r['name']: description = ( f"Name:\t\t{r['name'].rsplit('/',1)[1]}\n" f"Project:\t\t{r['name'].rsplit('/',1)[0]}\n") else: description = f"Name:\t\t{r['name']}\n" description += "Location:\t\tremote\n" description += f"Project URL:\t\t{r['url']}" if 'subdir' in r: description += f"\nProject Sub-URL:\t{r['subdir']}" item = pya.QListWidgetItem(description) item.whatsThis = r['name'] self.repolist.addItem(item) vbox.addWidget(self.repolist) buttonbox = pya.QHBoxLayout(widget) downloadbutton = pya.QPushButton("Download && Install", widget) downloadbutton.clicked = self.downloadRepos buttonbox.addWidget(downloadbutton) buttonbox.addStretch() removebutton = pya.QPushButton("Remove", widget) buttonbox.addWidget(removebutton) vbox.addLayout(buttonbox) return widget
def __init__(self, parent=None): super(ImageToLayout, self).__init__() self.setWindowTitle("Image to Layout") self.window_width = 800 self.window_height = 600 self.resize(self.window_width, self.window_height) self.layout = pya.QGridLayout(self) self.input_text = pya.QLineEdit(self) self.input_text.setAcceptDrops(True) self.input_text.setFont(pya.QFont('Times', 15)) self.input_text.setText("select image:") self.file_dialog = pya.QFileDialog(self) self.file_dialog.setFont(pya.QFont('Times', 10)) self.select_file_button = pya.QPushButton("select image", self) self.select_file_button.setFont(pya.QFont('Times', 15, pya.QFont.Bold)) self.select_file_button.clicked(self.select_file_button_clicked) self.convert_button = pya.QPushButton("convert to OASIS file", self) self.convert_button.setFont(pya.QFont('Times', 15, pya.QFont.Bold)) self.convert_button.clicked(self.covert_buttion_clicked) self.raw_image_label = pya.QLabel() self.raw_image_info_label = pya.QLabel("image size:") self.raw_image_info_label.setVisible(False) self.threshold_text = pya.QLineEdit(self) self.threshold_text.setAcceptDrops(True) self.threshold_text.setFont(pya.QFont('Times', 15)) self.threshold_text.setText("set threshold: 0 - 255") self.dbu_text = pya.QLineEdit(self) self.dbu_text.setAcceptDrops(True) self.dbu_text.setFont(pya.QFont('Times', 15)) self.dbu_text.setText("set DBU: ") self.inverse_checkbox = pya.QCheckBox("inverse", self) self.inverse_checkbox.setFont(pya.QFont('Times', 15)) self.progress_bar = pya.QProgressBar(self) self.layout.addWidget(self.input_text, 0, 0) self.layout.addWidget(self.select_file_button, 0, 1) self.layout.addWidget(self.raw_image_label, 1, 0, 3, 1) self.layout.addWidget(self.threshold_text, 1, 1) self.layout.addWidget(self.inverse_checkbox, 2, 1) self.layout.addWidget(self.dbu_text, 3, 1) self.layout.addWidget(self.raw_image_info_label, 4, 0) self.layout.addWidget(self.progress_bar, 5, 0) self.layout.addWidget(self.convert_button, 5, 1) self.setLayout(self.layout)
def __init__(self, parent=None): self.settingspath = kppc.settings_path self.vbox = pya.QVBoxLayout() self.setLayout(self.vbox) self.settings = {} self.setWindowTitle("KLayoutPhotonicPCells Settings") self.setMinimumWidth(300) vsize = len(vars(kppc.settings)) self.scrollarea = pya.QScrollArea(self) self.optionswidget = pya.QWidget(self) self.scrollarea.setWidget(self.optionswidget) self.scrollarea.setWidgetResizable(True) #self.vbox.addWidget(self.scrollarea) self.optionvbox = pya.QVBoxLayout(self.optionswidget) categorydict = vars(kppc.settings) hbSplitter = pya.QHBoxLayout() vboxbuttons = pya.QVBoxLayout() self.vbox.addLayout(hbSplitter) hbSplitter.addWidget(self.scrollarea) hbSplitter.addLayout(vboxbuttons) recompileButton = pya.QPushButton('Recompile', self) recompileButton.clicked(self.recompile) vboxbuttons.addWidget(recompileButton) resetButton = pya.QPushButton('Restore Defaults', self) resetButton.clicked(self.restoreDefaults) vboxbuttons.addWidget(resetButton) vboxbuttons.addStretch() for i, cat in enumerate(categorydict.keys()): groupbox = pya.QGroupBox(cat, self) self.optionvbox.addWidget(groupbox) vb = pya.QVBoxLayout(groupbox) self.settings[cat] = {} settingdict = vars(categorydict[cat]) for j, setting in enumerate(settingdict): if setting[0] == '_': continue opt = settingdict[setting] desc_str = f"_{setting}_DESC" if desc_str in settingdict: desc = settingdict[desc_str] else: desc = setting if isinstance(opt, bool): v = pya.QCheckBox(desc, self) vb.addWidget(v) v.toggeled = v.setChecked(opt) self.settings[cat][setting] = ( v, lambda x: bool(x.checkState.to_i())) elif isinstance(opt, int): l = pya.QHBoxLayout() vb.addLayout(l) t = pya.QLabel(desc, self) v = pya.QSpinBox(self) l.addWidget(v) l.addWidget(t) l.addStretch() v.value = opt minset = f"_{setting}_MIN" maxset = f"_{setting}_MAX" if minset in settingdict: v.minimum = settingdict[minset] if maxset in settingdict: v.maximum = settingdict[maxset] self.settings[cat][setting] = (v, lambda x: x.value) elif isinstance(opt, list): v = pya.QComboBox(self) l = pya.QHBoxLayout() index = int(opt[0]) strs = opt[1:] for i in strs: v.addItem(i) v.currentIndex = index vb.addLayout(l) l.addWidget(v) d = pya.QLabel(desc, self) l.addWidget(d) l.addStretch() self.settings[cat][setting] = ( v, lambda x, l=strs: [x.currentIndex] + l) else: continue self.vbox.addStretch() save = pya.QPushButton("Save", self) save.clicked = self.save abort = pya.QPushButton("Cancel", self) abort.clicked = self.abort self.hbox = pya.QHBoxLayout() self.vbox.addLayout(self.hbox) self.hbox.addWidget(abort) self.hbox.addStretch() self.hbox.addWidget(save)
def settings(self, parent=None): if parent is None: parent = self settingw = pya.QWidget(self) vbox = pya.QVBoxLayout(settingw) settingw.setLayout(vbox) self.settingspath = kgit.settings_path self.settings = {} scrollarea = pya.QScrollArea(self) optionswidget = pya.QWidget(self) scrollarea.setWidget(optionswidget) scrollarea.setWidgetResizable(True) optionvbox = pya.QVBoxLayout(optionswidget) categorydict = vars(kgit.settings) hbSplitter = pya.QHBoxLayout() vboxbuttons = pya.QVBoxLayout() vbox.addLayout(hbSplitter) hbSplitter.addWidget(scrollarea) hbSplitter.addLayout(vboxbuttons) resetButton = pya.QPushButton('Restore Defaults', self) resetButton.clicked(self.restoreDefaults) vboxbuttons.addWidget(resetButton) vboxbuttons.addStretch() # General Settings cat = 'Repository' groupbox = pya.QGroupBox(cat, self) optionvbox.addWidget(groupbox) vb = pya.QVBoxLayout(groupbox) self.settings['repository'] = {} repdic = self.settings['repository'] repdic['url'] = (kgit.settings.repository.url(), kgit.settings.repository.url) l = pya.QHBoxLayout() le = pya.QLineEdit(repdic['url'][0], self) la = pya.QLabel(kgit.settings.repository.url.description, self) l.addWidget(le) l.addWidget(la) vb.addLayout(l) # Log settings cat = "Logs" groupbox = pya.QGroupBox(cat, self) optionvbox.addWidget(groupbox) vb = pya.QVBoxLayout(groupbox) self.settings['logging'] = {} logdic = self.settings['logging'] logdic['filelvl'] = (kgit.settings.logging.logfilelevel.value.index, kgit.settings.logging.logfilelevel) logdic['streamlvl'] = ( kgit.settings.logging.logstreamlevel.value.index, kgit.settings.logging.logstreamlevel) ## File Logging v = pya.QComboBox(self) l = pya.QHBoxLayout() for i in kgit.settings.logging.levels(): v.addItem(i) v.currentIndex = logdic['filelvl'][0] vb.addLayout(l) l.addWidget(v) d = pya.QLabel(kgit.settings.logging.logfilelevel.description, self) l.addWidget(d) l.addStretch() ## Stream Logging v = pya.QComboBox(self) l = pya.QHBoxLayout() for i in kgit.settings.logging.levels(): v.addItem(i) v.currentIndex = logdic['streamlvl'][0] vb.addLayout(l) l.addWidget(v) d = pya.QLabel(kgit.settings.logging.logfilelevel.description, self) l.addWidget(d) l.addStretch() vbox.addStretch() save = pya.QPushButton("Save", self) save.clicked = self.save abort = pya.QPushButton("Cancel", self) abort.clicked = self.abort hbox = pya.QHBoxLayout() vbox.addLayout(hbox) hbox.addWidget(abort) hbox.addStretch() hbox.addWidget(save) optionvbox.addStretch() return settingw