PySide2-uic 为不相关的小部件生成递增的项目索引

PySide2-uic generates increasing item index for unrelated widgets

我有一个关于 pyside2-uic 的问题,因为它似乎生成了错误代码。 首先,有没有办法在 Qt Designer 中禁用翻译?禁用每个字符串的可翻译复选框很痛苦,我发现 retranslateUi 代码有点乱。

现在是真正的问题:如您所见,pyside2-uic 似乎增加了项目位置计数,即使对于不相关的小部件也是如此。如果我创建一个 subclass 并执行它,像 combox_wb 这样的组合框不带有默认值,因为项目 7-9 可能不存在并且可能应该是 0-2。 (我知道您可以将它们留空并在继承自 uic 生成的 class 中手动进行设置)。

def retranslateUi(self, MainWindow):
    self.gbox_settings.setTitle(QtWidgets.QApplication.translate("MainWindow", "settings", None, -1))
    self.combox_colorspace.setItemText(0, QtWidgets.QApplication.translate("MainWindow", "0   Raw color (unique to each camera)", None, -1))
    self.combox_colorspace.setItemText(1, QtWidgets.QApplication.translate("MainWindow", "1   sRGB D65 (default)", None, -1))
    self.combox_colorspace.setItemText(2, QtWidgets.QApplication.translate("MainWindow", "2   Adobe RGB (1998) D65", None, -1))
    self.combox_colorspace.setItemText(3, QtWidgets.QApplication.translate("MainWindow", "3   Wide Gamut RGB D65", None, -1))
    self.combox_colorspace.setItemText(4, QtWidgets.QApplication.translate("MainWindow", "4   Kodak ProPhoto RGB D65", None, -1))
    self.combox_colorspace.setItemText(5, QtWidgets.QApplication.translate("MainWindow", "5   XYZ", None, -1))
    self.combox_colorspace.setItemText(6, QtWidgets.QApplication.translate("MainWindow", "6   ACES", None, -1))
    self.combox_wb.setItemText(7, QtWidgets.QApplication.translate("MainWindow", "ignore camera white balance", None, -1))
    self.combox_wb.setItemText(8, QtWidgets.QApplication.translate("MainWindow", "use camera white balance", None, -1))
    self.combox_wb.setItemText(9, QtWidgets.QApplication.translate("MainWindow", "specify  own raw white balance", None, -1))
    self.combox_gamma.setItemText(10, QtWidgets.QApplication.translate("MainWindow", "linear", None, -1))
    self.combox_gamma.setItemText(11, QtWidgets.QApplication.translate("MainWindow", "sRGB", None, -1))
    self.combox_bitdepth.setItemText(12, QtWidgets.QApplication.translate("MainWindow", "16-bit", None, -1))
    self.combox_bitdepth.setItemText(13, QtWidgets.QApplication.translate("MainWindow", "8-bit", None, -1))
    self.tbtn_dcrawexec.setText(QtWidgets.QApplication.translate("MainWindow", "...", None, -1))

这是由 PySide 中的错误引起的。当使用 PyQt 或旧的 PySide 时,相同的 ui 文件将按预期工作(即每个小部件的索引从零重新开始)。查看 pyside2uic/uiparser.py 的代码表明他们使用共享属性 (self.item_nr) 进行索引 - 但它只会为树小部件重置为零。

我建议你创建一个 bug report

刚拿到新版PySide2。好像现在修好了。如果使用pip,只需运行"pip install --upgrade PySide2"升级即可。