gpt4 book ai didi

qt - 根据内容的变化从 QWizardPage 动态添加/删除 Finish

转载 作者:行者123 更新时间:2023-12-04 17:01:03 25 4
gpt4 key购买 nike

我正在学习 license wizard 上的教程(使用 PyQt5)尝试学习如何创建非线性向导。但是我似乎陷入了一个问题。

我想要一个带有 QComboBox 的页面,其中所选项目确定包含组合框的当前 QWizardPage 是否是最终页面。

到目前为止,页面包含以下内容:

class CalibrationPageSource(QWizardPage):
def __init__(self, parent):
super(CalibrationPageSource, self).__init__(parent)
self.setTitle('Calibration Wizard')
self.setSubTitle('Select the source for the calibration')

layout = QVBoxLayout()
label = QLabel('''
<ul>
<li><b>From calibration file</b>: browse and select an existing YAML calibration file that contains the camera matrix and distortion coefficients (for example from a previous calibration)</li>
<li><b>From image files</b>: browse and select one or more image files with the calibration pattern visible inside each</li>
<li><b>From stream</b> - if the calibration node is connected to an active <b><i>Device node</i></b> you can use its image stream to interactively calibrate your device</li>
</ul>
''')
label.setWordWrap(True)
layout.addWidget(label)

layout_sources = QHBoxLayout()
label_sources = QLabel('Source:')
self.selection_sources = QComboBox()
self.selection_sources.addItem('Calibration file')
self.selection_sources.addItem('Image files')
self.selection_sources.addItem('Stream')
self.selection_sources.currentIndexChanged['QString'].connect(self.source_changed)
self.selection_sources.setCurrentIndex(1)
layout_sources.addWidget(label_sources)
layout_sources.addWidget(self.selection_sources)
layout.addLayout(layout_sources)

self.setLayout(layout)

@pyqtSlot(str)
def source_changed(self, source):
if source == 'Calibration file':
self.setFinalPage(True)
# TODO Add file dialog
else:
self.setFinalPage(False)
# TODO Remove file dialog (if present)

每当 self.selection_sources 的当前项更改为 Calibration file 时,我想跳过使页面最终化的向导的其余部分。在这种情况下,我想删除 Next 按钮。在所有其他情况下(目前只有两种:Image filesStream)我想让向导正常运行,而不是作为最终页面。

我已经尝试实现自定义 isComplete(...) 但问题是当 时它会禁用 NextFinish >校准文件被选中。我可以忍受禁用的 Next 按钮(而不是完全隐藏它),但禁用的 Finish 在我的情况下基本上没有意义。 Next 按钮的出现让我感到很惊讶。当到达最后一页时,它不应该完全消失吗?

有什么办法解决这个问题吗?我考虑过遍历 QWizardPage 中的项目并手动禁用/隐藏 Next 按钮,但我希​​望有一种更简单、开箱即用的方法去做。在当前状态下,Finish 的动态插入正在运行,但是由于 Next 按钮,向导的转换设置不正确。

最佳答案

这几乎晚了一年,但我想我弄清楚了问题所在。您对 setFinalPage(True) 的调用,只是在您的 QWizardPage 中设置了一个状态标志。它不会自动传播回您的 QWizard

只有一个信号会传回信息:completeChanged .这个名字有点误导,但文档似乎表明如果你正确阅读它们,它就会做你想做的事:

If you reimplement isComplete(), make sure to emit completeChanged() whenever the value of isComplete() changes, to ensure that QWizard updates the enabled or disabled state of its buttons.

事实上,遇到了同样的问题,我能够通过做来修复它

if source == 'Calibration file':    self.setFinalPage(True)    ...else:    self.setFinalPage(False)    ...self.completeChanged.emit()

粗体是新的。在这两种情况下都需要调用它,并且会在您选择不同的选项时将按钮从“下一步”切换到“完成”并返回。

关于qt - 根据内容的变化从 QWizardPage 动态添加/删除 Finish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com