I am having an issue using tk. I have a label that dynamically changes based on conditions. There are at least 5 different conditions that can change the text. They all seem to work except 1. As far as I can tell I have it set-up just like all the others. My code is raw, I am still working on it. I am new and teaching my self so go easy on me :). I am making a tic tac toe game. The problem is in the showWinner function. I cannot get the message2 label to show the winning play. I will try to highlight the problem area. I have some print statements in there to help debug. I am sure things can be cleaned up, I'm just trying to get it working first. It is only set up to test row A, so entering 1 1 X, 1 2 X, and 1 3 X should send you to showWinner where the label should change.
from tkinter import *
from tkinter import ttk
def reset():
pass
def makeList(*args):
gameSpaceValue = list(valueEntry.get())
print(gameSpaceValue)
gameSpaceValue.pop(1)
gameSpaceValue.pop(2)
print(gameSpaceValue)
checkList(gameSpaceValue,gameBoard)
def checkList(gameSpaceValue,gameBaord):
count = 0
error = False
for i in gameSpaceValue:
count+=1
print(count)
if count >=4:
error = True
message2.set(warning1)
if count <=2:
error = True
message2.set(warning2)
if error == False:
try:
str1Check = int(gameSpaceValue[0])
except:
message2.set(warning3)
error = True
if error == False:
try:
str1Check = int(gameSpaceValue[1])
except:
message2.set(warning4)
error = True
if error == False:
letter = gameSpaceValue[2].capitalize()
Letter.set(letter)
if letter == 'X' or letter == 'O':
checkBoard(gameSpaceValue, letter, gameBoard)
else:
message2.set(warning6)
def checkBoard(gameSpaceValue, letter, gameBaord):
if int(gameSpaceValue[0]) == 1:
gameSpaceValue[0] = 0
if int(gameSpaceValue[1]) == 1:
gameSpaceValue[1] = 0
if int(gameSpaceValue[0]) == 2:
gameSpaceValue[0] = 1
if int(gameSpaceValue[1]) == 2:
gameSpaceValue[1] = 1
if int(gameSpaceValue[0]) == 3:
gameSpaceValue[0] = 2
if int(gameSpaceValue[1]) == 3:
gameSpaceValue[1] = 2
gSx = gameSpaceValue[0]
gSy = gameSpaceValue[1]
if gameBoard[gSx][gSy] == ' ':
gameBoard[gSx][gSy] = letter
rowA = gameBoard[0]
rowB = gameBoard[1]
rowC = gameBoard[2]
columnA = [gameBoard[0][0],gameBoard[1][0],gameBoard[2][0]]
columnB = [gameBoard[0][1],gameBoard[1][1],gameBoard[2][1]]
columnC = [gameBoard[0][2],gameBoard[1][2],gameBoard[2][2]]
diagonalA = [gameBoard[0][0],gameBoard[1][1],gameBoard[2][2]]
diagonalB = [gameBoard[0][2],gameBoard[1][1],gameBoard[2][0]]
displayBoard(rowA,rowB,rowC,columnA,columnB,columnC,diagonalA,diagonalB,letter)
value.delete(0,5)
message2.set(warning7)
else:
message2.set(warning5)
def displayBoard(rowA,rowB,rowC,columnA,columnB,columnC,diagonalA,diagonalB,letter):
#strRowA = str(rowA[0]) + ' ' + str(rowA[1]) + ' ' + str(rowA[2])
'''
dispRowA.set(rowA)
dispRowB.set(rowB)
dispRowC.set(rowC)
winningLine = StringVar()
'''
dispA10.set(rowA[0])
dispA11.set(rowA[1])
dispA12.set(rowA[2])
dispB20.set(rowB[0])
dispB21.set(rowB[1])
dispB22.set(rowB[2])
dispC30.set(rowC[0])
dispC31.set(rowC[1])
dispC32.set(rowC[2])
findWinner(rowA,rowB,rowC,columnA,columnB,columnC,diagonalA,diagonalB,letter)
def findWinner(rowA,rowB,rowC,columnA,columnB,columnC,diagonalA,diagonalB,letter):
print('in findwinner', rowA)
won = all(x == letter for x in rowA)
print(won)
if won == True:
winningLine.set(rowA)
showWinner(winningLine, letter)
#winningLine.set(RowA)
#message2.set(winner)
if won != True:
won = all(x == letter for x in rowB)
if won is True:
winningLine.set(RowB)
message2.set(winner)
if won != True:
won = all(x == letter for x in rowC)
if won is True:
winningLine.set(RowC)
message2.set(winner)
if won != True:
won = all(x == letter for x in columnA)
if won is True:
winningLine.set(ColumnA)
message2.set(winner)
if won != True:
won = all(x == letter for x in columnB)
if won is True:
winningLine.set(ColumnB)
message2.set(winner)
if won != True:
won = all(x == letter for x in columnC)
if won is True:
winningLine.set(ColumnC)
message2.set(winner)
if won != True:
won = all(x == letter for x in diagonalA)
if won is True:
winningLine.set(DiagonalA)
message2.set(winner)
if won != True:
won = all(x == letter for x in diagonalB)
if won is True:
winningLine.set(DiagonalB)
message2.set(winner)
[size=x-large]def showWinner(winningLine, letter):
message2.set(winnerRA)[/size]
root = Tk()
root.title("Tic-Tac-Toe")
root.bind("<Return>", makeList)
mainFrame = ttk.Frame(root, padding="3 3 12 12")
mainFrame.grid()
#correctEntries = ['1 1 X','1 2 X','1 3 X','2 1 X','2 2 X','2 3 X','3 1 X','3 2 X','3 3 X','1 1 O','1 2 O','1 3 O',
# '2 1 O','2 2 O','2 3 O','3 1 O','3 2 O','3 3 O']
gameBoard = [[' ',' ',' '],[' ',' ',' '],[' ',' ',' ']]
valueEntry = StringVar()
dispRowA = StringVar()
dispRowB = StringVar()
dispRowC = StringVar()
message1 = StringVar()
[size=x-large]message2 = StringVar()[/size]
letter = StringVar()
Letter = StringVar()
winner = StringVar()
winningLine = StringVar()
dispA10 = StringVar()
dispA11 = StringVar()
dispA12 = StringVar()
dispB20 = StringVar()
dispB21 = StringVar()
dispB22 = StringVar()
dispC30 = StringVar()
dispC31 = StringVar()
dispC32 = StringVar()
[size=x-large]winnerRA = StringVar()[/size]
directions = ('Please enter a 1,2 or 3 for the row, a space, a 1,2 or 3 for the column, a space, and an X or O for the marker.')
warning1 = ('You entered too many characters. Example: 1 1 X')
warning2 = ('You did not enter enough characters. Example: 2 3 O')
warning3 = ('Please enter only a 1,2 or 3 for your row choice.')
warning4 = ('Please enter only a 1,2, or 3 for your column choice.')
warning5 = ('The space you entered is already taken, please choose a different space.')
warning6 = ('Please enter either an X or O for your marker.')
warning7 = (' ')
[size=x-large]winnerRA = ('X player, you are the winner. You won with RowA. Hit reset to play again.')[/size]
RowA = 'Row A'
RowB = 'Row B'
RowC = 'Row C'
ColumnA = 'Column A'
ColumnB = 'Column B'
ColumnC = 'Column C'
DiagonalA = 'Diagonal A'
DiagonalB = 'Diagonal B'
#winner = (Letter,'player, you are the winner. You won with ',winningLine,'. Hit reset to play again.')
message1.set(directions)
directionsLabel = ttk.Label(mainFrame, textvariable = message1)
directionsLabel.grid(column = 2, columnspan = 5, row = 1)
[size=x-large]messageLabel = ttk.Label(mainFrame, textvariable = message2)
messageLabel.grid(column = 2, columnspan = 5, row = 2)[/size]
value = ttk.Entry(mainFrame, width=7, textvariable=valueEntry)
value.focus_set()
value.grid(column = 2, columnspan = 5, row = 3)
enterButton = ttk.Button(mainFrame, text="Enter", command = makeList)
enterButton.grid(column = 2, columnspan = 5, row = 4)
resetButton = ttk.Button(mainFrame,text="Reset",command = reset)
resetButton.grid(column = 2, columnspan = 5, row = 5)
gameFrame = ttk.Frame(mainFrame)
gameFrame.grid(column = 2, columnspan = 5, row = 6)
gameFrame10 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame10.grid(column = 0, row = 1 )
gameFrame11 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame11.grid(column = 1, row = 1)
gameFrame12 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame12.grid(column = 2, row = 1)
gameFrame20 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame20.grid(column = 0, row = 2 )
gameFrame21 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame21.grid(column = 1, row = 2)
gameFrame22 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame22.grid(column = 2, row = 2)
gameFrame30 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame30.grid(column = 0, row = 3 )
gameFrame31 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame31.grid(column = 1, row = 3)
gameFrame32 = ttk.Frame(gameFrame, borderwidth=5, relief="sunken", width=20, height=20)
gameFrame32.grid(column = 2, row = 3)
rowAdisp1 = ttk.Label(gameFrame10, textvariable = dispA10, width = 2)
rowAdisp1.grid()
rowAdisp2 = ttk.Label(gameFrame11, textvariable = dispA11, width = 2)
rowAdisp2.grid()
rowAdisp3 = ttk.Label(gameFrame12, textvariable = dispA12, width = 2)
rowAdisp3.grid()
rowBdisp1 = ttk.Label(gameFrame20, textvariable = dispB20, width = 2)
rowBdisp1.grid()
rowBdisp2 = ttk.Label(gameFrame21, textvariable = dispB21, width = 2)
rowBdisp2.grid()
rowBdisp3 = ttk.Label(gameFrame22, textvariable = dispB22, width = 2)
rowBdisp3.grid()
rowCdisp1 = ttk.Label(gameFrame30, textvariable = dispC30, width = 2)
rowCdisp1.grid()
rowCdisp2 = ttk.Label(gameFrame31, textvariable = dispC31, width = 2)
rowCdisp2.grid()
rowCdisp3 = ttk.Label(gameFrame32, textvariable = dispC32, width = 2)
rowCdisp3.grid()
