Не удается присвоить правильное значение QCombBox с помощью PySide

#python #pyside

#python #pyside

Вопрос:

Поскольку Pyside нельзя настроить, я решил вручную записать все мои системные параметры в файл, который при открытии через QFileDialog можно использовать для заполнения всех QWidgets соответствующими data…so пока все работает, за исключением одного из QWidgets, dataBox , который является QComboBox в отдельномкласс.

Как вы увидите в следующем коде, я помещаю строки печати, чтобы увидеть значения списка, в котором хранятся параметры. В стандартном выводе вы можете видеть, что все значения такие, какими они должны быть, но QComboBox.setEditText() метод не присваивает значение должным образом, поэтому в поле со списком отображается текст, который для него установлен … изображения, которые я связал, показывают две вещи о случае «OpenFile»: текст, отображаемый в QComboBox( dataBox ) расположен странно (он работает, но должен быть центрирован), и в двух отдельных экземплярах FigureCanvas этого отображения данные отображают одни и те же данные (поскольку полям присваивается одно и то же значение, которое также является первым значением в dictionary/QComboBox ). В этих двух экземплярах dataBox должны быть DA_0 и DA_1, но у них обоих есть DA_0.

Я попробовал другой метод QComboBox класса, setItemText() , но он даже не отображал никаких данных и не заполнял dataBox.

Вот ссылки на скриншоты графического интерфейса как в случае сохранения файла, так и в случае OpenFile.

Вот соответствующий код и полный код. Я прошу прощения за форматирование в сути … копирование из TextEdit не сработало, так и будет.

Этот метод, openFile , правильно извлекает соответствующие данные из файла, но метод setEditText() неправильно устанавливает dataBox для их отображения. Будьте предельно ясны, значение DA_1 печатается правильно прямо перед его добавлением в поле со списком, но как только оно добавляется в поле со списком, что-то идет не так…это две наиболее важные строки кода для наблюдения:

print "dataBox value ", self.graphValues[x] # works fine
self.opts[opt].dataBox.setEditText(self.graphValues[x]) # doesn't work at all

self.opts это словарь строк (имен рисунков / графиков) в паре с экземплярами класса, который обрабатывает настройку параметров построения графиков

dataBox — это QComboBox, который содержит все строки (имена фигур / графиков)

 # Read parameters from file and sets sim/graphValues (1.1)
def openFile(self):
    self.filePath, _= QFileDialog.getOpenFileName(self, 'open file', 
        '~/', 'C Files (*.c);;Simulations (*.sim)' )
    fullPath = self.filePath.split("/")
    title = fullPath[-1]
    self.w.setWindowTitle(title)
    if self.filePath[-4:] == ".sim":
        with open(self.filePath, 'r') as f:
            self.simValues = [""]
            value = f.readline()
            while 1:
                if value != "n":
                    self.simValues.append(value)
                    value = f.readline()
                else: break
            self.graphValues = [""]
            value = f.readline()
            while 1:
                if value != "n":
                    self.graphValues.append(value)
                    value = f.readline()
                else: break
            self.files = f.readlines()
        self.numSim.setText(self.simValues[1])
        self.numTrials.setText(self.simValues[2])
        self.numTicks.setText(self.simValues[3])
        self.numGraphs.setText(self.simValues[4])
        self.dirPath = self.simValues[5]
        x = 1
        for opt in self.opts:
            self.opts[opt].styleSelect.setEditText(str(self.styles[opt]))
            self.opts[opt].dataBox.addItems(self.files)
            if self.opts[opt].styleSelect.currentText() == "1":
                print "dataBox value ", self.graphValues[x]
                self.opts[opt].dataBox.setEditText(self.graphValues[x]);x =1
                print "xlabel value ", self.graphValues[x]
                self.opts[opt].xLabel.setText(self.graphValues[x]);x =1
                print "ylabel value ", self.graphValues[x]
                self.opts[opt].yLabel.setText(self.graphValues[x]);x =1
                print "xrange value ", self.graphValues[x]
                self.opts[opt].xRange.setText(self.graphValues[x]);x =1
                print "yrange value ", self.graphValues[x]
                self.opts[opt].yRange.setText(self.graphValues[x]);x =1
            elif self.opts[opt].styleSelect.currentText() == "2":
                pass
            else:
                pass
        self.plot()
 

Этот метод, SaveFile, на самом деле не обязательно показывать, но я хотел прояснить, что проблема НЕ в записи данных.

 # Saves sim amp; graph values and writes them to file (1.2)
def saveFile(self):
    self.filePath, _= QFileDialog.getSaveFileName(self, 'save file', 
         '~/', 'Simulations (*.sim)' )
    fullPath = self.filePath.split("/")
    title = fullPath[-1]
    self.w.setWindowTitle(title)
    self.simValues = [str(self.numSim.text()),str(self.numTrials.text()), 
                      str(self.numTicks.text()),str(self.numGraphs.text())]
    self.simValues.append(self.dirPath)
    self.graphValues = []
    for opt in self.opts:
        self.styles[opt] = self.opts[opt].styleSelect.currentText()
        if self.opts[opt].styleSelect.currentText() == "1":
            self.graphValues.append(self.opts[opt].dataBox.currentText())
            self.graphValues.append(self.opts[opt].xLabel.text())
            self.graphValues.append(self.opts[opt].yLabel.text())
            self.graphValues.append(self.opts[opt].xRange.text())
            self.graphValues.append(self.opts[opt].yRange.text())
        elif self.opts[opt].styleSelect.currentText() == "2":
            pass
        else:
            pass
    with open(self.filePath, 'w') as f:
        for item in self.simValues:
            f.write(item "n")
        f.write("n")
        for item in self.graphValues:
            f.write(item "n")
        f.write("n")
        for item in self.files:
            f.write(item "n")
 

Вот стандартные строки печати:

 dataBox value  DA_1

xlabel value  other

ylabel value  things

xrange value  len(data)

yrange value  y range

dataBox value  DA_0

xlabel value  some

ylabel value  stuff

xrange value  len(data)

yrange value  y range
 

Комментарии:

1. Что вы подразумеваете под «назначить значение правильно»? setEditText изменяет текст в поле редактирования текста со списком. Вы хотите это сделать?

2. Под «присвоить значение правильно» я подразумеваю изменение текста в поле со списком. Нижние строки печати моего исходного сообщения показывают, что значение dataBox, которое должно быть присвоено Fig2, равно, DA_1 а значение dataBox, которое должно быть присвоено Fig 1, равно DA_0 … тем не менее, строка, следующая сразу за этими строками печати, является той, которая фактически выполняет QComboBox.setEditText(), и она не устанавливаеттекст поля со списком соответствует значениям, указанным в предыдущей строке печати.