def __init__(self, parent=None): super().__init__(parent) self._data = {"element1": "", "element2": "", "energy": 0} # Reference to function that computes pileup energy based on two emission lines self._compute_energy = None self.setWindowTitle("Pileup Peak Parameters") self.le_element1 = LineEditExtended() set_tooltip(self.le_element1, "The <b>name</b> of the emission line #1") self.le_element2 = LineEditExtended() set_tooltip(self.le_element2, "The <b>name</b> of the emission line #2") self.peak_energy = LineEditReadOnly() set_tooltip( self.peak_energy, "The <b>energy</b> (location) of the pileup peak center. The energy can not" "be edited: it is set based on the selected emission lines", ) self._validator_eline = QRegExpValidator() # TODO: the following regex is too broad: [a-z] should be narrowed down self._validator_eline.setRegExp(QRegExp(r"^[A-Z][a-z]?_[KLM][a-z]\d$")) instructions = QLabel( "Specify two emission lines, e.g. Si_Ka1 and Fe_Ka1") grid = QGridLayout() grid.addWidget(QLabel("Emission line 1:"), 0, 0) grid.addWidget(self.le_element1, 0, 1) grid.addWidget(QLabel("Emission line 2:"), 1, 0) grid.addWidget(self.le_element2, 1, 1) grid.addWidget(QLabel("Peak energy, keV:"), 2, 0) grid.addWidget(self.peak_energy, 2, 1) button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) button_box.button(QDialogButtonBox.Cancel).setDefault(True) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) self.pb_ok = button_box.button(QDialogButtonBox.Ok) vbox = QVBoxLayout() vbox.addWidget(instructions) vbox.addSpacing(10) vbox.addLayout(grid) vbox.addWidget(button_box) self.setLayout(vbox) self.le_element1.editingFinished.connect( self.le_element1_editing_finished) self.le_element2.editingFinished.connect( self.le_element2_editing_finished) self.le_element1.textChanged.connect(self.le_element1_text_changed) self.le_element2.textChanged.connect(self.le_element2_text_changed)
def __init__(self, parent=None): """Display a dialog to open a new redis connection""" super(OpenRedisDialog, self).__init__(parent) self.load_ui() v = QRegExpValidator(QRegExp("([^:/]+)?(:[0-9]+)?")) self.ui.tcp.setValidator(v) self.ui.tcp_option.setChecked(True)
def create_lineedit(self, text, option, default=NoDefault, tip=None, alignment=Qt.Vertical, regex=None, restart=False, word_wrap=True, placeholder=None, content_type=None, section=None): label = QLabel(text) label.setWordWrap(word_wrap) edit = QLineEdit() edit.content_type = content_type 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) if regex: edit.setValidator(QRegExpValidator(QRegExp(regex))) if placeholder: edit.setPlaceholderText(placeholder) self.lineedits[edit] = (section, option, default) widget = QWidget(self) widget.label = label widget.textbox = edit widget.setLayout(layout) edit.restart_required = restart edit.label_text = text return widget
def __init__(self, *args, **kwargs): """Custom line edit for naming an environment.""" super(LineEditEnvironment, self).__init__(*args, **kwargs) self._validator = QRegExpValidator(self.VALID_RE) self.menu = QMenu(parent=self) self.setValidator(self._validator) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
def __init__(self, *args, **kwargs): """Custom line edit that uses different validators for text and url.""" super(LineEditChannel, self).__init__(*args, **kwargs) self._validator = QRegExpValidator(self.VALID_RE) self.menu = QMenu(parent=self) self.setValidator(self._validator) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
def __init__(self, main_window, oswebext): """ desc: Constructor. arguments: main_window: The main-window object. """ super(oswebext_widget, self).__init__(main_window, ui=u'extensions.oswebext.oswebext') self._oswebext = oswebext self.ui.button_test.clicked.connect(self._test) self.ui.fs_checkBox.toggled.connect(self._run_linter) self.ui.button_jatos.clicked.connect(self._export_jatos) self.ui.button_convert.clicked.connect(self._convert_results) self.ui.plaintextedit_welcome_text.setPlainText( safe_decode(cfg.oswebext_welcome_text)) self.ui.plaintextedit_welcome_text.textChanged.connect( lambda: setattr(cfg, 'oswebext_welcome_text', self.ui.plaintextedit_welcome_text.toPlainText())) self.ui.plaintextedit_external_js.setPlainText( safe_decode(cfg.oswebext_external_js)) self.ui.plaintextedit_external_js.textChanged.connect( lambda: setattr(cfg, 'oswebext_external_js', self.ui.plaintextedit_external_js.toPlainText())) self.ui.label_version.setText(__version__) self.ui.linedit_subject.setValidator( QRegExpValidator(QRegExp("^(?:\d+(?:-\d+)?(?:,(?!$))?)+"))) self.ui.icon_expsize_warning.setPixmap( QIcon.fromTheme('emblem-important').pixmap(32, 32)) self._init_widgets() self._run_linter()
def create_lineedit(self, text, default=None, tip=None, alignment=Qt.Horizontal, regex=None, wrap=True): label = QLabel(text) label.setWordWrap(wrap) edit = QLineEdit() layout = QHBoxLayout() if alignment == Qt.Horizontal else QVBoxLayout() layout.addWidget(label) layout.addWidget(edit) layout.setContentsMargins(0, 0, 0, 0) if default: edit.setText(default) if tip: edit.setToolTip(tip) if regex: edit.setValidator(QRegExpValidator(QRegExp(regex))) widget = QWidget(self) widget.label = label widget.edit = edit widget.setLayout(layout) return widget
def __init__(self, regex=None, tooltip=None): super(EditableListDelegate, self).__init__() self.regex = regex self.qregex = QRegExp(regex) self.tooltip = tooltip self.validator = QRegExpValidator(self.qregex) self.edit = None
def __init__(self, parent, plugin, tabs, data, icon): QDialog.__init__(self, parent) # Variables self.plugins_tabs = [] self.plugins_data = [] self.plugins_instances = [] self.add_plugin(plugin, tabs, data, icon) self.plugin = None # Last plugin with focus self.mode = self.FILE_MODE # By default start in this mode self.initial_cursors = None # {fullpath: QCursor} self.initial_path = None # Fullpath of initial active editor self.initial_widget = None # Initial active editor self.line_number = None # Selected line number in filer self.is_visible = False # Is the switcher visible? help_text = _("Press <b>Enter</b> to switch files or <b>Esc</b> to " "cancel.<br><br>Type to filter filenames.<br><br>" "Use <b>:number</b> to go to a line, e.g. " "<b><code>main:42</code></b><br>" "Use <b>@symbol_text</b> to go to a symbol, e.g. " "<b><code>@init</code></b>" "<br><br> Press <b>Ctrl+W</b> to close current tab.<br>") # Either allow searching for a line number or a symbol but not both regex = QRegExp("([A-Za-z0-9_]{0,100}@[A-Za-z0-9_]{0,100})|" + "([A-Za-z0-9_]{0,100}:{0,1}[0-9]{0,100})") # Widgets self.edit = FilesFilterLine(self) self.help = HelperToolButton() self.list = QListWidget(self) self.filter = KeyPressFilter() regex_validator = QRegExpValidator(regex, self.edit) # Widgets setup self.setWindowFlags(Qt.Popup | Qt.FramelessWindowHint) self.setWindowOpacity(0.95) self.edit.installEventFilter(self.filter) self.edit.setValidator(regex_validator) self.help.setToolTip(help_text) self.list.setItemDelegate(HTMLDelegate(self)) # Layout edit_layout = QHBoxLayout() edit_layout.addWidget(self.edit) edit_layout.addWidget(self.help) layout = QVBoxLayout() layout.addLayout(edit_layout) layout.addWidget(self.list) self.setLayout(layout) # Signals self.rejected.connect(self.restore_initial_state) self.filter.sig_up_key_pressed.connect(self.previous_row) self.filter.sig_down_key_pressed.connect(self.next_row) self.edit.returnPressed.connect(self.accept) self.edit.textChanged.connect(self.setup) self.list.itemSelectionChanged.connect(self.item_selection_changed) self.list.clicked.connect(self.edit.setFocus)
def set_regex(self, regex): """ """ if regex: self.regex = regex self.qregex = QRegExp(regex) validator = QRegExpValidator(self.qregex) self._text.setValidator(validator)
def __init__(self, parent, regex_base=None, key_filter_dict=None): super(FinderLineEdit, self).__init__(parent) self.key_filter_dict = key_filter_dict if regex_base is not None: # Widget setup regex = QRegExp(regex_base + "{100}") self.setValidator(QRegExpValidator(regex))
def __init__(self, *args, **kwargs): super(ProbeBasicLathe, self).__init__(*args, **kwargs) self.run_from_line_Num.setValidator(QRegExpValidator( QRegExp("[0-9]*"))) self.feed_unit_per_minute = 0.0 self.feed_per_rev = 0.0 self.css_sword = 0.0 self.rpm_mode = 0.0
def createEditor(self, widget, option, index): if not index.isValid(): return 0 if index.column() == 0: # only on the cells in the first column editor = QLineEdit(widget) validator = QRegExpValidator(QRegExp(self.__regex), editor) editor.setValidator(validator) return editor return super(RegexValidator, self).createEditor(widget, option, index)
def __init__(self, *args, **kwargs): super(ProbeBasicLathe, self).__init__(*args, **kwargs) self.run_from_line_Num.setValidator(QRegExpValidator( QRegExp("[0-9]*"))) self.feed_unit_per_minute = 0.0 self.feed_per_rev = 0.0 self.css_sword = 0.0 self.rpm_mode = 0.0 self.btnMdiBksp.clicked.connect(self.mdiBackSpace_clicked) self.btnMdiSpace.clicked.connect(self.mdiSpace_clicked)
def __init__(self, parent, callback=None): super(ShortcutFinder, self).__init__(parent) self._parent = parent # Widget setup regex = QRegExp(VALID_FINDER_CHARS + "{100}") self.setValidator(QRegExpValidator(regex)) # Signals if callback: self.textChanged.connect(callback)
def coord_line_edit(self): template = QRegExp(r"[-]?\d*\.?\d{0,3}") validator = QRegExpValidator(template) line = QLineEdit("0.0") line.setValidator(validator) line.setFixedWidth(60) # line.editingFinished.connect(self.update_dist_to_target) line.textChanged.connect(self.update_dist_to_target) return line
def __init__(self, parent, callback=None, main=None, regex_base=VALID_FINDER_CHARS): super(FinderLineEdit, self).__init__(parent) self._parent = parent self.main = main # Widget setup regex = QRegExp(regex_base + "{100}") self.setValidator(QRegExpValidator(regex)) # Signals if callback: self.textChanged.connect(callback)
def create_textbox(self, label, option, hint=None, regex=None, check=None): widget = QLineEdit() widget.setAttribute(Qt.WA_MacShowFocusRect, False) widget.setMinimumWidth(250) if regex: regex_validator = QRegExpValidator(QRegExp(regex)) widget.setValidator(regex_validator) widget.get_value = lambda w=widget: w.text() widget.set_value = lambda value, w=widget: w.setText(value) widget.set_warning = lambda w=widget: w.setSelection(0, 1000) widget.textChanged.connect( lambda v=None, w=widget: self.options_changed(widget=w)) self.create_widget(widget=widget, option=option, label=label, hint=hint, check=check)
def update_format_string(self): """ Accept a unit to display with a channel's value The unit may or may not be displayed based on the :attr:`showUnits` attribute. Receiving a new value for the unit causes the display to reset. """ if self.channeltype is float: decimal_point = locale.localeconv()['decimal_point'] # decimal_point = '.' if self._show_units and self._unit != "": re = QRegExp('(-?)(0|([1-9][0-9]*))(\\{}[0-9]+)?( {})?'.format( decimal_point, self._unit)) else: re = QRegExp( '(-?)(0|([1-9][0-9]*))(\\{}[0-9]+)?'.format(decimal_point)) validator = QRegExpValidator(re, self) self.setValidator(validator) super().update_format_string()
def create_lineedit(self, text, default=None, tip=None, alignment=Qt.Horizontal, regex=None, wrap=True): """Create line-edit widget. :param text: key :type text: str :param default: default value :type default: str :param tip: tool tip :type tip: str :param alignment: alignment, horizontal or vertical :type alignment: Qt :param regex: regular expression :type regex: str :param wrap: wrap text :type wrap: bool :return: QWidget """ label = QLabel(text) label.setWordWrap(wrap) edit = QLineEdit() layout = QHBoxLayout() if alignment == Qt.Horizontal else QVBoxLayout() layout.addWidget(label) layout.addWidget(edit) layout.setContentsMargins(0, 0, 0, 0) if default: edit.setText(default) if tip: edit.setToolTip(tip) if regex: edit.setValidator(QRegExpValidator(QRegExp(regex))) widget = QWidget(self) widget.label = label widget.edit = edit widget.setLayout(layout) return widget
def __init__(self, main_window, oswebext): """ desc: Constructor. arguments: main_window: The main-window object. """ super(oswebext_widget, self).__init__(main_window, ui=u'extensions.oswebext.oswebext') self._oswebext = oswebext self.ui.button_test.clicked.connect(self._test) self.ui.button_jatos.clicked.connect(self._export_jatos) self.ui.button_convert.clicked.connect(self._convert_results) self.ui.label_version.setText(__version__) self.ui.linedit_subject.setValidator( QRegExpValidator(QRegExp("^(?:\d+(?:-\d+)?(?:,(?!$))?)+"))) self.ui.icon_expsize_warning.setPixmap( QIcon.fromTheme('emblem-important').pixmap(32, 32)) self._run_linter()
def __init__(self, *args, **kwargs): super(ParametersFrame, self).__init__(*args, **kwargs) self.setFrameStyle(QFrame.Panel | QFrame.Raised) self.contentLayout = QGridLayout() self.setpointVoltageLabel = QLabel("Fixed voltage [3000 to 7000] V") self.setpointVoltageSettingLabel = QLabel() self.setpointVoltageInp = QLineEdit() self.setpointVoltageInp.setMaximumWidth(100) self.setpointVoltageInp.setValidator(QIntValidator(3000, 7000)) self.setpointVoltageInp.setToolTip("Final voltage setpoint.") self.setpointVoltageInp.setText("3000") self.contentLayout.addWidget(self.setpointVoltageLabel, 0, 0, 1, 1) self.contentLayout.addWidget(self.setpointVoltageInp, 0, 1, 1, 1) self.contentLayout.addWidget(self.setpointVoltageSettingLabel, 0, 2, 1, 1) self.stepToFixDelayLabel = QLabel("Step to Fixed delay (mm:ss)") self.stepToFixDelaySettingLabel = QLabel() self.stepToFixDelayInp = QLineEdit() self.stepToFixDelayInp.setMaximumWidth(100) self.stepToFixDelayInp.setValidator( QRegExpValidator(QRegExp(MIN_SEC_PATTERN))) self.stepToFixDelayInp.setToolTip( "Delay between toStep and toFixed calls.") self.stepToFixDelayInp.setText("05:00") self.contentLayout.addWidget(self.stepToFixDelayLabel, 1, 0, 1, 1) self.contentLayout.addWidget(self.stepToFixDelayInp, 1, 1, 1, 1) self.contentLayout.addWidget(self.stepToFixDelaySettingLabel, 1, 2, 1, 1) self.setButton = QPushButton("Confirm") self.setButton.clicked.connect(self.confirm) self.setButton.setToolTip("Apply settings") self.contentLayout.addWidget(self.setButton, 3, 1, 1, 1) self.setLayout(self.contentLayout) self.confirm()
def __init__(self, api, parent=None): """Login dialog.""" super(AuthenticationDialog, self).__init__(parent) self._parent = parent self.config = CONF self.api = api self.token = None self.error = None self.tracker = GATracker() self.forgot_username_url = None self.forgot_password_url = None # Widgets self.label_username = QLabel('Username:'******'Password:'******'<hr><br><b>Already a member? ' 'Sign in!</b><br>') # For styling purposes the label next to a ButtonLink is also a button # so they align adequately self.button_register_text = ButtonLabel('You can register by ' 'visiting the ') self.button_register = ButtonLink('Anaconda Cloud') self.button_register_after_text = ButtonLabel('website.') self.label_information = QLabel(''' <strong>Anaconda Cloud</strong> is where packages, notebooks, and <br> environments are shared. It provides powerful <br> collaboration and package management for open <br> source and private projects.<br> ''') self.label_message = QLabel('') self.button_forgot_username = ButtonLink('I forgot my username') self.button_forgot_password = ButtonLink('I forgot my password') self.button_login = ButtonPrimary('Login') self.button_cancel = ButtonNormal('Cancel') # Widgets setup self.button_login.setDefault(True) username_validator = QRegExpValidator(self.USER_RE) self.text_username.setValidator(username_validator) self.setMinimumWidth(260) self.setWindowTitle('Sign in') # This allows to completely style the dialog with css using the frame self.text_password.setEchoMode(QLineEdit.Password) self.label_message.setVisible(False) # Layout grid_layout = QVBoxLayout() grid_layout.addWidget(self.label_username) # grid_layout.addWidget(SpacerVertical()) grid_layout.addWidget(self.text_username) grid_layout.addWidget(SpacerVertical()) grid_layout.addWidget(self.label_password) # grid_layout.addWidget(SpacerVertical()) grid_layout.addWidget(self.text_password) main_layout = QVBoxLayout() main_layout.addWidget(self.label_information) register_layout = QHBoxLayout() register_layout.addWidget(self.button_register_text) register_layout.addWidget(self.button_register) register_layout.addWidget(self.button_register_after_text) register_layout.addStretch() main_layout.addLayout(register_layout) main_layout.addWidget(self.label_signin_text) main_layout.addLayout(grid_layout) main_layout.addWidget(SpacerVertical()) main_layout.addWidget(self.label_message) main_layout.addWidget(self.button_forgot_username, 0, Qt.AlignRight) main_layout.addWidget(self.button_forgot_password, 0, Qt.AlignRight) layout_buttons = QHBoxLayout() layout_buttons.addStretch() layout_buttons.addWidget(self.button_cancel) layout_buttons.addWidget(SpacerHorizontal()) layout_buttons.addWidget(self.button_login) main_layout.addWidget(SpacerVertical()) main_layout.addWidget(SpacerVertical()) main_layout.addLayout(layout_buttons) self.setLayout(main_layout) # Signals self.text_username.textEdited.connect(self.check_text) self.text_password.textEdited.connect(self.check_text) self.button_login.clicked.connect(self.login) self.button_cancel.clicked.connect(self.reject) # Setup self.check_text() self.update_style_sheet() self.text_username.setFocus() self.setup()
class DialogPileupPeakParameters(QDialog): def __init__(self, parent=None): super().__init__(parent) self._data = {"element1": "", "element2": "", "energy": 0} # Reference to function that computes pileup energy based on two emission lines self._compute_energy = None self.setWindowTitle("Pileup Peak Parameters") self.le_element1 = LineEditExtended() set_tooltip(self.le_element1, "The <b>name</b> of the emission line #1") self.le_element2 = LineEditExtended() set_tooltip(self.le_element2, "The <b>name</b> of the emission line #2") self.peak_energy = LineEditReadOnly() set_tooltip( self.peak_energy, "The <b>energy</b> (location) of the pileup peak center. The energy can not" "be edited: it is set based on the selected emission lines", ) self._validator_eline = QRegExpValidator() # TODO: the following regex is too broad: [a-z] should be narrowed down self._validator_eline.setRegExp(QRegExp(r"^[A-Z][a-z]?_[KLM][a-z]\d$")) instructions = QLabel( "Specify two emission lines, e.g. Si_Ka1 and Fe_Ka1") grid = QGridLayout() grid.addWidget(QLabel("Emission line 1:"), 0, 0) grid.addWidget(self.le_element1, 0, 1) grid.addWidget(QLabel("Emission line 2:"), 1, 0) grid.addWidget(self.le_element2, 1, 1) grid.addWidget(QLabel("Peak energy, keV:"), 2, 0) grid.addWidget(self.peak_energy, 2, 1) button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) button_box.button(QDialogButtonBox.Cancel).setDefault(True) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) self.pb_ok = button_box.button(QDialogButtonBox.Ok) vbox = QVBoxLayout() vbox.addWidget(instructions) vbox.addSpacing(10) vbox.addLayout(grid) vbox.addWidget(button_box) self.setLayout(vbox) self.le_element1.editingFinished.connect( self.le_element1_editing_finished) self.le_element2.editingFinished.connect( self.le_element2_editing_finished) self.le_element1.textChanged.connect(self.le_element1_text_changed) self.le_element2.textChanged.connect(self.le_element2_text_changed) def set_compute_energy_function(self, func): self._compute_energy = func def set_parameters(self, data): self._data = data.copy() self._show_data() def get_parameters(self): return self._data def _format_float(self, v): return f"{v:.12g}" def _show_data(self): self.le_element1.setText(self._data["element1"]) self.le_element2.setText(self._data["element2"]) self._show_energy() def _show_energy(self, energy=None): if energy is None: energy = self._data["energy"] text = self._format_float(energy) self.peak_energy.setText(text) self._validate_all() def _validate_le_element1(self, text=None): return self._validate_eline(self.le_element1, text) def _validate_le_element2(self, text=None): return self._validate_eline(self.le_element2, text) def _validate_peak_energy(self, energy=None): # Peak energy is not edited, so it is always has a valid floating point number # The only problem is that it may be out of range. if energy is None: energy = self._data["energy"] valid = self._data["range_low"] < energy < self._data["range_high"] self.peak_energy.setValid(valid) return valid def _validate_all(self): valid = self._validate_le_element1() and self._validate_le_element2() # Energy doesn't influence the success of validation, but the Ok button # should be disabled if energy if out of range. valid_energy = self._validate_peak_energy() self.pb_ok.setEnabled(valid and valid_energy) return valid def _validate_eline(self, le_widget, text): if text is None: text = le_widget.text() valid = True if self._validator_eline.validate(text, 0)[0] != QDoubleValidator.Acceptable: valid = False else: # Try to compute energy for the pileup peak if self._compute_energy(text, text) == 0: valid = False le_widget.setValid(valid) return valid def _refresh_energy(self): eline1 = self._data["element1"] eline2 = self._data["element2"] try: energy = self._compute_energy(eline1, eline2) self._data["energy"] = energy self._show_energy() except Exception: self._data["energy"] = 0 self._show_energy() def le_element1_editing_finished(self): if self._validate_le_element1(): self._data["element1"] = self.le_element1.text() self._refresh_energy() else: self.le_element1.setText(self._data["element1"]) self._validate_all() def le_element2_editing_finished(self): if self._validate_le_element2(): self._data["element2"] = self.le_element2.text() self._refresh_energy() else: self.le_element2.setText(self._data["element2"]) self._validate_all() def le_element1_text_changed(self, text): if self._validate_all(): self._data["element1"] = self.le_element1.text() print(f"element1 - {self._data['element1']}") self._refresh_energy() def le_element2_text_changed(self, text): if self._validate_all(): self._data["element2"] = self.le_element2.text() print(f"element2 - {self._data['element2']}") self._refresh_energy()
def __init__(self, email=None, password=None, server=None, port=25, parent=None): super().__init__(parent=parent) self._email = email self._password = password self._server = server self._port = port mainLayout = QVBoxLayout(self) mainLayout.setContentsMargins(0, 0, 0, 0) mainLayout.setSpacing(0) # server widget serverportWidget = QWidget(self) serverportLayout = QHBoxLayout(serverportWidget) serverportLayout.setContentsMargins(10, 10, 10, 10) serverLabel = QLabel("SMTP服务器:") serverLabel.setStyleSheet("color:rgb(70,70,20); padding:10px;") self.serverLineEdit = QLineEdit(self._server) self.serverLineEdit.setValidator( QRegExpValidator(QRegExp(r"[\w\-_]+(\.[\w\-_]+)+"))) self.serverLineEdit.setPlaceholderText("SMTP服务器地址") self.serverLineEdit.textChanged.connect(self._setServer) portLabel = QLabel("端口:") portLabel.setStyleSheet("color:rgb(70,70,20); padding:10px;") self.portLineEdit = QLineEdit(str(self._port)) self.portLineEdit.setValidator(QRegExpValidator(QRegExp(r"^[0-9]+$"))) self.portLineEdit.setPlaceholderText("端口号") self.portLineEdit.textChanged.connect(self._setPort) serverportLayout.addWidget(serverLabel) serverportLayout.addWidget(self.serverLineEdit) serverportLayout.addWidget(portLabel) serverportLayout.addWidget(self.portLineEdit) serverportLayout.setStretch(0, 1) serverportLayout.setStretch(1, 5) serverportLayout.setStretch(2, 1) serverportLayout.setStretch(3, 1) # email widget emailWidget = QWidget(self) emailLayout = QHBoxLayout(emailWidget) emailLayout.setContentsMargins(0, 0, 0, 0) emailLabel = QLabel("邮箱:") emailLabel.setStyleSheet("color:rgb(70,70,20); padding:10px;") self.emailLineEdit = QLineEdit(self._email) self.emailLineEdit.setValidator( QRegExpValidator( QRegExp( "^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$" ))) self.emailLineEdit.setPlaceholderText("请输入邮箱地址") self.emailLineEdit.textChanged.connect(self._setEmail) emailLayout.addWidget(emailLabel) emailLayout.addWidget(self.emailLineEdit) # password widget passwordWidget = QWidget(self) passwordLayout = QHBoxLayout(passwordWidget) passwordLayout.setContentsMargins(0, 0, 0, 0) passwordLabel = QLabel("密码:") passwordLabel.setStyleSheet("color:rgb(70,70,20); padding:10px;") self.passwordLineEdit = QLineEdit(self._password) self.passwordLineEdit.setPlaceholderText("请输入密码") self.passwordLineEdit.textChanged.connect(self._setPassword) self.passwordLineEdit.setEchoMode(QLineEdit.Password) passwordLayout.addWidget(passwordLabel) passwordLayout.addWidget(self.passwordLineEdit) # 插入widget mainLayout.addWidget(serverportWidget) mainLayout.addWidget(emailWidget) mainLayout.addWidget(passwordWidget)
def __init__(self, regexp, widget, color_selector): QRegExpValidator.__init__(self, regexp, widget) self.color_selector = color_selector
def generateRegExpValidator(widget, expression): rx = QRegExp(expression) return QRegExpValidator(rx, widget)
def __init__(self, *args, **kwargs): super(ProbeBasic, self).__init__(*args, **kwargs) self.run_from_line_Num.setValidator(QRegExpValidator( QRegExp("[0-9]*"))) self.btnMdiBksp.clicked.connect(self.mdiBackSpace_clicked) self.btnMdiSpace.clicked.connect(self.mdiSpace_clicked)
def set_regex_validation(self, regex): """Set the regular expression to validate content.""" self._regex = regex self._reg = re.compile(regex, re.IGNORECASE) validator = QRegExpValidator(QRegExp(regex)) self.lineedit.setValidator(validator)
def __init__(self, *args, **kwargs): super(ProbeBasic, self).__init__(*args, **kwargs) self.run_from_line_Num.setValidator(QRegExpValidator(QRegExp("[0-9]*"))) self.dynatc_left.iniFilePrefix = "LEFT_" self.dynatc_right.iniFilePrefix = "RIGHT_"