2017-03-27 1 views
0

텍스트를 동일한 위치에 유지하면서 화면의 그래픽을 스크롤하려고합니다. 텍스트는 마우스의 위치를 ​​보여줍니다. 나는 화면 스크롤의 반대 방향으로 텍스트를 스크롤하는 아이디어에 대해 생각해 봤지만 더 쉬운 방법이 있는지 확실하지 않고 텍스트를 스크롤해야한다면 확실하지 않습니다. 초기 텍스트 포인터를 설정하여 다시 돌아와서 리콜/리셋 할 수있는 방법. 나는 단지 가까운 장래에 다른 일을하는 것과 같은 자세를 보이기를 바랄뿐입니다.화면 이동시 텍스트 위치를 고정하는 Python Tkinter

class Example(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 

     self.keys = dict.fromkeys(('Left', 'Right', 'Up', 'Down')) 

     self.canvas = tk.Canvas(self, background="bisque", width=700, height=700) 
     self.canvas.pack(fill="both", expand=True) 
     self.canvas.configure(scrollregion=(-1000, -1000, 1000, 1000)) 

     self.looper() # start the looping 

    def keypress(self,event): 
     if event.keysym in self.keys: 
     # event type 2 is key down, type 3 is key up 
      self.keys[event.keysym] = event.type == '2' 

    def looper(self): 
     if self.keys['Up']: 
      self.canvas.yview_scroll(-2,'units') 
     if self.keys['Down']: 
      self.canvas.yview_scroll(2,'units') 
     if self.keys['Left']: 
      self.canvas.xview_scroll(-2,'units') 
     if self.keys['Right']: 
      self.canvas.xview_scroll(2,'units') 

     self.after(5, self.looper) # set the refresh rate here ... ie 20 milliseconds. Smaller number means faster scrolling 

    def on_press(self, event): 
     self.last_x = event.x 
     self.last_y = event.y 
     self.startx, self.starty = self.canvas.canvasx(event.x),self.canvas.canvasy(event.y) 

    def on_motion(self, event): 
     self.canvas.delete("sx") 
     self.startx, self.starty = self.canvas.canvasx(event.x),self.canvas.canvasy(event.y) 
     px = round(-(((1000-self.startx) * .00015) + 69.3),5) 
     py = round((45.05-((1000+self.starty) * .00015)),5) 
     self.canvas.create_text(400,-400, text = str(px), fill = "black", tags = "sx") 
     self.canvas.create_text(475,-400, text = str(py), fill = "black", tags = "sx") 

    def button_motion(self,event): 
     delta_x = event.x - self.last_x 
     delta_y = event.y - self.last_y 
     self.last_x = event.x 
     self.last_y = event.y 

     self.canvas.xview_scroll(-delta_x, "units") 
     self.canvas.yview_scroll(-delta_y, "units") 

if __name__ == "__main__": 
    root = tk.Tk() 
    Example(root).pack(fill="both", expand=True) 
    root.mainloop() 

답변

0

가장 간단한 솔루션은 때 캔버스 스크롤 스크롤되지 않도록 텍스트를 캔버스에 포함되지 않은 위젯을 사용하는 것입니다. 부모가 캔버스 인 Label을 만든 다음 place을 사용하여 캔버스 상단에 레이블을 겹쳐 넣습니다.

관련 문제