Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单击单选按钮或更改PyQt中的旋转框时,组合框索引值返回默认值0_Python_Pyqt_Pyqt5_Qcombobox_Qradiobutton - Fatal编程技术网

Python 单击单选按钮或更改PyQt中的旋转框时,组合框索引值返回默认值0

Python 单击单选按钮或更改PyQt中的旋转框时,组合框索引值返回默认值0,python,pyqt,pyqt5,qcombobox,qradiobutton,Python,Pyqt,Pyqt5,Qcombobox,Qradiobutton,我正在尝试将一个组合框与PyQt5中的另一个组合框、单选按钮和旋转框连接起来。问题是每次触发最后一个组合框时,我单击单选按钮或另一个组合框,最后一个组合框就会跳转到默认索引0。在我的示例中,最后一个组合框包含RA、RB和RC。如果我单击单选按钮中的R,然后从组合框中选择RC,那么当我更改为T时,它会跳到TA。我想要的是脚本记住选项C,当我在单选按钮中从R更改为T时,相应地返回RC或TC,而不跳到RA或TA。我无法在第一个组合框和旋转框中重新创建跳转到默认索引值,但我希望您理解我的问题。 如何存储

我正在尝试将一个组合框与PyQt5中的另一个组合框、单选按钮和旋转框连接起来。问题是每次触发最后一个组合框时,我单击单选按钮或另一个组合框,最后一个组合框就会跳转到默认索引0。在我的示例中,最后一个组合框包含RA、RB和RC。如果我单击单选按钮中的R,然后从组合框中选择RC,那么当我更改为T时,它会跳到TA。我想要的是脚本记住选项C,当我在单选按钮中从R更改为T时,相应地返回RC或TC,而不跳到RA或TA。我无法在第一个组合框和旋转框中重新创建跳转到默认索引值,但我希望您理解我的问题。 如何存储从组合框中选择的组合框索引,何时调用它以避免返回0

我尝试过setCurrentIndex,但它只在我打开程序时起作用。每次我在组合框中选择一个项目时,它都会变回currentIndex,但不会变回selected选项

我也尝试过CurrentIndexchange,但它似乎不能正常工作。 有什么想法吗

这是我重新创建的代码的一部分:

import sys
from functools import partial

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, \
    QHBoxLayout, QRadioButton, QMainWindow


class ComboWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(ComboWidget, self).__init__(parent)

        self.radio_buttons = {}
        self.combo_boxes = {}
        self.setGeometry(50, 50, 500, 500)

        layout = QtWidgets.QHBoxLayout(self)
        radio_button_names = ['R',
                              'T',
                              ]
        for name in radio_button_names:
            self.radio_buttons[name] = QtWidgets.QRadioButton(name)
            self.radio_buttons[name].toggled.connect(self._radio_button_toggled)
            layout.addWidget(self.radio_buttons[name])

        combo_box_names = ['RT', 'select_plot_type']
        for name in combo_box_names:
            self.combo_boxes[name] = QtWidgets.QComboBox()
            self.combo_boxes[name].currentIndexChanged.connect(partial(self.indexChanged, name))
            layout.addWidget(self.combo_boxes[name])
            self.indexChanged(name, self.combo_boxes[name].currentIndex())
        self.combo_boxes['RT'].addItems(['R', 'T'])
        self.combo_boxes['select_plot_type'].addItems(['R A', 'R B', 'R C'])

        self.show()

    def indexChanged(self, name, combo_box_index):
        print('combo box changed')
        if combo_box_index == -1:
            return
        if name == 'select_plot_type':
            self.combo_boxes['select_plot_type'].itemData(combo_box_index)

        if name == 'RT':
            self.combo_boxes['RT'].itemData(combo_box_index)

    def _radio_button_toggled(self):
        self.combo_boxes['RT'].clear()
        self.combo_boxes['select_plot_type'].clear()
        if self.radio_buttons['R'].isChecked()==True:
            self.combo_boxes['RT'].addItems(['R1', 'R2', 'R3'])
            self.combo_boxes['select_plot_type'].addItems(['R A', 'R B', 'R C'])
        elif self.radio_buttons['T'].isChecked()==True:
            self.combo_boxes['RT'].addItems(['T1', 'T2', 'T3'])
            self.combo_boxes['select_plot_type'].addItems(['T A', 'T B', 'T C'])
        else:
            return


def main():
    app = QtWidgets.QApplication(sys.argv)
    w = ComboWidget()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

在您的解决方案中,您正在删除和添加项,以便在默认情况下,它将建立在导致您观察到的问题的初始位置。一种可能的解决方案是在删除项之前存储currentIndex,然后在建立新项时将其设置为currentIndex,但更可靠的解决方案是使用具有多列的模型,并根据选中的QRadioButton更改modelColumn

导入系统 从PyQt5导入QtGui、QtWidgets 类ComboWidget(QtWidgets.QWidget): def uuu init uuu(self,parent=None): 超级(ComboWidget,self)。\uuuuu初始化\uuuuuuuu(父级) 选项=[“R”,“T”] self.setGeometry(50、50、500、500) layout=qtwidts.QHBoxLayout(self) group=qtwidts.QButtonGroup(self) 对于i,枚举中的选项(选项): radiobutton=qtwidts.QRadioButton(选项) 组添加按钮(radiobutton,i) layout.addWidget(单选按钮) 如果i==0: radiobutton.setChecked(真) 对于(“{}1”、“{2”、“{3”)、({A”、“{B”、“{C”)中的值: combobox=qtwidts.QComboBox() self.fill_模型(组合框、值、选项) group.buttonClicked[int].connect(combobox.setModelColumn) combobox.setModelColumn(group.checkedId()) layout.addWidget(组合框) def fill_模型(自身、组合框、值、选项): model=QtGui.QStandardItemModel(self) 对于i,枚举中的文本(值): 对于j,枚举中的选项(选项): it=QtGui.QStandardItem(text.format(选项)) model.setItem(i,j,it) combobox.setModel(模型) def main(): app=qtwidts.QApplication(sys.argv) w=ComboWidget() w、 show() sys.exit(app.exec_()) 如果名称=“\uuuuu main\uuuuuuuu”: main()
粘贴您尝试的代码。这非常有帮助!非常感谢。我只是想知道您是否可以给我举一个不太可靠的例子,您提到存储currentIndex并在选择新项目后重新设置。我不想使用模型,因为我的代码已经很复杂了,但我会尝试一下。