crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Не увеличивается значение переменной, Python
zuze
  опции профиля:
сообщение 10.6.2013, 9:08
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


В приведённом коде значение frame прекрасно меняется на единицу.
Получается:
1. 1 срабатывание таймера: в File 1 существует (имя первого файла), в File 2 не существует имени файла.
2. 2 срабатывание таймера: в File 1 существует (имя первого файла), в File 2 существует (имя второго файла).
3. 3 срабатывание таймера: в File 1 существует (имя второго файла), в File 2 существует (имя третьего файла).
и так далее.

def MyTimer(self):
        global frame
        global NF
        global dir
        global bf
        global bn
        global im1
        global im2

        if frame == 669:
            frame = 0

        if self.ui.checkBox_4.isChecked():
            if frame == 0:
                os.chdir(dir)
                try:
                    fp = open(NF[frame], 'rb')
                except IOError:
                    print "Cannot open file read!"

                self.ui.lineEdit_2.setText(NF[frame])

                fp.seek(0, 2)
                size = fp.tell()
                fp.seek(size - (492*720), 0)

                for j in range(0, 720, 1):
                    bf.append([])
                    for i in range(491, -1, -1):
                        bf[j].append(struct.unpack("B", fp.read(1))[0])

                for j in range(0, 720, 1):
                    for i in range(491, -1, -1):
                        im1.setPixel(j, i, QtGui.QColor(bf[j][-i], bf[j][-i], bf[j][-i], 255).rgba())

            fp.close()

            if int((2*self.MyRadianToGradus(phi))+0.5) == 720:
                try:
                    fp = open(NF[frame], 'rb')

                except IOError:
                    print "Cannot open file read!"

                self.ui.lineEdit_2.setText(NF[frame])

                fp.seek(0, 2)
                size = fp.tell()
                fp.seek(size - (492*720), 0)

                for j in range(0, 720, 1):
                    bf.append([])
                    for i in range(491, -1, -1):
                        bf[j].append(struct.unpack("B", fp.read(1))[0])

                for j in range(0, 720, 1):
                    for i in range(491, -1, -1):
                        im1.setPixel(j, i, QtGui.QColor(bf[j][-i], bf[j][-i], bf[j][-i], 255).rgba())

                fp.close()

                try:
                    fp = open(NF[++frame], 'rb')

                except IOError:
                    print "Cannot open file read!"

                self.ui.lineEdit_3.setText(NF[frame])

                fp.seek(0, 2)
                size = fp.tell()
                fp.seek(size - (492*720), 0)

                for j in range(0, 720, 1):
                    bn.append([])
                    for i in range(491, -1, -1):
                        bn[j].append(struct.unpack("B", fp.read(1))[0])

                for j in range(0, 720, 1):
                    for i in range(491, -1, -1):
                        im2.setPixel(j, i, QtGui.QColor(bn[j][-i], bn[j][-i], bn[j][-i], 255).rgba())

                fp.close()


Но когда я делаю вот такой код, то значение переменной frame не меняется:

def MyTimer(self):
        global frame
        global NF
        global dir
        global bf
        global bn
        global im1
        global im2

        if frame == 669:
            frame = 0

        if self.ui.checkBox_4.isChecked():
            if frame == 0:
                os.chdir(dir)

                fp = QtCore.QFile(NF[frame])
                try:
                    fp.open(fp.ReadOnly)

                except IOError:
                    print "Cannot open file read!"

                self.ui.lineEdit_2.setText(NF[frame])

                mydata1 = QtCore.QByteArray()
                mydata1 = fp.readAll()

                fp.close()

                im1 = QtGui.QImage.fromData(mydata1, "BMP")

            if int((2*self.MyRadianToGradus(phi))+0.5) == 720:
                fp = QtCore.QFile(NF[frame])
                try:
                    fp.open(fp.ReadOnly)

                except IOError:
                    print "Cannot open file read!"

                self.ui.lineEdit_2.setText(NF[frame])

                mydata1 = QtCore.QByteArray()
                mydata1 = fp.readAll()

                fp.close()

                im1 = QtGui.QImage.fromData(mydata1, "BMP")

                fp = QtCore.QFile(NF[++frame])
                try:
                    fp.open(fp.ReadOnly)

                except IOError:
                    print "Cannot open file read!"

                self.ui.lineEdit_3.setText(NF[frame])

                mydata2 = QtCore.QByteArray()
                mydata2 = fp.readAll()

                fp.close()

                im2 = QtGui.QImage.fromData(mydata2, "BMP")


Вроде я логигу кода не менял, а изминил только метод открытия файла и последующей обработки. Почему же это произошло и как поправить?

Сообщение отредактировал Litkevich Yuriy - 10.6.2013, 13:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 10.6.2013, 12:26
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Задача решена.

Надо было сделать так:

frame = frame + 1
fp = QtCore.QFile(NF[frame])


Но с чем этого связанно не понимаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.6.2013, 13:03
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  



ОФФ:

за каким лешим тебе try-except, если QtCore.QFile.open не роняет программу, а возвращает нормальное true/false?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 11:24