QWizard取消注册已注册字段

2024-09-27 20:17:39 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个使用PyQt和Qwizard的应用程序(不能发布真实的应用程序,因为不允许使用im),这就是结构

我希望我在第1页的行编辑将是必填字段,除非选中复选框

我尝试注册行编辑字段,但当我选中复选框时,它不允许我继续

我想做一个逻辑,如果检查然后注册,但我没有找到如何取消注册

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_())

Tags: importselfaddsettingsinitsavebuttonico
1条回答
网友
1楼 · 发布于 2024-09-27 20:17:39

不幸的是,无法注销字段

一种可能的解决方案是重写isComplete方法,该方法确定是否启用了“Next”(下一步)或“Finish”(完成)按钮,并且要对其进行更新,必须发出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_())

相关问题 更多 >

    热门问题