Python 根据前面页面中的QCheckBox.isChecked()跳过下一个QWizardPage

Python 根据前面页面中的QCheckBox.isChecked()跳过下一个QWizardPage,python,python-3.x,pyqt,pyqt5,qwizardpage,Python,Python 3.x,Pyqt,Pyqt5,Qwizardpage,我正在使用向导安装下载的软件包。在某个特定点,我想跳过下一个QWizardPage,这取决于是否选中了前面页面上的复选框 我要跳过的页面是InstallPackages类,如果未选中复选框self.withPipCBox,则应跳过该页面 我知道我必须使用QCheckBox.isChecked(),但是如何使用它呢 代码: 从PyQt5导入QtWidgets、QtGui、QtCore 从PyQt5.QtGui导入QIcon 从PyQt5.QtCore导入Qt、QObject、QTimer、QTh

我正在使用向导安装下载的软件包。在某个特定点,我想跳过下一个
QWizardPage
,这取决于是否选中了前面页面上的复选框

我要跳过的页面是InstallPackages
类,如果未选中复选框
self.withPipCBox
,则应跳过该页面

我知道我必须使用
QCheckBox.isChecked()
,但是如何使用它呢


代码:

从PyQt5导入QtWidgets、QtGui、QtCore
从PyQt5.QtGui导入QIcon
从PyQt5.QtCore导入Qt、QObject、QTimer、QThread、pyqtSignal、pyqtSlot
从PyQt5.QtWidgets导入(QApplication、QFileDialog、QGridLayout、QLabel、,
QVBoxLayout、QWizard、QWizardPage、QProgressBar、,
QCheckBox、QLineEdit、QGroupBox、QToolButton、,
QComboBox、QDialog、QHBoxLayout)
类VenvWizard(QWizard):
"""
用于创建和设置虚拟环境的向导。
"""
定义初始化(自):
super()。\uuuu init\uuuuu()
self.setWindowTitle(“Venv向导”)
自我调整大小(535430)
自我移动(578183)
自选表格(
"""
QToolTip{
背景色:rgb(47,52,63);
边界:rgb(47、52、63);
颜色:rgb(210210210);
填充:2px;
不透明度:325
}
"""
)
self.addPage(基本设置())
self.addPage(InstallPackages())
self.addPage(Summary())
类基本设置(QWizardPage):
"""
正在创建的虚拟环境的基本设置。
"""
定义初始化(自):
super()。\uuuu init\uuuuu()
文件夹图标=QIcon.fromTheme(“文件夹”)
self.setTitle(“基本设置”)
self.setSubTitle(“此向导将帮助您创建和设置”
“Python3的虚拟环境。”)
解释器标签=QLabel(“&解释器:”)
self.interprComboBox=QComboBox()
解释器标签setBuddy(self.interprComboBox)
self.interprcombox.addItem(“--”)
venvNameLabel=QLabel(“Venv&name:”)
self.venvNameLineEdit=QLineEdit()
venvNameLabel.setBuddy(self.venvNameLineEdit)
venvLocationLabel=QLabel(“&Location:”)
self.venvLocationLineEdit=QLineEdit()
venvLocationLabel.setBuddy(self.venvLocationLineEdit)
选择FolderToolButton=QToolButton()
选择FolderToolButton。设置固定大小(26、27)
选择FolderToolButton.setIcon(文件夹图标)
选择FolderToolButton.setToolTip(“浏览”)
占位符=QLabel()
#“选项”组框
groupBox=QGroupBox(“选项”)
self.withPipCBox=QCheckBox(“安装和更新&Pip”)
self.sitePackagesCBox=QCheckBox(
“&使系统(全局)站点包目录可供venv使用”)
self.symlinksCBox=QCheckBox(
“尝试符号链接而不是将文件复制到venv(&S))
self.launchVenvCBox=QCheckBox(
“安装后启动带有激活的venv的终端”)
#网格布局
gridLayout=QGridLayout()
addWidget(解释器标签,0,0,1,1)
addWidget(self.interprComboBox,0,1,1,2)
addWidget(venvNameLabel,1,0,1,1)
addWidget(self.venvNameLineEdit,1,1,1,2)
addWidget(venvLocationLabel,2,0,1,1)
gridLayout.addWidget(self.venvLocationLineEdit,2,1,1,1)
addWidget(选择FolderToolButton,2,2,1,1)
addWidget(占位符,3,0,1,2)
addWidget(groupBox,4,0,1,3)
self.setLayout(gridLayout)
#“选项”分组框
groupBoxLayout=QVBoxLayout()
groupBoxLayout.addWidget(self.withPipCBox)
groupBoxLayout.addWidget(self.sitePackagesCBox)
groupBoxLayout.addWidget(self.symlinksBox)
groupBoxLayout.addWidget(self.launchVenvCBox)
groupBox.setLayout(groupBoxLayout)
类安装包(QWizardPage):
"""
通过'pip'将软件包安装到创建的虚拟环境中。
"""
定义初始化(自):
super()。\uuuu init\uuuuu()
self.setTitle(“安装软件包”)
setSubTitle(“指定希望Pip访问的包”
“安装到虚拟环境中。”)
#只是一些测试内容
TestLabel=QLabel(“这是一个测试标签:”,self)
TestLineEdit=QLineEdit(自)
TestLabel.setBuddy(TestLineEdit)
TestLabel2=QLabel(“这是一个测试标签:”,self)
TestLineEdit2=QLineEdit(自)
TestLabel2.setBuddy(TestLineEdit2)
v_布局=QVBoxLayout(自)
v_layout.addWidget(TestLabel)
v_layout.addWidget(TestLineEdit)
v_layout.addWidget(TestLabel2)
v_layout.addWidget(TestLineEdit2)
self.setLayout(v_布局)
def初始化页面(自我):
通过
课程摘要(第页):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.setTitle(“摘要”)
自我设置子标题(……)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=QApplication(sys.argv)
向导=VenvWizard()
wizard.show()
sys.exit(app.exec_())

您需要实现向导页面的
nextId()
,或者向导本身(默认情况下调用
currentPage().nextId()

在第一种情况下,您需要保留或获取对这两个页面的引用,但这也可以通过重写实例的
nextId()
来实现:它是一个虚拟函数,意味着它可以在实例中从向导本身被重写,从而允许您稍微简化一些事情
        basicSettings = BasicSettings()
        self.addPage(basicSettings)
        installId = self.addPage(InstallPackages())
        summaryId = self.addPage(Summary())
        basicSettings.nextId = lambda: installId if basicSettings.interprComboBox.isChecked() else summaryId
class VenvWizard(QWizard):
    def __init__(self):
        super().__init__()
        [...]
        self.basicSettings = BasicSettings()
        self.addPage(self.basicSettings)
        [...]

    def nextId(self):
        if self.currentPage() == self.basicSettings:
            # since python bools can behave as integers, you can add
            # 0 or 1 to the pageId using the isChecked() result
            return self.currentId() + 1 + self.basicSettins.interprComboBox.isChecked()
            # if you need the opposite (skip if unchecked) use this instead
            #return self.currentId() + 1 + (not self.basicSettins.interprComboBox.isChecked())

        return QtWidgets.QWizard.nextId(self)
class VenvWizard(QWizard):
    def __init__(self):
        super().__init__()
        [...]
        self.basicSettings = BasicSettings()
        self.addPage(self.basicSettings)
        self.installId = self.addPage(InstallPackages())
        self.summaryId = 20
        self.setPage(self.summaryId, Summary())

    def nextId(self):
        if self.currentPage() == self.basicSettings:
            if self.basicSettins.interprComboBox.isChecked():
                return self.installId
            return self.summaryId
        return QtWidgets.QWizard.nextId(self)