Loading...
Loading...
Compare original and translation side by side
from PySide6.QtWidgets import QMessageBoxfrom PySide6.QtWidgets import QMessageBoxundefinedundefinedfrom PySide6.QtWidgets import QFileDialog
from pathlib import Pathfrom PySide6.QtWidgets import QFileDialog
from pathlib import Path
The filter string format is `"Description (*.ext *.ext2);;Description2 (*.ext3)"`.
过滤器字符串格式为`"描述 (*.ext *.ext2);;描述2 (*.ext3)"`。from PySide6.QtWidgets import (
QDialog, QDialogButtonBox, QFormLayout, QLineEdit, QVBoxLayout
)
from PySide6.QtCore import Qt
class AddPersonDialog(QDialog):
def __init__(self, parent=None) -> None:
super().__init__(parent)
self.setWindowTitle("Add Person")
self.setModal(True)
self.setMinimumWidth(300)
self._setup_ui()
def _setup_ui(self) -> None:
layout = QVBoxLayout(self)
form = QFormLayout()
self._name_edit = QLineEdit()
self._name_edit.setPlaceholderText("Full name")
self._email_edit = QLineEdit()
self._email_edit.setPlaceholderText("email@example.com")
form.addRow("Name:", self._name_edit)
form.addRow("Email:", self._email_edit)
layout.addLayout(form)
# Standard OK / Cancel buttons
buttons = QDialogButtonBox(
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel
)
buttons.accepted.connect(self._on_accept)
buttons.rejected.connect(self.reject)
layout.addWidget(buttons)
def _on_accept(self) -> None:
if not self._name_edit.text().strip():
QMessageBox.warning(self, "Validation", "Name is required.")
return
self.accept() # closes dialog and returns QDialog.Accepted
def name(self) -> str:
return self._name_edit.text().strip()
def email(self) -> str:
return self._email_edit.text().strip()from PySide6.QtWidgets import (
QDialog, QDialogButtonBox, QFormLayout, QLineEdit, QVBoxLayout
)
from PySide6.QtCore import Qt
class AddPersonDialog(QDialog):
def __init__(self, parent=None) -> None:
super().__init__(parent)
self.setWindowTitle("Add Person")
self.setModal(True)
self.setMinimumWidth(300)
self._setup_ui()
def _setup_ui(self) -> None:
layout = QVBoxLayout(self)
form = QFormLayout()
self._name_edit = QLineEdit()
self._name_edit.setPlaceholderText("Full name")
self._email_edit = QLineEdit()
self._email_edit.setPlaceholderText("email@example.com")
form.addRow("Name:", self._name_edit)
form.addRow("Email:", self._email_edit)
layout.addLayout(form)
# Standard OK / Cancel buttons
buttons = QDialogButtonBox(
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel
)
buttons.accepted.connect(self._on_accept)
buttons.rejected.connect(self.reject)
layout.addWidget(buttons)
def _on_accept(self) -> None:
if not self._name_edit.text().strip():
QMessageBox.warning(self, "Validation", "Name is required.")
return
self.accept() # closes dialog and returns QDialog.Accepted
def name(self) -> str:
return self._name_edit.text().strip()
def email(self) -> str:
return self._email_edit.text().strip()
Use `QDialogButtonBox` for standard buttons — it respects platform button order conventions (OK/Cancel vs Cancel/OK).
使用`QDialogButtonBox`创建标准按钮——它会遵循平台的按钮顺序惯例(如OK/Cancel 或 Cancel/OK)。undefinedundefined
For modeless dialogs, keep a reference to prevent garbage collection:
```python
self._settings_dialog = SettingsDialog(self)
self._settings_dialog.show()
对于非模态对话框,需保留引用以避免被垃圾回收:
```python
self._settings_dialog = SettingsDialog(self)
self._settings_dialog.show()class SettingsDialog(QDialog):
settings_changed = Signal(dict)
def __init__(self, settings: dict, parent=None) -> None:
super().__init__(parent)
self._original = dict(settings)
self._current = dict(settings)
self._setup_ui(settings)
def _on_change(self) -> None:
self._current["theme"] = self._theme_combo.currentText()
self.settings_changed.emit(self._current) # live preview
def reject(self) -> None:
self.settings_changed.emit(self._original) # restore on cancel
super().reject()class SettingsDialog(QDialog):
settings_changed = Signal(dict)
def __init__(self, settings: dict, parent=None) -> None:
super().__init__(parent)
self._original = dict(settings)
self._current = dict(settings)
self._setup_ui(settings)
def _on_change(self) -> None:
self._current["theme"] = self._theme_combo.currentText()
self.settings_changed.emit(self._current) # live preview
def reject(self) -> None:
self.settings_changed.emit(self._original) # restore on cancel
super().reject()