Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 22, 2010 17:04:37

AndreySCB
От:
Зарегистрирован: 2009-12-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с begin_redraw()

Доброго времени суток! Для плавности прокрутки в классе программы использовал begin_redraw() end_redraw(). При выходе из класса - программа “вылетает” вообще (как в классе отдельно, так и при работе в связке с другими классами). До использования begin_redraw() end_redraw() все работало нормально. Подскажите, что я делаю не так? А отказываться от begin_redraw() не хочется…

#-*-coding:utf-8-*-

import appuifw,e32,graphics,key_codes,pickle,globalui

#--

zamok=e32.Ao_lock()

#--

my_data_path=('c:\\Data\\strelki\\')

my_path=('c:\\Data\\python\\graph\\')

#-------------------------------------------------------------------------------

class Static:

def __init__(self):

self.schetcic=0

self.previos_pos=320

self.znak=''

self.nom_str=1

self.flag=False

#--

appuifw.app.screen='full'

appuifw.app.orientation='landscape'

appuifw.app.directional_pad=False

#--

self.img_statist_form=graphics.Image.open(my_path+'statist_form.jpg')

self.img_exit_button_down=graphics.Image.open(my_path+'exit_button_down.jpg')

#--

self.form=appuifw.Canvas(redraw_callback=self.redraw,

event_callback=self.drag_event)

appuifw.app.body=self.form

#-----------------------------------------------------------------------

#--кнопка выхода в меню

self.form.bind(key_codes.EButton1Up,self.exit_button_down,((560,0),(640,60)))

self.form.bind(key_codes.EButton1Down,self.exit_button_up,((560,0),(640,60)))

#--

self.read_file()

self.draw()

self.sort_data()

#---------------------------------------------------------------------------

def draw(self):

self.form.blit(self.img_statist_form)

#-------------

if self.flag==True:

self.sort_data()

#---------------------------------------------------------------------------

def redraw(self,event):

self.draw()

#---------------------------------------------------------------------------

def drag_event(self,event):

if event['type']==key_codes.EButton1Up:

self.schetcic=0

#-------------

if event['type']==key_codes.EDrag:

current_pos=event['pos'][0]

#-------------

if current_pos>self.previos_pos:

self.schetcic+=1

self.previos_pos=current_pos

#-------------

if self.schetcic==50:

self.znak='+'

self.sort_data()

self.schetcic=0

#-------------

if current_pos<self.previos_pos:

self.schetcic-=1

self.previos_pos=current_pos

#-------------

if self.schetcic==-50:

self.znak='-'

self.sort_data()

self.schetcic=0

#---------------------------------------------------------------------------

def read_file(self):

self.data_list=[]

file1=open(my_data_path+'strelka.txt','r')

self.data_list=pickle.Unpickler(file1)

self.data_list=self.data_list.load()

file1.close()

#---------------------------------------------------------------------------

def sort_data(self):

self.temp_data_list=[]

self.temp_typle=()

#-------------

if self.znak=='+':

self.nom_str+=1

#-------------

if self.nom_str>4:

self.nom_str=1

#-------------

if self.znak=='-':

self.nom_str-=1

#-------------

if self.nom_str<1:

self.nom_str=4

#-------------

for t in self.data_list:

#-------------

if t[3]==str(self.nom_str).decode('utf-8'):

self.temp_typle=(t[4],t[5])

self.temp_data_list.append(self.temp_typle)

self.flag=True

self.print_data()

#---------------------------------------------------------------------------

def print_data(self):

point_width=6

len_data=0

len_data=len(self.temp_data_list)-1

kol_point=(600/len_data)

x=30









#----------------------------------------------------------------------

#+++++++++++++BEGIN_REDRAW и END_REDRAW ИСПОЛЬЗУЮТСЯ ЗДЕСЬ +++++++++++++

#----------------------------------------------------------------------

self.form.begin_redraw() #-#############################

self.form.blit(self.img_statist_form) #-#############################

self.form.end_redraw() #-#############################

#-----------------------------------------------------------------------

#-----------------------------------------------------------------------

#-----------------------------------------------------------------------









self.form.text((510,35),text=str(self.nom_str).decode('utf-8'),

fill=(255,255,255),

font=(u'Series60Sans',25,1))

#-------------

for m in self.temp_data_list:

y1=450-((int(m[0]))*10)

y2=450-((int(m[1]))*10)

#-------------

if y1==y2:

point_width=10

else:

point_width=6

self.form.point((x,y2),outline=(0,0,255),width=point_width)

self.form.point((x,y1),outline=(255,0,0),width=6)

x+=kol_point

#-------------

x1=30

x2=0

n=0

#-------------

for m in range(len(self.temp_data_list)):

#-------------

if n>(len(self.temp_data_list))-2:

return

x2=x1+kol_point

n=m+1

y1=450-(int(self.temp_data_list[m][0])*10)

yy1=450-(int(self.temp_data_list[n][0])*10)

y2=450-(int(self.temp_data_list[m][1])*10)

yy2=450-(int(self.temp_data_list[n][1])*10)

self.form.line((x1,y2,x2,yy2),outline=(0,0,255),width=2)

self.form.line((x1,y1,x2,yy1),outline=(255,0,0),width=2)

x1+=kol_point

#---------------------------------------------------------------------------

def exit_button_down(self,event):

self.form.blit(self.img_exit_button_down,target=(570,0))

def exit_button_up(self,event):

self.form.blit(self.img_statist_form)

zamok.signal()

#-------------------------------------------------------------------------------

stat1=Static()

zamok.wait()



Отредактировано (Ноя. 22, 2010 17:10:51)

Офлайн

#2 Ноя. 24, 2010 18:08:19

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Проблемы с begin_redraw()

вырежьте пожалуйста лишнее, и приведите минимальный код, чтоб можно было разобраться, не копаясь во всем коде…



Офлайн

#3 Ноя. 29, 2010 10:01:40

AndreySCB
От:
Зарегистрирован: 2009-12-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с begin_redraw()

Прошу прощения за длинный код. Просто я подумал, что это принципиально для поиска ошибки. На данный момент код урезан до процедуры, где используется
begin и end_redraw() непосредственно. Но что то мне подсказывает, что это проблемы в моем телефоне…

 
'''
При событии EDrag, в эту функцию посупает список self.temp_data_list ,
который по сути дела содержит координаты по оси у для построения точек и линий графика.
При выходе из программы интерпретатор игнорирует zamok.wait() и вылетает из консоли.
'''
def print_data(self):
point_width=6
len_data=len(self.temp_data_list)-1
#-----------
self.form.begin_redraw() #-#############################
self.form.blit(self.img_statist_form) #-здесь оборачиваю функцию перерисовки экрана в begin и end_redraw()
self.form.end_redraw() #-#############################
#------------
for m in self.temp_data_list:
y1=450-((int(m[0]))*10)
y2=450-((int(m[1]))*10)
#-------------
if y1==y2:
point_width=10
else:
point_width=6
self.form.point((x,y2),outline=(0,0,255),width=point_width)
self.form.point((x,y1),outline=(255,0,0),width=6)
x+=kol_point
#-------------
x1=30
x2=0
n=0
#-------------
for m in range(len(self.temp_data_list)):
#-------------
if n>(len(self.temp_data_list))-2:
return
x2=x1+kol_point
n=m+1
y1=450-(int(self.temp_data_list[m][0])*10)
yy1=450-(int(self.temp_data_list[n][0])*10)
y2=450-(int(self.temp_data_list[m][1])*10)
yy2=450-(int(self.temp_data_list[n][1])*10)
self.form.line((x1,y2,x2,yy2),outline=(0,0,255),width=2)
self.form.line((x1,y1,x2,yy1),outline=(255,0,0),width=2)
x1+=kol_point



Офлайн

#4 Ноя. 29, 2010 17:00:43

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Проблемы с begin_redraw()

blit'ы в функциях exit_button_up и def exit_button_down попробуйте тоже в begin_redraw и end_redraw обернуть.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version