Какой сигнал у кнопки Apply в QDialogButtonBox?
Как запустить функцию по нажатию на кнопку Apply в QDialogButtonBox?
В QDialogButtonBox для того, чтобы выполнить функцию, нажав на кнопку Ok надо написать:
def button_action_ok():
...
buttonBox.accepted.connect(button_action_ok)
Для клавиши Close:
def button_action_close():
...
buttonBox.rejected.connect(button_action_close)
А какой код надо написать чтобы запускать функцию, нажимая на кнопку Apply?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
enum QDialogButtonBox::ButtonRole
Это перечисление описывает роли, которые можно использовать для описания кнопок в блоке кнопок. Комбинации этих ролей используются как флаги для описания различных аспектов их поведения.
QDialogButtonBox::Appl- кнопка "Apply", определенная с помощью ApplyRole.
from PyQt5.Qt import *
class ModelessDialog(QDialog):
def __init__(self, part, threshold, parent=None):
super().__init__(parent)
self.setWindowTitle("Baseline")
self.setGeometry(800, 275, 300, 200)
self.part = part
self.threshold = threshold
self.threshNew = 4.4
self.parent = parent
label = QLabel("Part : {}\nThreshold : {}".format(
self.part, self.threshold))
self.label2 = QLabel("ThreshNew : {:,.2f}".format(self.threshNew))
self.spinBox = QDoubleSpinBox()
self.spinBox.setMinimum(-2.3)
self.spinBox.setMaximum(99)
self.spinBox.setValue(self.threshNew)
self.spinBox.setSingleStep(0.02)
self.spinBox.valueChanged.connect(self.valueChang)
buttonBox = QDialogButtonBox(
QDialogButtonBox.Ok |
QDialogButtonBox.Cancel |
QDialogButtonBox.Apply
)
layout = QVBoxLayout(self)
layout.addWidget(label)
layout.addWidget(self.label2)
layout.addWidget(self.spinBox)
layout.addWidget(buttonBox)
okBtn = buttonBox.button(QDialogButtonBox.Ok)
okBtn.clicked.connect(self._okBtn)
cancelBtn = buttonBox.button(QDialogButtonBox.Cancel)
cancelBtn.clicked.connect(self.reject)
applyBtn = buttonBox.button(QDialogButtonBox.Apply) # +++
applyBtn.clicked.connect(self._apply) # +++
def _apply(self): # +++
print('Hello Apply')
self.parent.label.setText('Hello Apply')
def _okBtn(self):
text = """
Part : {}
Threshold : {}
ThreshNew : {:,.2f}""".format(
self.part, self.threshold, self.spinBox.value()
)
print(f'{text}')
self.parent.label.setText(text)
def valueChang(self):
self.label2.setText("ThreshNew : {:,.2f}".format(self.spinBox.value()))
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.label = QLabel('Hello Dialog')
button = QPushButton('Open Dialog')
button.clicked.connect(self.showDialog)
layout = QVBoxLayout(self)
layout.addWidget(self.label)
layout.addWidget(button)
def showDialog(self):
self.dialog = ModelessDialog(2, 55.77, self)
self.dialog.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = MainWindow()
w.resize(300, 200)
w.show()
sys.exit(app.exec_())

