QWizard Отменить регистрацию зарегистрированных полей - PullRequest
1 голос
/ 06 мая 2020

Допустим, у меня есть приложение, использующее PyQt и Qwizard (я не могу опубликовать реальное приложение, так как оно не разрешено), и это структура.

Я хочу sh, что мое редактирование строки на странице 1 будет обязательным полем, если не установлен флажок.

Я попытался зарегистрировать поле редактирования строки, но отклонился, когда я установил флажок, он не позвольте мне продолжить.

Я думал о том, чтобы сделать logi c, если отмечен, то зарегистрируйтесь, но я не нашел, как отменить регистрацию.

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QToolBar, QAction, QVBoxLayout, QHBoxLayout, QGridLayout, QLabel,\
    QGroupBox, QWizard, QWizardPage, QPushButton, QLineEdit, QComboBox
import PyQt5.QtGui as QtGui
from PyQt5.QtGui import QFont


class App(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.left = 200
        self.top = 200
        self.width = 640
        self.height = 480
        self.title = "App"
        self.setWindowTitle(self.title)
        self.setWindowIcon(QtGui.QIcon("logo.ico"))
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.toolbar = QToolBar("")

        ########################## ToolbarButtons ###################################
        self.button_add = QAction("Add", self)
        self.button_add.setIcon(QtGui.QIcon("add.ico"))
        self.button_add.setStatusTip("Add stuff")
        self.toolbar.addAction(self.button_add)
        self.button_browse = QAction("Open", self)
        self.button_browse.setIcon(QtGui.QIcon("folder.ico"))
        self.button_browse.setStatusTip("Open stuff")
        self.toolbar.addAction(self.button_browse)
        self.button_save = QAction("Save", self)
        self.button_save.setIcon(QtGui.QIcon("save.ico"))
        self.button_save.setStatusTip("Save stuff")
        self.toolbar.addAction(self.button_save)
        self.button_settings = QAction("Settings", self)
        self.button_settings.setIcon(QtGui.QIcon("settings.ico"))
        self.button_settings.setStatusTip("Set stuff")
        self.toolbar.addAction(self.button_settings)


        self.window_layout = QGridLayout()
        self.setLayout(self.window_layout)
        self.wizard = WizardInit()
        print("Test")
        self.wizard.setWizardStyle(QWizard.ModernStyle)
        self.show()
        self.wizard.show()


class WizardInit(QWizard):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Wizard")
        self.resize(500, 500)
        self.addPage(Page1())


class Page1(QWizardPage):
    def __init__(self):
        super().__init__()
        self.line_edit = QLineEdit()
        self.registerField("Test*", self.line_edit)
        self.check_box = QCheckBox("test_checkbox")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

1 Ответ

1 голос
/ 06 мая 2020

К сожалению, отменить регистрацию полей невозможно.

Возможное решение - переопределить метод isComplete, который определяет, включена ли кнопка «Далее» или «Fini sh», и обновить его, должен быть испущен сигнал completeChanged.

import sys
from PyQt5 import QtWidgets


class Wizard(QtWidgets.QWizard):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Wizard")
        self.resize(500, 500)
        self.addPage(Page1())


class Page1(QtWidgets.QWizardPage):
    def __init__(self):
        super().__init__()
        self.line_edit = QtWidgets.QLineEdit()
        self.check_box = QtWidgets.QCheckBox("test_checkbox")

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.line_edit)
        lay.addWidget(self.check_box)

        self.registerField("Test*", self.line_edit)
        self.check_box.toggled.connect(self.completeChanged)

    def isComplete(self):
        if self.check_box.isChecked():
            return True
        return super().isComplete()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Wizard()
    w.show()
    sys.exit(app.exec_())
...