Я пытаюсь соединить поле со списком с другим полем со списком, переключателями и полями прокрутки в PyQt5. Проблема заключается в том, что каждый раз, когда запускается последнее поле со списком, и я нажимаю переключатели или другое поле со списком, последнее поле со списком переходит на индекс по умолчанию 0. В моем примере последнее поле со списком содержит RA, RB и R C. Если я нажимаю R в переключателе и затем выбираю R C из поля со списком, то, когда я изменяю на T, он переходит к TA. Я хочу, чтобы скрипт запоминал параметр C, и когда я переключаюсь с R на T в переключателях, возвращает R C или T C соответственно, без перехода к RA или TA. Я не смог воссоздать переход к значению индекса по умолчанию в первом поле со списком, ни в окнах прокрутки, но я надеюсь, что вы понимаете мою проблему. Как сохранить индекс поля со списком, выбранный из поля со списком, и когда я могу вызвать его, чтобы он не возвращался к 0?
Я пробовал setCurrentIndex, но он работает только при открытии программы. Он меняется на currentIndex каждый раз, когда я выбираю элемент в поле со списком, но не на выбранный параметр.
Я также пробовал currentIndexChanged, но, похоже, он не работает должным образом. Любые идеи?
Это часть моего воссозданного кода:
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()