Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не увеличивается значение переменной в Python  (Прочитано 31154 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« : 10-06-2013 07:58 » 

В приведённом коде значение 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")

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

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 10-06-2013 08:14 » 

отслеживать ошибку в чужом коде неблагодарная задача.

Упрощай, и локализуй.


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #2 : 10-06-2013 08:30 » new

Что интересно, что в этом коде на втором срабатывании таймера.

Код:

Код:
fp = open(NF[++frame], 'rb')

++frame равен 1

А в коде:

Код:
fp = QtCore.QFile(NF[++frame])

++frame равен 0

Не понимаю из-за чего это.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-06-2013 08:37 » 

++frame
frame++

Есть отличия? и почему?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 10-06-2013 08:42 » 

Что интересно, что в этом коде на втором срабатывании таймера.

Код:

Код:
fp = open(NF[++frame], 'rb')

++frame равен 1

А в коде:

Код:
fp = QtCore.QFile(NF[++frame])

++frame равен 0

Не понимаю из-за чего это.
Ненавижу такие конструкции.

Лень добавить еще одну строчку?

Но от этого только выиграет  читабельность кода. И уменьшится количество ошибок. И увеличится количество точек локализации.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #5 : 10-06-2013 09:23 » 

++frame
frame++

Есть отличия? и почему?

1. Различия есть.
2. ++frame - переменная frame сначала увеличивается на единицу, а затем используется в выражении. frame++ - переменная frame используется в выражении, а затем увеличивается на единицу.

Лень добавить еще одну строчку?
Но от этого только выиграет  читабельность кода. И уменьшится количество ошибок. И увеличится количество точек локализации.

Большое спасибо! Всё заработало! Но с чем это связано не понимаю.

Сделал так:

Код:
frame = frame + 1
fp = QtCore.QFile(NF[frame])
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 10-06-2013 09:44 » 

Код:
fp = QtCore.QFile(NF[++frame])
Подозреваю, что нужно понимать как происходит передача параметров

Что происходит и в какой момент, что имеет приоритет.
по идее должно сначала ++frame, затем NF[frame], затем QFile(NF[++frame])
Но судя по всему это не происходит, или frame уже недоступен
Но тут еще используется и метод класса...
в отличие от
Код:
fp = open(NF[++frame], 'rb')


но питона я не знаю, и углубляться в это не хочу Жаль

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines