def create_button(self, parent, label=""): """ Returns an adapted button. """ control = QPushButton(check_parent(parent)) control.setText(label) control.setAutoDefault(False) return control_adapter_for(control)
def qmy_button(parent, todo, display_text, the_row=None, the_col=None): new_but = QPushButton(display_text) new_but.setContentsMargins(1, 1, 1, 1) new_but.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) new_but.setFont(QFont('SansSerif', 12)) new_but.setAutoDefault(False) new_but.setDefault(False) if the_row is not None: parent.addWidget(new_but, the_row, the_col) else: parent.addWidget(new_but) new_but.clicked.connect(todo) return new_but
def __init__(self, display_text, todo, arg_dict, help_instance = None, max_field_size = None): super(qButtonWithArgumentsClass, self).__init__() self.todo = todo self.setContentsMargins(1, 1, 1, 1) newframe = QHBoxLayout() self.setLayout(newframe) newframe.setSpacing(1) newframe.setContentsMargins(1, 1, 1, 1) new_but = QPushButton(display_text) new_but.setContentsMargins(1, 1, 1, 1) new_but.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) new_but.setFont(regular_font) new_but.setAutoDefault(False) new_but.setDefault(False) newframe.addWidget(new_but) new_but.clicked.connect(self.doit) self.arg_hotfields = [] for k in sorted(arg_dict.keys()): if isinstance(arg_dict[k], list): the_list = arg_dict[k] if len(the_list) == 0: qe = qHotField(k, str, "", the_list, pos = "top", max_size = max_field_size) else: qe = qHotField(k, type(arg_dict[k][0]), arg_dict[k][0], the_list, pos = "top", max_size = max_field_size) else: qe = qHotField(k, type(arg_dict[k]), arg_dict[k], pos = "top", max_size = max_field_size) newframe.addWidget(qe) newframe.setAlignment(qe, QtCore.Qt.AlignLeft) self.arg_hotfields.append(qe) newframe.addStretch() if hasattr(todo, "help_text"): if (help_instance == None): print "No help instance specified." else: help_button_widget = help_instance.create_button(display_text, todo.help_text) newframe.addWidget(help_button_widget) QtGui.QToolTip.setFont(regular_font) self.setToolTip(todo.help_text)
def __init__(self, display_text, todo, arg_dict, help_instance = None): super(qOldButtonWithArgumentsClass, self).__init__() self.todo = todo self.arg_dict = arg_dict # self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.setContentsMargins(1, 1, 1, 1) newframe = QHBoxLayout() self.setLayout(newframe) newframe.setSpacing(1) newframe.setContentsMargins(1, 1, 1, 1) new_but = QPushButton(display_text) new_but.setContentsMargins(1, 1, 1, 1) new_but.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) new_but.setFont(QFont('SansSerif', 12)) new_but.setAutoDefault(False) new_but.setDefault(False) newframe.addWidget(new_but) new_but.clicked.connect(self.doit) for k in sorted(arg_dict.keys()): if isinstance(self.arg_dict[k], list): the_list = self.arg_dict[k] self.arg_dict[k] = "" qe = qLabeledPopup(k, self.arg_dict, the_list, "top") elif isinstance(self.arg_dict[k], bool): qe = qLabeledCheck(k, self.arg_dict, "top") else: qe = qLabeledEntry(k, self.arg_dict, "top") newframe.addWidget(qe) newframe.addStretch() if hasattr(todo, "help_text"): if (help_instance == None): print "No help instance specified." else: help_button_widget = help_instance.create_button(display_text, todo.help_text) newframe.addWidget(help_button_widget)
class AddPresetDialog(QDialog): def __init__(self, parent=None): super(AddPresetDialog, self).__init__(parent) self.setWindowTitle(self.tr("Add IMAP Server Preset")) self.resize(388, 125) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setGeometry(QRect(184, 80, 181, 32)) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setCenterButtons(False) self.save_btn = QPushButton("&Save") self.save_btn.setDefault(True) self.save_btn.setEnabled(False) self.cancel_btn = QPushButton(self.tr("&Cancel")) self.cancel_btn.setCheckable(True) self.cancel_btn.setAutoDefault(False) self.buttonBox.addButton(self.save_btn, QDialogButtonBox.AcceptRole) self.buttonBox.addButton(self.cancel_btn, QDialogButtonBox.RejectRole) self.preset_name_le = QLineEdit(self) self.preset_name_le.setGeometry(QRect(134, 12, 231, 20)) self.lb_name = QLabel(self) self.lb_name.setGeometry(QRect(14, 16, 58, 14)) self.lb_name.setText(self.tr("Name")) self.server_address_le = QLineEdit(self) self.server_address_le.setGeometry(QRect(134, 45, 231, 20)) self.lb_server = QLabel(self) self.lb_server.setGeometry(QRect(14, 48, 81, 16)) self.lb_server.setText(self.tr("IMAP Server")) self.lb_info = QLabel(self) self.lb_info.setGeometry(QRect(14, 90, 161, 16)) self.lb_info.setText(self.tr("(SSL is always on.)")) self.buttonBox.accepted.connect(self.act_save_preset) self.buttonBox.rejected.connect(self.reject) self.init_settings() self.settings.beginGroup("Server Presets") self.presetNameList = [] for preset in self.settings.allKeys(): self.presetNameList.append(preset) self.settings.endGroup() self.preset_name_le.textChanged.connect(self.check_preset_name_availability) self.server_address_le.textChanged.connect(self.check_server_address) # --------------------------------------------------------------------- def init_settings(self): QCoreApplication.setOrganizationName("erdinc.me") QCoreApplication.setOrganizationDomain("erdinc.me") QCoreApplication.setApplicationName("IMAPLinkParser") self.settings = QSettings() # self.settings.clear() # --------------------------------------------------------------------- @Slot() def act_save_preset(self): try: self.settings.beginGroup("Server Presets") self.settings.setValue(self.preset_name_le.text(), self.server_address_le.text()) self.settings.endGroup() except: self.reject() self.accept() # --------------------------------------------------------------------- @Slot(unicode) def check_preset_name_availability(self, text): if text in self.presetNameList: self.save_btn.setEnabled(False) self.lb_info.setText('<p style="color:red;">Preset name exists!') else: if self.server_address_le.text() and self.preset_name_le.text(): self.save_btn.setEnabled(True) self.lb_info.setText(self.tr("(SSL is always on.)")) else: self.save_btn.setEnabled(False) self.lb_info.setText(self.tr("(SSL is always on.)")) # --------------------------------------------------------------------- @Slot(unicode) def check_server_address(self): if self.server_address_le.text(): preset = self.preset_name_le.text() if preset and preset not in self.presetNameList: self.save_btn.setEnabled(True) else: self.save_btn.setEnabled(False)
def setupUi(self, editTeamDialog): editTeamDialog.setObjectName("editTeamDialog") editTeamDialog.setMinimumSize(QSize(500, 550)) editTeamDialog.setMaximumSize(QSize(500, 550)) self.mainVerticalLayout = QVBoxLayout(editTeamDialog) self.topLayout = QHBoxLayout() self.teamUserInfoLayout = QGridLayout() managerLabel = QLabel() self.teamUserInfoLayout.addWidget(managerLabel, 0, 0) teamLabel = QLabel() self.teamUserInfoLayout.addWidget(teamLabel, 1, 0) self.teamNameEdit = QLineEdit() self.teamNameEdit.setMinimumWidth(200) self.teamUserInfoLayout.addWidget(self.teamNameEdit, 1, 1) emailLabel = QLabel() self.teamUserInfoLayout.addWidget(emailLabel, 2, 0) self.emailEdit = QLineEdit() self.teamUserInfoLayout.addWidget(self.emailEdit, 2, 1) self.topLayout.addLayout(self.teamUserInfoLayout) self.topLayout.addStretch() self.mainVerticalLayout.addLayout(self.topLayout) self.mainVerticalLayout.addItem(QSpacerItem(0, 15)) #self.mainVerticalLayout.addStretch() self.formationLayout = QHBoxLayout() self.formationRadioButtons = RadioButtonGroup("Formation", Formation.formations) self.formationRadioButtons.setFlat(True) self.formationLayout.addWidget(self.formationRadioButtons) self.formationLayout.addStretch() self.mainVerticalLayout.addLayout(self.formationLayout) self.playersGroupBox = QGroupBox() self.gridLayout = QGridLayout(self.playersGroupBox) self.goalkeeperLabel = QLabel(self.playersGroupBox) self.gridLayout.addWidget(self.goalkeeperLabel, 0, 0) self.positionLabels = [QLabel(self.playersGroupBox) for i in range(11)] self.searchBoxes = [QLineEdit(self.playersGroupBox) for i in range(11)] self.selections = [QComboBox(self.playersGroupBox) for i in range(11)] self.clubLabels = [QLabel(self.playersGroupBox) for i in range(11)] self.valueLabels = [QLabel(self.playersGroupBox) for i in range(11)] for i, positionLabel in enumerate(self.positionLabels): self.gridLayout.addWidget(positionLabel, i, 0) for i, searchBox in enumerate(self.searchBoxes): searchBox.setToolTip("Search for a player by code or name") self.gridLayout.addWidget(searchBox, i, 1) searchBox.returnPressed.connect(partial(self.playerSearch, i)) for i, selection in enumerate(self.selections): selection.setToolTip("Select a player") selection.setSizeAdjustPolicy(QComboBox.AdjustToContentsOnFirstShow) selection.setCurrentIndex(-1) self.gridLayout.addWidget(selection, i, 2) clubWidth = self.clubLabels[0].fontMetrics().width("Wolverhampton Wanderers") for i, clubLabel in enumerate(self.clubLabels): clubLabel.setFixedWidth(clubWidth) self.gridLayout.addWidget(clubLabel, i, 3) valueWidth = self.valueLabels[0].fontMetrics().width("0.0") for i, valueLabel in enumerate(self.valueLabels): valueLabel.setFixedWidth(valueWidth) self.gridLayout.addWidget(valueLabel, i, 4) self.mainVerticalLayout.addWidget(self.playersGroupBox) self.mainVerticalLayout.addItem(QSpacerItem(0, 15)) self.totalCostLayout = QHBoxLayout() self.totalCostLabel = QLabel() self.totalCostLayout.addWidget(self.totalCostLabel) self.mainVerticalLayout.addLayout(self.totalCostLayout) self.mainVerticalLayout.addItem(QSpacerItem(0, 15)) self.buttonLayout = QHBoxLayout() okButton = QPushButton("OK") okButton.setAutoDefault(False) cancelButton = QPushButton("Cancel") cancelButton.setAutoDefault(False) self.buttonLayout.addWidget(okButton) self.buttonLayout.addWidget(cancelButton) buttonSpacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) self.buttonLayout.addItem(buttonSpacer) self.mainVerticalLayout.addLayout(self.buttonLayout) okButton.clicked.connect(editTeamDialog.accept) cancelButton.clicked.connect(editTeamDialog.reject) managerLabel.setText("Manager") teamLabel.setText("Team Name") emailLabel.setText("Email") self.playersGroupBox.setTitle("Players") for formationRadioButton in self.formationRadioButtons: formationRadioButton.clicked.connect(partial(self.formationChanged, str(formationRadioButton.text()))) self.totalCostLabel.setText("Total Cost")
def __init__(self, parent=None): super(AddAccountDialog, self).__init__(parent) # self.setAttribute(Qt.WA_DeleteOnClose) lbMinWidth = 150 leMinWidth = 200 self.isMatch = False # self.keyDialog.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.setWindowTitle("Create a new account preset") baseLayout = QVBoxLayout(self) nameLayout = QHBoxLayout() keyLayout = QHBoxLayout() keyConfirmLayout = QHBoxLayout() baseLayout.addLayout(nameLayout) baseLayout.addLayout(keyLayout) baseLayout.addLayout(keyConfirmLayout) lb_name = QLabel('Account Preset Name: ', self) lb_name.setMinimumWidth(lbMinWidth) self.name_le = QLineEdit(self) self.name_le.setMinimumWidth(leMinWidth) nameLayout.addWidget(lb_name) nameLayout.addWidget(self.name_le) lb_key = QLabel('Encryption Key: ', self) lb_key.setMinimumWidth(lbMinWidth) self.key_le = QLineEdit(self) # self.key_le.setPlaceholderText('Encryption Key') self.key_le.setEchoMode(self.key_le.Password) self.key_le.setMinimumWidth(leMinWidth) keyLayout.addWidget(lb_key) keyLayout.addWidget(self.key_le) lb_keyConfirm = QLabel('Confirm Key: ', self) lb_keyConfirm.setMinimumWidth(lbMinWidth) self.keyConfirm_le = QLineEdit(self) # self.keyConfirm_le.setPlaceholderText('Encryption Key') self.keyConfirm_le.setEchoMode(self.key_le.Password) self.keyConfirm_le.setMinimumWidth(leMinWidth) keyConfirmLayout.addWidget(lb_keyConfirm) keyConfirmLayout.addWidget(self.keyConfirm_le) self.okBtn = QPushButton(self.tr("&Ok")) self.okBtn.setDefault(True) self.okBtn.setEnabled(False) cancelBtn = QPushButton(self.tr("&Cancel")) cancelBtn.setAutoDefault(False) buttonBox = QDialogButtonBox(Qt.Horizontal, self) buttonBox.addButton(self.okBtn, QDialogButtonBox.AcceptRole) buttonBox.addButton(cancelBtn, QDialogButtonBox.RejectRole) baseLayout.addWidget(buttonBox) self.name_le.textChanged.connect(self.name_confirmator) self.key_le.textChanged.connect(self.key_confirmator) self.keyConfirm_le.textChanged.connect(self.key_confirmator) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject)
class MainWindow(QWidget): # noinspection PyUnresolvedReferences def __init__(self, clipboard): super().__init__() self.clipboard = clipboard self.setWindowIcon(QIcon('Logo_rendered_edited.png')) self.layout = QBoxLayout(QBoxLayout.TopToBottom, self) self.generator = CtSesam() self.iterations = 4096 # Master password self.master_password_label = QLabel("&Master-Passwort:") self.maser_password_edit = QLineEdit() self.maser_password_edit.setEchoMode(QLineEdit.EchoMode.Password) self.maser_password_edit.textChanged.connect(self.reset_iterations) self.maser_password_edit.returnPressed.connect(self.move_focus) self.maser_password_edit.setMaximumHeight(28) self.master_password_label.setBuddy(self.maser_password_edit) self.layout.addWidget(self.master_password_label) self.layout.addWidget(self.maser_password_edit) # Domain self.domain_label = QLabel("&Domain:") self.domain_edit = QLineEdit() self.domain_edit.textChanged.connect(self.reset_iterations) self.domain_edit.returnPressed.connect(self.move_focus) self.domain_edit.setMaximumHeight(28) self.domain_label.setBuddy(self.domain_edit) self.layout.addWidget(self.domain_label) self.layout.addWidget(self.domain_edit) # Username self.username_label = QLabel("&Username:"******"Sonderzeichen") self.special_characters_checkbox.setChecked(True) self.special_characters_checkbox.stateChanged.connect(self.reset_iterations) self.layout.addWidget(self.special_characters_checkbox) self.letters_checkbox = QCheckBox("Buchstaben") self.letters_checkbox.setChecked(True) self.letters_checkbox.stateChanged.connect(self.reset_iterations) self.layout.addWidget(self.letters_checkbox) self.digits_checkbox = QCheckBox("Zahlen") self.digits_checkbox.setChecked(True) self.digits_checkbox.stateChanged.connect(self.reset_iterations) self.layout.addWidget(self.digits_checkbox) # Length slider self.length_label = QLabel("&Länge:") self.length_display = QLabel() self.length_label_layout = QBoxLayout(QBoxLayout.LeftToRight) self.length_label_layout.addWidget(self.length_label) self.length_label_layout.addWidget(self.length_display) self.length_label_layout.addStretch() self.length_slider = QSlider(Qt.Horizontal) self.length_slider.setMinimum(4) self.length_slider.setMaximum(20) self.length_slider.setPageStep(1) self.length_slider.setValue(10) self.length_display.setText(str(self.length_slider.sliderPosition())) self.length_slider.valueChanged.connect(self.length_slider_changed) self.length_label.setBuddy(self.length_slider) self.layout.addLayout(self.length_label_layout) self.layout.addWidget(self.length_slider) # Button self.generate_button = QPushButton("Erzeugen") self.generate_button.clicked.connect(self.generate_password) self.generate_button.setAutoDefault(True) self.layout.addWidget(self.generate_button) # Password self.password_label = QLabel("&Passwort:") self.password = QLabel() self.password.setTextFormat(Qt.PlainText) self.password.setAlignment(Qt.AlignCenter) self.password.setFont(QFont("Helvetica", 18, QFont.Bold)) self.password_label.setBuddy(self.password) self.layout.addWidget(self.password_label) self.layout.addWidget(self.password) # Iteration display self.message_label = QLabel() self.message_label.setTextFormat(Qt.RichText) self.message_label.setVisible(False) self.layout.addWidget(self.message_label) # Window layout self.layout.addStretch() self.setGeometry(0, 30, 300, 400) self.setWindowTitle("c't SESAM") self.maser_password_edit.setFocus() self.show() def length_slider_changed(self): self.length_display.setText(str(self.length_slider.sliderPosition())) self.reset_iterations() def reset_iterations(self): self.iterations = 4096 self.message_label.setVisible(False) self.password.setText('') self.clipboard.setText('') def move_focus(self): line_edits = [self.maser_password_edit, self.domain_edit, self.username_edit] for i, edit in enumerate(line_edits): if edit.hasFocus() and i + 1 < len(line_edits): line_edits[i + 1].setFocus() return True self.generate_button.setFocus() def generate_password(self): if len(self.domain_edit.text()) <= 0: self.reset_iterations() self.message_label.setText( '<span style="font-size: 10px; color: #aa0000;">Bitte geben Sie eine Domain an.</span>') self.message_label.setVisible(True) return False if self.letters_checkbox.isChecked() or \ self.digits_checkbox.isChecked() or \ self.special_characters_checkbox.isChecked(): self.generator.set_password_characters( use_letters=self.letters_checkbox.isChecked(), use_digits=self.digits_checkbox.isChecked(), use_special_characters=self.special_characters_checkbox.isChecked()) else: self.reset_iterations() self.message_label.setText( '<span style="font-size: 10px; color: #aa0000;">Bei den aktuellen Einstellungen ' + 'kann kein Passwort berechnet werden.</span>') self.message_label.setVisible(True) return False password = self.generator.generate( master_password=self.maser_password_edit.text(), domain=self.domain_edit.text(), username=self.username_edit.text(), length=self.length_slider.sliderPosition(), iterations=self.iterations ) self.password.setText(password) self.password.setTextInteractionFlags(Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard) self.clipboard.setText(password) self.message_label.setText( '<span style="font-size: 10px; color: #888888;">Das Passwort wurde ' + str(self.iterations) + ' mal gehasht <br />und in die Zwischenablage kopiert.</span>') self.message_label.setVisible(True) self.iterations += 1
class ConfiguratorWindow(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) # Destroying the C++ object right after closing the dialog box, # otherwise it may be garbage-collected in another QThread # (e.g. the editor's analysis thread in Spyder), thus leading to # a segmentation fault on UNIX or an application crash on Windows self.setAttribute(Qt.WA_DeleteOnClose) self.statusBar().showMessage('Ready') self.saveButton = QPushButton(self.tr("Save")) self.saveButton.setDefault(True) self.quitButton = QPushButton(self.tr("Quit")) self.quitButton.setAutoDefault(False) buttonBox = QDialogButtonBox() buttonBox.addButton(self.saveButton, QDialogButtonBox.ActionRole) buttonBox.addButton(self.quitButton, QDialogButtonBox.RejectRole) self.connect(self.saveButton, SIGNAL('clicked()'), self.save_file) self.connect(self.quitButton, SIGNAL('clicked()'), self.close) """ bbox = QDialogButtonBox(QDialogButtonBox.Apply |QDialogButtonBox.Cancel) self.apply_btn = bbox.button(QDialogButtonBox.Apply) self.connect(bbox, SIGNAL("accepted()"), SLOT("accept()")) self.connect(bbox, SIGNAL("rejected()"), SLOT("reject()")) self.connect(bbox, SIGNAL("clicked(QAbstractButton*)"), self.button_clicked) """ self.lineedits = {} self.comboboxes = {} self.spinboxes = {} self.availability_label = None self.job_name_widget = self.create_lineedit('Job Name', 'job_name') self.job_script_widget = self.create_lineedit('Job Script', 'job_script') self.job_output_widget = self.create_lineedit('Job Output', 'job_output') self.project_name_widget = self.create_lineedit('Project/Account', 'project_name') self.queue_widget = self.create_combobox('Queue', [], 'queues') self.availability_label = QLabel('Available:') self.num_tasks_widget = self.create_spinbox('Number tasks', '', 'ntasks', NoDefault, 1, 1, 1, 'total number of tasks') self.task_per_node_widget = self.create_spinbox('Task per node', '', 'task_per_node', NoDefault, 1, 2, 1, 'tasks per node') self.runtime_widget = self.create_spinbox('Runtime', 'hrs', 'runtime', NoDefault, 1, 36, 1, 'runtime in hrs') self.app_script_widget = self.create_combobox('Application Script', [('mycluster-zcfd.bsh','mycluster-zcfd.bsh'), ('mycluster-paraview.bsh','mycluster-paraview.bsh'), ('mycluster-fluent.bsh','mycluster-fluent.bsh')], 'app_script') # hsplitter = QSplitter() # hsplitter.addWidget(self.pages_widget) btnlayout = QHBoxLayout() btnlayout.addStretch(1) btnlayout.addWidget(buttonBox) vlayout = QVBoxLayout() # vlayout.addWidget(hsplitter) vlayout.addWidget(self.job_name_widget) vlayout.addWidget(self.job_script_widget) vlayout.addWidget(self.job_output_widget) vlayout.addWidget(self.project_name_widget) hlayout = QHBoxLayout() hlayout.addWidget(self.queue_widget) hlayout.addWidget(self.availability_label) vlayout.addLayout(hlayout) vlayout.addWidget(self.num_tasks_widget) vlayout.addWidget(self.task_per_node_widget) vlayout.addWidget(self.runtime_widget) vlayout.addWidget(self.app_script_widget) vlayout.addSpacing(10) vlayout.addLayout(btnlayout) self.widget = QWidget() self.widget.setLayout(vlayout) self.setCentralWidget(self.widget) # self.setGeometry(300, 300, 350, 250) self.setWindowTitle("MyCluster Job Configurator") self.lineedits['job_name'].textChanged.connect(self.job_name_changed) self.lineedits['job_script'].textChanged.connect(self.job_script_changed) self.lineedits['job_name'].setText('myjob') self.lineedits['project_name'].setText('default') #self.lineedits['app_script'].setText('myscript.bsh') self.comboboxes['app_script'].setEditable(True) self.comboboxes['app_script'].lineEdit().editingFinished.connect(self.check_app_script) from mycluster import mycluster mycluster.init() self.init_queue_info() def save_file(self): from mycluster import mycluster if mycluster.scheduler: index = self.comboboxes['queues'].currentIndex() data = self.comboboxes['queues'].itemData(index) jobqueue = data.split(' ')[0] index = self.comboboxes['app_script'].currentIndex() data = self.comboboxes['app_script'].itemData(index) app_script = data.split(' ')[0] # Add checks mycluster.create_submit(jobqueue, script_name=self.lineedits['job_script'].text()+'.job', my_script=app_script, my_name=self.lineedits['job_name'].text(), my_output=self.lineedits['job_output'].text()+'.out', num_tasks=self.spinboxes['ntasks'].value(), project_name=self.lineedits['project_name'].text(), wall_clock=self.spinboxes['runtime'].value(), tasks_per_node=self.spinboxes['task_per_node'].value(),) def init_queue_info(self): from mycluster import mycluster if mycluster.scheduler: for q in mycluster.queues(): # nc = mycluster.scheduler.node_config(q) tpn = mycluster.scheduler.tasks_per_node(q) avail = mycluster.scheduler.available_tasks(q) self.comboboxes['queues'].addItem(q+' max task: '+str(avail['max tasks']), q+' '+str(avail['max tasks'])+' '+str(tpn)+ ' '+str(avail['available'])) self.comboboxes['queues'].currentIndexChanged.connect(self.queue_changed) self.queue_changed() def queue_changed(self): if self.comboboxes['queues'].count(): index = self.comboboxes['queues'].currentIndex() data = self.comboboxes['queues'].itemData(index) self.spinboxes['ntasks'].setMaximum(int(data.split(' ')[1])) self.spinboxes['task_per_node'].setMaximum(int(data.split(' ')[2])) self.spinboxes['task_per_node'].setValue(int(data.split(' ')[2])) self.availability_label.setText('Available: ' + data.split(' ')[3] + ' tasks') def job_name_changed(self, text): # print 'job name changed' self.lineedits['job_script'].setText(text) self.lineedits['job_output'].setText(text) def job_script_changed(self, text): # Check for file exist if os.path.isfile(text + '.job'): self.statusBar().showMessage('Warning file: ' + text + '.job already exists') else: self.statusBar().showMessage('Ready') def check_app_script(self): text = self.comboboxes['app_script'].lineEdit().text() if not os.path.isfile(text): self.statusBar().showMessage('Warning file: ' + text + ' does not exists') else: self.statusBar().showMessage('Ready') pass def show_and_raise(self): self.show() self.raise_() def button_clicked(self, button): if button is self.apply_btn: # Apply button was clicked pass def create_lineedit(self, text, option, default=NoDefault, tip=None, alignment=Qt.Horizontal): label = QLabel(text) label.setWordWrap(True) edit = QLineEdit() layout = QVBoxLayout() if alignment == Qt.Vertical else QHBoxLayout() layout.addWidget(label) layout.addWidget(edit) layout.setContentsMargins(0, 0, 0, 0) if tip: edit.setToolTip(tip) self.lineedits[option] = edit widget = QWidget(self) widget.setLayout(layout) return widget def create_spinbox(self, prefix, suffix, option, default=NoDefault, min_=None, max_=None, step=None, tip=None): if prefix: plabel = QLabel(prefix) else: plabel = None if suffix: slabel = QLabel(suffix) else: slabel = None spinbox = QSpinBox() if min_ is not None: spinbox.setMinimum(min_) if max_ is not None: spinbox.setMaximum(max_) if step is not None: spinbox.setSingleStep(step) if tip is not None: spinbox.setToolTip(tip) self.spinboxes[option] = spinbox layout = QHBoxLayout() for subwidget in (plabel, spinbox, slabel): if subwidget is not None: layout.addWidget(subwidget) layout.addStretch(1) layout.setContentsMargins(0, 0, 0, 0) widget = QWidget(self) widget.setLayout(layout) return widget def create_combobox(self, text, choices, option, default=NoDefault, tip=None): """choices: couples (name, key)""" label = QLabel(text) combobox = QComboBox() if tip is not None: combobox.setToolTip(tip) # combobox.setEditable(True) for name, key in choices: combobox.addItem(name, key) # to_qvariant(key)) self.comboboxes[option] = combobox layout = QHBoxLayout() for subwidget in (label, combobox): layout.addWidget(subwidget) layout.addStretch(1) layout.setContentsMargins(0, 0, 0, 0) widget = QWidget(self) widget.setLayout(layout) return widget
def setupUi(self, editTeamDialog): editTeamDialog.setObjectName("editTeamDialog") editTeamDialog.setMinimumSize(QSize(500, 550)) editTeamDialog.setMaximumSize(QSize(500, 550)) self.mainVerticalLayout = QVBoxLayout(editTeamDialog) self.topLayout = QHBoxLayout() self.teamUserInfoLayout = QGridLayout() managerLabel = QLabel() self.teamUserInfoLayout.addWidget(managerLabel, 0, 0) teamLabel = QLabel() self.teamUserInfoLayout.addWidget(teamLabel, 1, 0) self.teamNameEdit = QLineEdit() self.teamNameEdit.setMinimumWidth(200) self.teamUserInfoLayout.addWidget(self.teamNameEdit, 1, 1) emailLabel = QLabel() self.teamUserInfoLayout.addWidget(emailLabel, 2, 0) self.emailEdit = QLineEdit() self.teamUserInfoLayout.addWidget(self.emailEdit, 2, 1) self.topLayout.addLayout(self.teamUserInfoLayout) self.topLayout.addStretch() self.mainVerticalLayout.addLayout(self.topLayout) self.mainVerticalLayout.addItem(QSpacerItem(0, 15)) #self.mainVerticalLayout.addStretch() self.formationLayout = QHBoxLayout() self.formationRadioButtons = RadioButtonGroup("Formation", Formation.formations) self.formationRadioButtons.setFlat(True) self.formationLayout.addWidget(self.formationRadioButtons) self.formationLayout.addStretch() self.mainVerticalLayout.addLayout(self.formationLayout) self.playersGroupBox = QGroupBox() self.gridLayout = QGridLayout(self.playersGroupBox) self.goalkeeperLabel = QLabel(self.playersGroupBox) self.gridLayout.addWidget(self.goalkeeperLabel, 0, 0) self.positionLabels = [QLabel(self.playersGroupBox) for i in range(11)] self.searchBoxes = [QLineEdit(self.playersGroupBox) for i in range(11)] self.selections = [QComboBox(self.playersGroupBox) for i in range(11)] self.clubLabels = [QLabel(self.playersGroupBox) for i in range(11)] self.valueLabels = [QLabel(self.playersGroupBox) for i in range(11)] for i, positionLabel in enumerate(self.positionLabels): self.gridLayout.addWidget(positionLabel, i, 0) for i, searchBox in enumerate(self.searchBoxes): searchBox.setToolTip("Search for a player by code or name") self.gridLayout.addWidget(searchBox, i, 1) searchBox.returnPressed.connect(partial(self.playerSearch, i)) for i, selection in enumerate(self.selections): selection.setToolTip("Select a player") selection.setSizeAdjustPolicy( QComboBox.AdjustToContentsOnFirstShow) selection.setCurrentIndex(-1) self.gridLayout.addWidget(selection, i, 2) clubWidth = self.clubLabels[0].fontMetrics().width( "Wolverhampton Wanderers") for i, clubLabel in enumerate(self.clubLabels): clubLabel.setFixedWidth(clubWidth) self.gridLayout.addWidget(clubLabel, i, 3) valueWidth = self.valueLabels[0].fontMetrics().width("0.0") for i, valueLabel in enumerate(self.valueLabels): valueLabel.setFixedWidth(valueWidth) self.gridLayout.addWidget(valueLabel, i, 4) self.mainVerticalLayout.addWidget(self.playersGroupBox) self.mainVerticalLayout.addItem(QSpacerItem(0, 15)) self.totalCostLayout = QHBoxLayout() self.totalCostLabel = QLabel() self.totalCostLayout.addWidget(self.totalCostLabel) self.mainVerticalLayout.addLayout(self.totalCostLayout) self.mainVerticalLayout.addItem(QSpacerItem(0, 15)) self.buttonLayout = QHBoxLayout() okButton = QPushButton("OK") okButton.setAutoDefault(False) cancelButton = QPushButton("Cancel") cancelButton.setAutoDefault(False) self.buttonLayout.addWidget(okButton) self.buttonLayout.addWidget(cancelButton) buttonSpacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) self.buttonLayout.addItem(buttonSpacer) self.mainVerticalLayout.addLayout(self.buttonLayout) okButton.clicked.connect(editTeamDialog.accept) cancelButton.clicked.connect(editTeamDialog.reject) managerLabel.setText("Manager") teamLabel.setText("Team Name") emailLabel.setText("Email") self.playersGroupBox.setTitle("Players") for formationRadioButton in self.formationRadioButtons: formationRadioButton.clicked.connect( partial(self.formationChanged, str(formationRadioButton.text()))) self.totalCostLabel.setText("Total Cost")
class ConfiguratorWindow(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) # Destroying the C++ object right after closing the dialog box, # otherwise it may be garbage-collected in another QThread # (e.g. the editor's analysis thread in Spyder), thus leading to # a segmentation fault on UNIX or an application crash on Windows self.setAttribute(Qt.WA_DeleteOnClose) self.statusBar().showMessage('Ready') self.saveButton = QPushButton(self.tr("Save")) self.saveButton.setDefault(True) self.quitButton = QPushButton(self.tr("Quit")) self.quitButton.setAutoDefault(False) buttonBox = QDialogButtonBox() buttonBox.addButton(self.saveButton, QDialogButtonBox.ActionRole) buttonBox.addButton(self.quitButton, QDialogButtonBox.RejectRole) self.connect(self.saveButton, SIGNAL('clicked()'), self.save_file) self.connect(self.quitButton, SIGNAL('clicked()'), self.close) """ bbox = QDialogButtonBox(QDialogButtonBox.Apply |QDialogButtonBox.Cancel) self.apply_btn = bbox.button(QDialogButtonBox.Apply) self.connect(bbox, SIGNAL("accepted()"), SLOT("accept()")) self.connect(bbox, SIGNAL("rejected()"), SLOT("reject()")) self.connect(bbox, SIGNAL("clicked(QAbstractButton*)"), self.button_clicked) """ self.lineedits = {} self.comboboxes = {} self.spinboxes = {} self.availability_label = None self.job_name_widget = self.create_lineedit('Job Name', 'job_name') self.job_script_widget = self.create_lineedit('Job Script', 'job_script') self.job_output_widget = self.create_lineedit('Job Output', 'job_output') self.project_name_widget = self.create_lineedit( 'Project/Account', 'project_name') self.queue_widget = self.create_combobox('Queue', [], 'queues') self.availability_label = QLabel('Available:') self.num_tasks_widget = self.create_spinbox('Number tasks', '', 'ntasks', NoDefault, 1, 1, 1, 'total number of tasks') self.task_per_node_widget = self.create_spinbox( 'Task per node', '', 'task_per_node', NoDefault, 1, 2, 1, 'tasks per node') self.runtime_widget = self.create_spinbox('Runtime', 'hrs', 'runtime', NoDefault, 1, 36, 1, 'runtime in hrs') self.app_script_widget = self.create_combobox( 'Application Script', [('mycluster-zcfd.bsh', 'mycluster-zcfd.bsh'), ('mycluster-paraview.bsh', 'mycluster-paraview.bsh'), ('mycluster-fluent.bsh', 'mycluster-fluent.bsh')], 'app_script') # hsplitter = QSplitter() # hsplitter.addWidget(self.pages_widget) btnlayout = QHBoxLayout() btnlayout.addStretch(1) btnlayout.addWidget(buttonBox) vlayout = QVBoxLayout() # vlayout.addWidget(hsplitter) vlayout.addWidget(self.job_name_widget) vlayout.addWidget(self.job_script_widget) vlayout.addWidget(self.job_output_widget) vlayout.addWidget(self.project_name_widget) hlayout = QHBoxLayout() hlayout.addWidget(self.queue_widget) hlayout.addWidget(self.availability_label) vlayout.addLayout(hlayout) vlayout.addWidget(self.num_tasks_widget) vlayout.addWidget(self.task_per_node_widget) vlayout.addWidget(self.runtime_widget) vlayout.addWidget(self.app_script_widget) vlayout.addSpacing(10) vlayout.addLayout(btnlayout) self.widget = QWidget() self.widget.setLayout(vlayout) self.setCentralWidget(self.widget) # self.setGeometry(300, 300, 350, 250) self.setWindowTitle("MyCluster Job Configurator") self.lineedits['job_name'].textChanged.connect(self.job_name_changed) self.lineedits['job_script'].textChanged.connect( self.job_script_changed) self.lineedits['job_name'].setText('myjob') self.lineedits['project_name'].setText('default') #self.lineedits['app_script'].setText('myscript.bsh') self.comboboxes['app_script'].setEditable(True) self.comboboxes['app_script'].lineEdit().editingFinished.connect( self.check_app_script) from mycluster import mycluster mycluster.init() self.init_queue_info() def save_file(self): from mycluster import mycluster if mycluster.scheduler: index = self.comboboxes['queues'].currentIndex() data = self.comboboxes['queues'].itemData(index) jobqueue = data.split(' ')[0] index = self.comboboxes['app_script'].currentIndex() data = self.comboboxes['app_script'].itemData(index) app_script = data.split(' ')[0] # Add checks mycluster.create_submit( jobqueue, script_name=self.lineedits['job_script'].text() + '.job', my_script=app_script, my_name=self.lineedits['job_name'].text(), my_output=self.lineedits['job_output'].text() + '.out', num_tasks=self.spinboxes['ntasks'].value(), project_name=self.lineedits['project_name'].text(), wall_clock=self.spinboxes['runtime'].value(), tasks_per_node=self.spinboxes['task_per_node'].value(), ) def init_queue_info(self): from mycluster import mycluster if mycluster.scheduler: for q in mycluster.queues(): # nc = mycluster.scheduler.node_config(q) tpn = mycluster.scheduler.tasks_per_node(q) avail = mycluster.scheduler.available_tasks(q) self.comboboxes['queues'].addItem( q + ' max task: ' + str(avail['max tasks']), q + ' ' + str(avail['max tasks']) + ' ' + str(tpn) + ' ' + str(avail['available'])) self.comboboxes['queues'].currentIndexChanged.connect( self.queue_changed) self.queue_changed() def queue_changed(self): if self.comboboxes['queues'].count(): index = self.comboboxes['queues'].currentIndex() data = self.comboboxes['queues'].itemData(index) self.spinboxes['ntasks'].setMaximum(int(data.split(' ')[1])) self.spinboxes['task_per_node'].setMaximum(int(data.split(' ')[2])) self.spinboxes['task_per_node'].setValue(int(data.split(' ')[2])) self.availability_label.setText('Available: ' + data.split(' ')[3] + ' tasks') def job_name_changed(self, text): # print 'job name changed' self.lineedits['job_script'].setText(text) self.lineedits['job_output'].setText(text) def job_script_changed(self, text): # Check for file exist if os.path.isfile(text + '.job'): self.statusBar().showMessage('Warning file: ' + text + '.job already exists') else: self.statusBar().showMessage('Ready') def check_app_script(self): text = self.comboboxes['app_script'].lineEdit().text() if not os.path.isfile(text): self.statusBar().showMessage('Warning file: ' + text + ' does not exists') else: self.statusBar().showMessage('Ready') pass def show_and_raise(self): self.show() self.raise_() def button_clicked(self, button): if button is self.apply_btn: # Apply button was clicked pass def create_lineedit(self, text, option, default=NoDefault, tip=None, alignment=Qt.Horizontal): label = QLabel(text) label.setWordWrap(True) edit = QLineEdit() layout = QVBoxLayout() if alignment == Qt.Vertical else QHBoxLayout() layout.addWidget(label) layout.addWidget(edit) layout.setContentsMargins(0, 0, 0, 0) if tip: edit.setToolTip(tip) self.lineedits[option] = edit widget = QWidget(self) widget.setLayout(layout) return widget def create_spinbox(self, prefix, suffix, option, default=NoDefault, min_=None, max_=None, step=None, tip=None): if prefix: plabel = QLabel(prefix) else: plabel = None if suffix: slabel = QLabel(suffix) else: slabel = None spinbox = QSpinBox() if min_ is not None: spinbox.setMinimum(min_) if max_ is not None: spinbox.setMaximum(max_) if step is not None: spinbox.setSingleStep(step) if tip is not None: spinbox.setToolTip(tip) self.spinboxes[option] = spinbox layout = QHBoxLayout() for subwidget in (plabel, spinbox, slabel): if subwidget is not None: layout.addWidget(subwidget) layout.addStretch(1) layout.setContentsMargins(0, 0, 0, 0) widget = QWidget(self) widget.setLayout(layout) return widget def create_combobox(self, text, choices, option, default=NoDefault, tip=None): """choices: couples (name, key)""" label = QLabel(text) combobox = QComboBox() if tip is not None: combobox.setToolTip(tip) # combobox.setEditable(True) for name, key in choices: combobox.addItem(name, key) # to_qvariant(key)) self.comboboxes[option] = combobox layout = QHBoxLayout() for subwidget in (label, combobox): layout.addWidget(subwidget) layout.addStretch(1) layout.setContentsMargins(0, 0, 0, 0) widget = QWidget(self) widget.setLayout(layout) return widget
class Form(QDialog): def __init__(self, state, parent=None): super().__init__(parent) Lib.prepareModalDialog(self) self.state = state self.setWindowTitle("Recreate Entries — {}".format( QApplication.applicationName())) self.createWidgets() self.layoutWidgets() self.populate() self.updateUi() self.createConnections() settings = QSettings() self.updateToolTips( bool( int( settings.value(Gopt.Key.ShowDialogToolTips, Gopt.Default.ShowDialogToolTips)))) def createWidgets(self): self.listWidget = Widgets.List.HtmlListWidget(self.state) self.tooltips.append((self.listWidget, """\ <p><b>Recreatable Entries view</b></p> <p>The list of this index's recreatable entries.</p>""")) self.recreateSubentriesCheckBox = QCheckBox("Recreate &Subentries") self.recreateSubentriesCheckBox.setChecked(True) self.tooltips.append((self.recreateSubentriesCheckBox, """\ <p><b>Recreate Subentries</b></p> <p>If checked, when an entry or subentry is recreated, all of its subentries, and their subentries, and so on (if any), will also be recrected if possible.</p>""")) self.recreateButton = QPushButton(QIcon(":/recreate.svg"), "&Recreate") self.recreateButton.setDefault(True) self.recreateButton.setAutoDefault(True) self.tooltips.append((self.recreateButton, """\ <p><b>Recreate</b></p> <p>Recreate the current entry or subentry (and its subentries and their subentries, and so on, if the <b>Recreate Subentries</b> checkbox is checked), and then close the dialog.</p> <p>Note that it is possible to get rid of the recreated entries by clicking <b>Index→Undo</b> immediately after the dialog closes. (Or, at any later time by simply deleting them.)""")) self.deleteButton = QPushButton(QIcon(":/delete.svg"), "&Delete...") self.tooltips.append((self.deleteButton, """\ <p><b>Delete</b></p> <p>Permanently delete the current recreatable entry or subentry from this index's list of recreatable entries.</p>""")) self.helpButton = QPushButton(QIcon(":/help.svg"), "Help") self.tooltips.append( (self.helpButton, "Help on the Recreate Entries dialog")) self.closeButton = QPushButton(QIcon(":/dialog-close.svg"), "&Close") self.tooltips.append((self.closeButton, """<p><b>Close</b></p> <p>Close the dialog.</p>""")) def layoutWidgets(self): buttonBox = QDialogButtonBox() buttonBox.addButton(self.recreateButton, QDialogButtonBox.ActionRole) buttonBox.addButton(self.deleteButton, QDialogButtonBox.ActionRole) buttonBox.addButton(self.closeButton, QDialogButtonBox.AcceptRole) buttonBox.addButton(self.helpButton, QDialogButtonBox.HelpRole) layout = QVBoxLayout() layout.addWidget(self.listWidget) layout.addWidget(self.recreateSubentriesCheckBox) layout.addWidget(buttonBox) self.setLayout(layout) def createConnections(self): self.recreateButton.clicked.connect(self.recreate) self.deleteButton.clicked.connect(self.delete) self.closeButton.clicked.connect(self.reject) self.helpButton.clicked.connect(self.help) def help(self): self.state.help("xix_ref_dlg_recreate.html") def updateUi(self): enable = self.listWidget.currentRow() > -1 self.recreateButton.setEnabled(enable) self.deleteButton.setEnabled(enable) def populate(self): self.listWidget.clear() for entry in self.state.model.deletedEntries(): pages = "" if entry.pages: pages = ", {}".format(entry.pages) top = MAIN_INDICATOR if entry.peid == ROOT else SUB_INDICATOR item = QListWidgetItem("{} {}{}".format( top, Lib.elidePatchHtml(entry.term, self.state), Lib.elidePatchHtml(pages, self.state))) item.setData(Qt.UserRole, entry.eid) self.listWidget.addItem(item) if self.listWidget.count(): self.listWidget.setCurrentRow(0) def recreate(self): # No need to restore focus widget item = self.listWidget.currentItem() if item: eid = item.data(Qt.UserRole) subentries = self.recreateSubentriesCheckBox.isChecked() with Lib.DisableUI(self): self.state.model.recreateEntry(eid, subentries) say("Recreated", SAY_TIMEOUT) self.accept() def delete(self): widget = QApplication.focusWidget() item = self.listWidget.currentItem() if item: eid = item.data(Qt.UserRole) if self.state.model.hasDeletedEntry(eid): with Lib.Qt.DisableUI(self, forModalDialog=True): reply = QMessageBox.question( self, "Delete Revivable Entry — {}".format( QApplication.applicationName()), "<p>Permanently delete revivable entry<br>“{}”?". format(item.text()), QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) if reply == QMessageBox.Yes: with Lib.DisableUI(self): self.state.model.deleteDeletedEntry(eid) self.populate() self.updateUi() Lib.restoreFocus(widget)