2013-02-18 3 views
0

그래서 내가 배우고 파이썬 나를 나에게 tkinker 사용하여 라벨을 만들 수있는 두 가지 방법으로 제공 가르치는 책의 변경 :파이썬 - 객체 라벨 버튼을 이동하고 속성

self.canvas.create_text(30,10,text="Welcome",tags="text") 

&

을 이전 예에서
self.lbl = Label(frame1, text = "Welcome") 

쉽게 이동을한다 :

self.canvas.move("text", 1, 0) 

를 후자에 exampl 전자는, 그 배경 색상의 변화하는 것은 쉽다 :

self.lbl["bg"] = "red" 

그러나 나는 적어도 점진적으로 이동하지 않는 방법, 이동 및 그 중 하나의 예에서 배경 색상의 변경을 모두 방법을 알고 을한다. 나는 이것을 할 수있다 :

self.lbl.place(x=2) 

내가 x 좌표를 미리 얻을 수 없다면, 나는 한 번만 움직일 수있다. 나는 그것을 미리 설정할 수 있었지만 가능하다면 그 옵션을 피하고 싶습니다.

+1

실제로 달성하려는 것은 무엇입니까? 캔버스를 가로 질러 움직이는 텍스트를 애니메이트하려고합니까, 아니면 버튼과 라벨이있는 전통적인 GUI를 제작하고 있습니까? 이 두 시나리오에 대해 완전히 다른 두 가지 대답을 얻을 수 있습니다. –

+0

글쎄, 내가 데려 갈 수업을위한거야. 이미 "x 좌표 우선 설정"방법을 사용하여 과제를 제출 했으므로 부정 행위가 아니므로 더 나은 방법을 원합니다. 그것이 무엇인지, 해당 버튼을 누르면 오른쪽과 왼쪽으로 이동할 수있는 레이블, 배경색을 설정할 수있는 라디오 단추가 있습니다. –

답변

3

두 가지 방법이 있습니다.

첫째, Canvas 텍스트에는 배경이 없지만 직사각형으로 나만의 텍스트를 만들 수 있습니다.

text = self.canvas.create_text(30, 10, text="Welcome", tags="text") 
# The canvas.bbox method returns the corner coordinates of the provided item id. 
rect = self.canvas.create_rectangle(self.canvas.bbox(text), fill='red') 
# Then you need to reposition the rectangle so that it is behind the text. 
self.canvas.lower(rect, text) 

여기에서 질문에서 언급 한 것과 같은 방식으로 이동하십시오. 텍스트와 사각형 모두에 그룹 태그를 추가하면 두 항목을 따로 따로 이동하지 않아도됩니다.

둘째, .winfo_x().winfo_y() 메소드를 사용하여 위젯의 현재 x, y 좌표를 가져올 수 있습니다.

self.lbl.place(x=self.lbl.winfo_x()+2) 

나는 이동 방법은 캔버스의 경우와 같은 단위로 위젯을 이동하는 방법을 알고하지 않습니다 그래서 Label를 이동하는 추가/뺄셈의 간단한 문제가된다.

가장 좋은 점은 무엇인지 생각할 수 없습니다. Canvas을 사용하면 텍스트가 화면 밖으로 스크롤되기 때문에 창에있을 수있는 다른 위젯과 겹칠 수 없다는 뜻입니다. ttk 버전 Label을 사용하면 스타일이 꽤 직선이 아닙니다. 앞으로, 그것은 어렵지 않다.

+0

대단히 감사합니다. winfo_x와 winfo_y는 내가 찾고있는 것처럼 보입니다. 그것은 그것을 증분으로 움직이지 않습니까? –

+1

@MarcelMarino 내가 말한 의미는 그 메소드가 현재의 x, y 좌표를주고, 증가분을 캔버스에 추가하는 반면 Canvas.move는 자신의 증가분을 취하는 것이다. –

+0

아, 알겠습니다. 감사! –