Отключить клавишу ввода для следующей кнопки pyqt5 QWizard
Я делаю волшебника в QWizard
я имею QLineEdit
а также QPushButton
# Enter token
self.enter_token_box = QLineEdit()
# Enter token button
self.btn = QPushButton('OK')
# connect button to function, checks the token..
self.btn.clicked.connect(self._EnterToken)
Я вставил в эту строку, которая принимает нажатие клавиши ввода и запускает функцию так же, как нажатие кнопки "ОК".
# Enter key press connection
self.enter_token_box.returnPressed.connect(self._EnterToken)
Проблема в том, что это вызовет ОБА OK
кнопка И Next
кнопка мастера.
MVCE:
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Wizard(QWizard):
def __init__(self, parent=None):
super(Wizard, self).__init__(parent)
self.addPage(EnterToken(self))
self.addPage(ProcessData(self))
class EnterToken(QWizardPage):
def __init__(self, parent=None):
super(EnterToken, self).__init__(parent)
self.setTitle("Enter your token here")
self.setSubTitle(" ")
# Enter Token Widgets
self.label = QLabel()
self.enter_token_box = QLineEdit()
self.btn = QPushButton('OK')
# layout options
layout = QVBoxLayout()
layout.addWidget(self.label)
self.label.setText("Enter Your 12 Digit Code.")
layout.addWidget(self.enter_token_box)
layout.addWidget(self.btn)
# Enter Key TRigger
self.enter_token_box.returnPressed.connect(self._EnterToken)
self.btn.clicked.connect(self._EnterToken)
self.setLayout(layout)
def _EnterToken(self):
""" Method for processing user input after the button is pressed"""
QMessageBox.about(self, "I want only this!!", "I want only you and not the next page!!")
class ProcessData(QWizardPage):
""" Sensor Code Entry """
def __init__(self, parent=None):
super(ProcessData, self).__init__(parent)
# num of logs combo box
self.num_logs_combo = QComboBox(self)
# ~buttons
self.btn = QPushButton('OK')
layout = QVBoxLayout()
layout.addWidget(self.num_logs_combo)
layout.addWidget(self.btn)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
wizard = Wizard()
wizard.show()
sys.exit(app.exec_())
Если вы запустите код выше и нажмите ok
, вы останетесь на странице. То же самое происходит, если у вас есть что-то, кроме QLineEdit
коробка.
Если вы находитесь в QLineEdit
коробка и жмешь Enter
, вы попадете на следующую страницу, а также отобразите окно сообщения.
Как я могу остановить Enter Key
быть связанным с Next
кнопка.
Как я могу получить доступ и переопределить атрибуты для BACK
, NEXT
а также FINISH
кнопки в QWizard
?
1 ответ
Для доступа к кнопкам вы должны использовать button()
метод и передать QWizard::WizardButton
в вашем случае вы должны отключить default
кнопки QPushButton.
class Wizard(QWizard):
def __init__(self, parent=None):
super(Wizard, self).__init__(parent)
self.addPage(EnterToken(self))
self.addPage(ProcessData(self))
def showEvent(self, event):
self.button(QWizard.NextButton).setDefault(False)
super(Wizard, self).showEvent(event)
Обновить:
class Wizard(QWizard):
def __init__(self, parent=None):
super(Wizard, self).__init__(parent)
self.addPage(EnterToken(self))
self.addPage(ProcessData(self))
self.buttons = [self.button(t) for t in (QWizard.NextButton, QWizard.FinishButton)]
for btn in self.buttons:
btn.installEventFilter(self)
def eventFilter(self, obj, event):
if obj in self.buttons and event.type() == QEvent.Show:
obj.setDefault(False)
return super(Wizard, self).eventFilter(obj, event)