2013-07-02 3 views
1

Tkinter로 만든 캔버스 내부에 정수에 대한 사용자 입력 상자를 만들고 싶습니다. 내가 어떻게이 일을 할 것인가?파이썬 - Tkinter 캔버스 내 텍스트 입력

def gamescreen(): 
    photo = PhotoImage(file="gamescreen.gif") 
    canvas.bind("<Button-1>", buttonclick_gamescreen) 
    canvas.pack(expand = YES, fill = BOTH) 
    canvas.create_image(1, 1, image = photo, anchor = NW) 
    e1 = Entry(canvas) 
    e2 = Entry(canvas) 
    game1 = PhotoImage(file="1.gif") 
    canvas.create_image(30, 65, image = game1, anchor = NW) 
    canvas.create_window(window = e1, x=10, y=10) 
    canvas.create_window(window = e2 , x=400, y=10)  
    canvas.update() 
    window.mainloop() 

이것은 현재 가지고있는 내용이지만 캔버스의 아무 곳에서도 입력란이 나타나지 않습니다. 아마 이것이 파이썬으로 게임을 만드는 가장 효율적인 방법은 아니지만 다른 방법으로는 익숙하지 않다는 것을 알고 있습니다.

도움 주셔서 감사합니다.

편집 : 제공된 제안 사항으로 코드를 업데이트했습니다. 내가 잘못 무엇인지 알아 냈어 좋아,이 X =와 y를 제거해야 = 그냥이 : 지금이

canvas.create_window(window = e1, x=10, y=10) 
canvas.create_window(window = e2, x=400, y=10) 

편집 아래 라인에서 발생하는

IndexError: tuple index out of range 

에 문제가 좌표 자체. 입력 상자가 나타납니다.

+2

코드를 기반으로 게임을 만들려면 Pygame (http://pygame.org)을 확인해야합니다. –

+0

또는 gtk를 사용하지 않는 이유는 무엇입니까? http://python-gtk-3-tutorial.readthedocs.org/en/latest/ – NoBugs

+0

답장을 보내 주셔서 감사합니다.하지만 고교 평가를 위해 파이 게임 또는 gtk를 사용하는 법을 배울 수 있는지 잘 모르겠습니다. 시각. – ThatsNotMyName

답변

3

튜플이 실제로 무엇인지에 대해 더 많이 읽고 오류를 해결할 수있었습니다.

x = 및 y =를 제거하여 창 좌표가 그 자체가되도록했습니다.

0

e1과 e2의 주석 처리를 제거하십시오. .pack() 기능을 사용해야합니다.

e1.pack() 
e2.pack() 

이렇게하면 화면에 표시됩니다. 나머지는 나에게 달려 있습니다.

편집 : 또한 canvas.mainloop()하지 않아야하나요? 창 정의 또는 캔버스입니까?

+0

답장을 보내 주셔서 감사합니다. 입력 상자를 표시 할 수 있었지만 이제는 캔버스에 놓인 이미지를 대체하는 것처럼 보입니다. 해결책을 찾기 위해 계속 노력할 것입니다. 메인 서브 루틴에 정의 된 창과 캔버스가 있습니다. – ThatsNotMyName

+0

팩은 OP가 원하는 것을 거의하지 않을 것입니다. 캔버스 엔트리를 배치하지 않습니다. 엔트리 위젯에 맞게 축소 할 캔버스가 생성되며 엔트리 위젯은 캔버스의 내용과 함께 스크롤되지 않습니다. –

2

create_window을 사용하여 캔버스 내에 위젯을 배치 할 수 있습니다.

e1 = Entry(canvas) 
canvas.create_window(window=e1, 400, 10) 
+1

답변 해 주셔서 감사합니다.하지만 다른 오류가 발생했습니다. 이번에는 을 표시합니다. "IndexError : 튜플 색인이 범위를 벗어났습니다." Google에서 오류 메시지를 검색했지만 관련 항목을 찾지 못했습니다. :/ – ThatsNotMyName

+0

답을 수정하십시오. –

+0

@ReutSharabani : 수정 됨. 실수에 대해 알려 주셔서 감사합니다. –

관련 문제