#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(), и она не устанавливаеттекст поля со списком соответствует значениям, указанным в предыдущей строке печати.