Python 禁用下一步按钮pyqt5 QQ向导的enterkey
我正在Python 禁用下一步按钮pyqt5 QQ向导的enterkey,python,pyqt,pyqt5,qpushbutton,qwizard,Python,Pyqt,Pyqt5,Qpushbutton,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) 我在这一行中输入了一个回车键,并运行与单击“O
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)
我在这一行中输入了一个回车键,并运行与单击“OK”按钮相同的功能
问题是它将触发向导的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_())
如果运行上述代码并单击确定
,您将保留在页面上。如果选择了QLineEdit
框之外的任何内容,也会发生同样的情况
如果您在QLineEdit
框中并按Enter
,您将进入下一页并显示消息框
如何阻止Enter键链接到Next
按钮
如何访问和覆盖QWizard
中的BACK
、NEXT
和FINISH
按钮的属性?要访问按钮,必须使用按钮()
方法并传递QWizard::WizardButton
,在您的情况下,必须禁用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)
你可以提供一个,我不能复制你的问题。公平点!!我已经更新了我的答案!我以前试过setAutoDefault
和setDefault
,但它在页面类中<代码>设置默认值
在向导
类中可以完美工作@johnashu如果你是对的,请同时尝试这两种方法,并在复制时删除不正确的一种方法。效果很好。。如何覆盖finish按钮?我的意思是,我添加了相同的自动和不自动功能,并将NextButton更改为FinishButton,它仍然突出显示finish按钮。非常优雅!。。这是完美的,而且对于肾盂疗法来说更有意义!:)
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)