2014-04-29 3 views
1

나는 대부분의 아케이드처럼 사용자가 적을 (명백하게) 죽일 때마다 업데이트되는 화면에 점수 표시가 필요하다는 tkinter gui를 사용하여 아케이드 게임을하고 있습니다.tkinter를 사용하여 파이썬에서 표시/업데이트 점수

저는 캔버스에 텍스트를 만들고 다른 것을 만드는 함수를 호출하지만 이번에는 점수 값 (전역 변수)이 업데이트됩니다.

올바른 방법으로 수행하려면 이전에 작성된 텍스트를 삭제 한 다음 올바르게 표시하려면 새 텍스트를 작성해야합니다 (그렇지 않은 경우). ... 등, 다른, 다른 이상 텍스트 하나의 스택과 같은 코드 그래서 여기

을 것 수 :

from tkinter import * 

Root= Tk() 
canvas= Canvas(Root,width=500, height=500, bg="white") 
canvas.pack() 

Score= 0 #This is the global with the score value 

J=canvas.create_text(100,100, text=("Score", Score), font=("Comic Sans", 50)) #This is the first appereance of the score on screen, or the first creation. 

def change(): #Here's where I change the score value and create the new text 
    global Score 
    Score+=1 
    J=canvas.create_text(100,100, text=("Score", Score), font=("Comic Sans", 50)) 

def changee(): #And this one, is supossed to work deleting the "J" everytime it is called, but it only works the first time it is called with the first text 
    canvas.delete(J) 
    print("del") 

def do(): #This one calls the other two in a button (Because I need to call them like this on the actual game code 
    change() 
    changee() 

B= Button(canvas, text= "change it", command=do) 
B.place(x=300,y=300) 

그래서 난 그냥 전역 변수로 J을 넣을 수 알지만, 게임 코드에서 함수가 Toplevel()을 호출하고 withdraw()을 호출하는 다른 함수 안에 있기 때문에 그렇게 할 수 없습니다 왜냐하면 내가한다면 캔버스가 아직 만들어지지 않았기 때문입니다. 왜냐하면 캔버스가 아직 만들어지지 않았기 때문입니다.

global J을 사용하지 않고도 수행하려는 작업을 수행 할 수있는 방법이 있습니까? 또는 그것을하는 다른 쉬운 방법?

감사합니다.

그리고 btw, 내 eng 기술을 변명 ... 나는 그들이 빨아 알아.

PD : 사용 파이썬 당신은이 목적을 위해 Label를 사용해야합니다

+0

'changee()'와 똑같은 이름을 가진 두 개의 메소드가 있다는 것을 알고 계십니까? – Gogo

+0

어리석은 붙여 넣기, 미안 해요 그리고 그것을 지적 해 주셔서 감사합니다! 지금 텍스트를 편집 할 것입니다. 편집 : 그래서 이제는 맞습니다. 고맙습니다! –

+0

'class' 사용을 고려해야합니다. 'class'를 사용하면 모든 것이 더 쉬울 것입니다. – Lafexlos

답변

0

당신은 캔버스 항목의 텍스트를 변경하려면 itemconfig를 사용할 수 있습니다

canvas.itemconfig(J, text=Score) 

지금까지 J라는 이름의 전역 변수를 만드는 등 ...이 Tkinter는 관련 문제가되지 않습니다. 가장 좋은 해결책은 객체 지향 접근 방식으로 전환하는 것입니다. J은 일부 클래스의 속성입니다.

1

3.3.5 RC1. 변수 텍스트를 사용하여 언제든지 값을 변경할 수 있습니다.

이의 작은 예를 보자 :
var = StringVar() 
label = Label(root, textvariable=var) 

var.set("Hey!? How are you doing?") 
label.pack() 

지금 당신은 당신이 원하는 언제든지 원하는 무엇이든에 set 수 있습니다. var.set("my text") 만하면됩니다. 당신 싶어 그것은 단지 당신이 Bryan Oakley 대답을 참조 할 수 있습니다 캔버스를 사용하여이 작업을 수행 할 경우

:

참고로 당신은 here

편집 볼 수 있습니다.

+0

나는 그 방법을 시도했다! 그리고 그것은 효과가 있었지만 두 번째 침입자가 죽을 때까지 점수가 업데이트되지 않은 첫 번째 침입자를 죽일 때 큰 문제가있었습니다.어쨌든, 둘 다 나를 도왔습니다! 고마워요! –

+0

처음에 설정하지 않아야합니다. 어쨌든 브라이언의 대답은 당신을 위해 일했습니다. – Gogo