Feb-12-2021, 09:03 PM
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()