First time I have created a GUI using tkinter in Python. I have worked with wxPython and not had this same issue but I never used a canvas. The thought process behind the canvas is to eventually add animations. I have created a grid layout with one of the grids being a canvas. I am attempting to update a score field using itemconfig with no luck getting the two score fields to update on the canvas. My code is below. Any recommendations for how to update the two scores on a canvas? I want the old score to get removed before the new score is written to the screen. Thanks for taking a look. Forgive the globals, they are to be removed as this progresses.
class Gui(Frame):
def __init__(self, root):
self.root=root
self.initUI()
def initUI(self):
global score1, score2 # these are ints
score1str = str(score1)
score2str = str(score2)
root.title("Table Tennis Scoreboard")
self.canvas = Canvas(root, width=640, height=480, background='green')
self.canvas.grid(row=0,column=1)
self.canvas.create_text(185, 90, anchor=W, font=('Calibri', 20),
text="Let's play Table Tennis!")
self.canvas.create_rectangle(75, 120, 275, 320, outline="red", fill="red")
self.canvas.create_rectangle(370, 120, 565, 320, outline="blue", fill="blue")
self.canvas.create_text(125, 130, anchor=W, font=('Calibri', 20),
text="Player 1")
self.canvas.create_text(425, 130, anchor=W, font=('Calibri', 20),
text="Player 2")
self.score1_id = self.canvas.create_text(135, 250, anchor=W, font=('Arial', 100),
text=score1str)
self.score2_id = self.canvas.create_text(435, 250, anchor=W, font=('Arial', 100),
text=score2str)
frame = Frame(self.root, relief=RAISED, borderwidth=2, background='white')
frame.grid(row=0,column=0)
p1up = Button(frame,text="Player1 +1", height=2, width=10, background='red', command=self.add('one'))
p1up.grid(row = 0,column = 0, padx=10, pady=(20,5))
p1down = Button(frame,text="Player1 -1", height=2, width=10, background='red', command=self.subtract('one'))
p1down.grid(row = 1,column = 0, padx=10, pady=(5,100))
p2up = Button(frame,text="Player2 +1", height=2, width=10, background='blue', command=self.add('two'))
p2up.grid(row = 3,column = 0, padx=10, pady=5)
p2down = Button(frame,text="Player2 -1", height=2, width=10, background='blue', command=self.subtract('two'))
p2down.grid(row = 4,column = 0, padx=10, pady=(5,100))
reset = Button(frame,text="Reset", height=2, width=10, command=self.new_game())
reset.grid(row = 6,column = 0, padx=10, pady=(5,20))
def new_game(self):
global score1, score2 # these are ints
score1 = 0
score2 = 0
self.update_score()
def add(self, player):
global score1, score2 # these are ints
self.player = player
if self.player == 'one':
#if score1 < 11:
score1 += 1
elif self.player == 'two':
#if score2 < 11:
score2 += 1
self.update_score()
return
def subtract(self, player):
global score1, score2 # these are ints
self.player = player
if self.player == 'one':
if score1 > 0:
score1 = score1 - 1
elif self.player == 'two':
if score2 > 0:
score2 -= 1
self.update_score()
return
def update_score(self):
global score1, score2 # these are ints
score1str = str(score1)
score2str = str(score2)
self.canvas.itemconfig(self.score1_id, text=score1str)
self.canvas.itemconfig(self.score2_id, text=score2str)
return
if __name__== '__main__':
root=Tk()
gui=Gui(root)
root.mainloop()