gui.dialogs.new_course_dialog

 1import re
 2
 3from PySide6.QtWidgets import (
 4    QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit,
 5    QPushButton, QDialogButtonBox,
 6)
 7from PySide6.QtCore import Qt
 8
 9
10_NAME_RE = re.compile(r'^[a-z0-9][a-z0-9_-]*$')
11
12
13class NewCourseDialog(QDialog):
14    def __init__(self, parent=None):
15        super().__init__(parent)
16        self.setWindowTitle('Nuevo curso')
17        self.setMinimumWidth(340)
18        self._build_ui()
19
20    def _build_ui(self) -> None:
21        layout = QVBoxLayout(self)
22        layout.setSpacing(12)
23
24        layout.addWidget(QLabel('Nombre del curso (minúsculas, guiones, sin espacios):'))
25
26        self._input = QLineEdit()
27        self._input.setPlaceholderText('mi-curso')
28        self._input.textChanged.connect(self._validate)
29        layout.addWidget(self._input)
30
31        self._error = QLabel('')
32        self._error.setStyleSheet('color:#c0392b; font-size:11px;')
33        layout.addWidget(self._error)
34
35        btns = QDialogButtonBox(
36            QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel
37        )
38        btns.accepted.connect(self._on_accept)
39        btns.rejected.connect(self.reject)
40        self._ok_btn = btns.button(QDialogButtonBox.StandardButton.Ok)
41        self._ok_btn.setEnabled(False)
42        layout.addWidget(btns)
43
44    def _validate(self, text: str) -> None:
45        if not text:
46            self._error.setText('')
47            self._ok_btn.setEnabled(False)
48        elif not _NAME_RE.match(text):
49            self._error.setText('Solo minúsculas, dígitos, guión y guión-bajo.')
50            self._ok_btn.setEnabled(False)
51        else:
52            self._error.setText('')
53            self._ok_btn.setEnabled(True)
54
55    def _on_accept(self) -> None:
56        if _NAME_RE.match(self._input.text()):
57            self.accept()
58
59    def course_name(self) -> str:
60        return self._input.text().strip()
class NewCourseDialog(PySide6.QtWidgets.QDialog):
14class NewCourseDialog(QDialog):
15    def __init__(self, parent=None):
16        super().__init__(parent)
17        self.setWindowTitle('Nuevo curso')
18        self.setMinimumWidth(340)
19        self._build_ui()
20
21    def _build_ui(self) -> None:
22        layout = QVBoxLayout(self)
23        layout.setSpacing(12)
24
25        layout.addWidget(QLabel('Nombre del curso (minúsculas, guiones, sin espacios):'))
26
27        self._input = QLineEdit()
28        self._input.setPlaceholderText('mi-curso')
29        self._input.textChanged.connect(self._validate)
30        layout.addWidget(self._input)
31
32        self._error = QLabel('')
33        self._error.setStyleSheet('color:#c0392b; font-size:11px;')
34        layout.addWidget(self._error)
35
36        btns = QDialogButtonBox(
37            QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel
38        )
39        btns.accepted.connect(self._on_accept)
40        btns.rejected.connect(self.reject)
41        self._ok_btn = btns.button(QDialogButtonBox.StandardButton.Ok)
42        self._ok_btn.setEnabled(False)
43        layout.addWidget(btns)
44
45    def _validate(self, text: str) -> None:
46        if not text:
47            self._error.setText('')
48            self._ok_btn.setEnabled(False)
49        elif not _NAME_RE.match(text):
50            self._error.setText('Solo minúsculas, dígitos, guión y guión-bajo.')
51            self._ok_btn.setEnabled(False)
52        else:
53            self._error.setText('')
54            self._ok_btn.setEnabled(True)
55
56    def _on_accept(self) -> None:
57        if _NAME_RE.match(self._input.text()):
58            self.accept()
59
60    def course_name(self) -> str:
61        return self._input.text().strip()

QDialog(self, /, parent: PySide6.QtWidgets.QWidget | None = None, f: PySide6.QtCore.Qt.WindowType = Default(Qt.WindowFlags), *, sizeGripEnabled: bool | None = None, modal: bool | None = None) -> None

NewCourseDialog(parent=None)
15    def __init__(self, parent=None):
16        super().__init__(parent)
17        self.setWindowTitle('Nuevo curso')
18        self.setMinimumWidth(340)
19        self._build_ui()
def course_name(self) -> str:
60    def course_name(self) -> str:
61        return self._input.text().strip()
staticMetaObject = PySide6.QtCore.QMetaObject("NewCourseDialog" inherits "QDialog": )