Форум сайта python.su
roll_pages=2 current_roll_page=[1] def move_right(event): if current_roll_page[0]!=roll_pages: f=open('db','r') lenght=len(f.readlines()) if (ceil(lenght/20)): for j in range(int(con.roll_width/10)): for i in range(1,41): roll.update() roll.move(i,-10,0) sleep(0.002) current_roll_page[0]+=1 print(current_roll_page[0]) return current_roll_page[0] root.bind('<Left>',move_right)
Отредактировано vito-Z80 (Июнь 1, 2016 20:41:20)
Офлайн
частенько простые ошибки правятся дольше сложных.
current_roll_page-=1 нужно было поднять выше
Подскажите как правильно обработать событие что бы получить результат из функции посредством return?
root.bind('<Right>',move_right)
пробовал так:
return_value=root.bind('<Right>',move_right) - не то
root.bind('<Right>',return_value=move_right) - не работает
Может использовать lambda, но не могу понять как ее прикрутить.
Отредактировано vito-Z80 (Июнь 2, 2016 15:36:08)
Офлайн
Это же гуй. Здесь событие не должно ничего возвращать. Оно должно просто менять состояние…
Офлайн
4kpt_IVТак и надо изменить состояние, но то что надо изменить находится в глобальной области видимости и по этому могу изменить только содержимое списков. Я так понимаю так и должно быть, или есть другой подход.
Это же гуй. Здесь событие не должно ничего возвращать. Оно должно просто менять состояние…
Офлайн
Пробрасывайте через lambda. Другого посоветовать не могу. Можно еще использовать специальные переменные tkinter типа StrVar, IntVar…
Офлайн
4kpt_IVНе могу привинтить к лямбде.
Пробрасывайте через lambda. Другого посоветовать не могу. Можно еще использовать специальные переменные tkinter типа StrVar, IntVar…
Отредактировано vito-Z80 (Июнь 3, 2016 15:01:12)
Офлайн
Это хоть отдаленно похоже на класс в том виде в котором его надо использовать?
import tkinter class MyCanvas(tkinter.Canvas): def __init__(self,root,width=10,height=10,bg='black',**kwargs): super().__init__(root,width=width,height=height,bg=bg,**kwargs) class MyBut(): def __init__(self,my_canvas,x=10,y=10,text='',fill='black',font='arial 10',bg='white'): self.my_canvas=my_canvas self.text=text self.x=x self.y=y self.bg=bg self.font=font self.fill=fill f_width=font.split(' ') f_width=int(f_width[1]) t_width=len(self.text) self.rect_height=f_width*2 self.rect_width=t_width*f_width-(t_width*2) self.text_x=x+(self.rect_width/2) self.text_y=y+(self.rect_height/2) self.rect_ret=self.rect() self.txt_ret=self.txt() my_canvas.tag_bind(self.rect_ret,'<ButtonPress-1>',self.clickOn) my_canvas.tag_bind(self.txt_ret,'<ButtonPress-1>',self.clickOn) my_canvas.tag_bind(self.rect_ret,'<ButtonRelease-1>',self.clickOff) my_canvas.tag_bind(self.txt_ret,'<ButtonRelease-1>',self.clickOff) def rect(self): return my_canvas.create_rectangle(self.x,self.y,self.x+self.rect_width,self.y+self.rect_height,fill=self.bg) def txt(self): return my_canvas.create_text(self.text_x,self.text_y,text=self.text,font=self.font,anchor='center',fill=self.fill) def clickOn(self,event): my_canvas.itemconfigure(self.rect_ret,fill=self.fill) my_canvas.itemconfigure(self.txt_ret,fill=self.bg) def clickOff(self,event): my_canvas.itemconfigure(self.rect_ret,fill=self.bg) my_canvas.itemconfigure(self.txt_ret,fill=self.fill) return my_canvas.itemcget(self.txt_ret,option='text') if __name__ == '__main__': root = tkinter.Tk() my_canvas=MyCanvas(root,600,500,bg='green') my_rect=MyBut(my_canvas,text='Hello World',fill='seagreen',bg='orange',font='arial 14') my_canvas.pack() root.mainloop()
Офлайн