Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- try:
- from tkinter import *
- from tkinter import messagebox
- except ImportError:
- from tkinter import *
- from tkinter import messagebox
- # For menubar to quit
- def quit_application():
- quit()
- # Check if three X or O in a row
- def is_won():
- if (l1.cget('text') == 'X') & (l2.cget('text') == 'X') & (l3.cget('text') == 'X'):
- l1.config(bg='green')
- l2.config(bg='green')
- l3.config(bg='green')
- show_winner('X')
- elif (l4.cget('text') == 'X') & (l5.cget('text') == 'X') & (l6.cget('text') == 'X'):
- l4.config(bg='green')
- l5.config(bg='green')
- l6.config(bg='green')
- show_winner('X')
- elif (l7.cget('text') == 'X') & (l8.cget('text') == 'X') & (l9.cget('text') == 'X'):
- l7.config(bg='green')
- l8.config(bg='green')
- l9.config(bg='green')
- show_winner('X')
- elif (l1.cget('text') == 'X') & (l4.cget('text') == 'X') & (l7.cget('text') == 'X'):
- l1.config(bg='green')
- l4.config(bg='green')
- l7.config(bg='green')
- show_winner('X')
- elif (l2.cget('text') == 'X') & (l5.cget('text') == 'X') & (l8.cget('text') == 'X'):
- l2.config(bg='green')
- l5.config(bg='green')
- l8.config(bg='green')
- show_winner('X')
- elif (l3.cget('text') == 'X') & (l6.cget('text') == 'X') & (l9.cget('text') == 'X'):
- l3.config(bg='green')
- l6.config(bg='green')
- l9.config(bg='green')
- show_winner('X')
- elif (l1.cget('text') == 'X') & (l5.cget('text') == 'X') & (l9.cget('text') == 'X'):
- l1.config(bg='green')
- l5.config(bg='green')
- l9.config(bg='green')
- show_winner('X')
- elif (l3.cget('text') == 'X') & (l5.cget('text') == 'X') & (l7.cget('text') == 'X'):
- l3.config(bg='green')
- l5.config(bg='green')
- l7.config(bg='green')
- show_winner('X')
- elif (l1.cget('text') == 'O') & (l2.cget('text') == 'O') & (l3.cget('text') == 'O'):
- l1.config(bg='green')
- l2.config(bg='green')
- l3.config(bg='green')
- show_winner('O')
- elif (l4.cget('text') == 'O') & (l5.cget('text') == 'O') & (l6.cget('text') == 'O'):
- l4.config(bg='green')
- l5.config(bg='green')
- l6.config(bg='green')
- show_winner('O')
- elif (l7.cget('text') == 'O') & (l8.cget('text') == 'O') & (l9.cget('text') == 'O'):
- l7.config(bg='green')
- l8.config(bg='green')
- l9.config(bg='green')
- show_winner('O')
- elif (l1.cget('text') == 'O') & (l4.cget('text') == 'O') & (l7.cget('text') == 'O'):
- l1.config(bg='green')
- l4.config(bg='green')
- l7.config(bg='green')
- show_winner('O')
- elif (l2.cget('text') == 'O') & (l5.cget('text') == 'O') & (l8.cget('text') == 'O'):
- l2.config(bg='green')
- l5.config(bg='green')
- l8.config(bg='green')
- show_winner('O')
- elif (l3.cget('text') == 'O') & (l6.cget('text') == 'O') & (l9.cget('text') == 'O'):
- l3.config(bg='green')
- l6.config(bg='green')
- l9.config(bg='green')
- show_winner('O')
- elif (l1.cget('text') == 'O') & (l5.cget('text') == 'O') & (l9.cget('text') == 'O'):
- l1.config(bg='green')
- l5.config(bg='green')
- l9.config(bg='green')
- show_winner('O')
- elif (l3.cget('text') == 'O') & (l5.cget('text') == 'O') & (l7.cget('text') == 'O'):
- l3.config(bg='green')
- l5.config(bg='green')
- l7.config(bg='green')
- show_winner('O')
- elif (
- ((l1.cget('text') == 'O') or (l1.cget('text') == 'X')) and
- ((l2.cget('text') == 'O') or (l2.cget('text') == 'X')) and
- ((l3.cget('text') == 'O') or (l3.cget('text') == 'X')) and
- ((l4.cget('text') == 'O') or (l4.cget('text') == 'X')) and
- ((l5.cget('text') == 'O') or (l5.cget('text') == 'X')) and
- ((l6.cget('text') == 'O') or (l6.cget('text') == 'X')) and
- ((l7.cget('text') == 'O') or (l7.cget('text') == 'X')) and
- ((l8.cget('text') == 'O') or (l8.cget('text') == 'X')) and
- ((l9.cget('text') == 'O') or (l9.cget('text') == 'X'))
- ):
- show_winner('No one')
- # Show winner window
- def show_winner(winner):
- messagebox.showinfo(title='Game is finished', message=f'{winner} has won the game. Congratulation')
- root.destroy()
- # If pressed, change label to X and make buttons disappear
- def hide_button_x(button_x, button_o, label):
- button_x.pack_forget()
- button_o.pack_forget()
- if label == l1:
- label_text1.set('X')
- elif label == l2:
- label_text2.set('X')
- elif label == l3:
- label_text3.set('X')
- elif label == l4:
- label_text4.set('X')
- elif label == l5:
- label_text5.set('X')
- elif label == l6:
- label_text6.set('X')
- elif label == l7:
- label_text7.set('X')
- elif label == l8:
- label_text8.set('X')
- elif label == l9:
- label_text9.set('X')
- is_won()
- # If pressed, change label to O and make buttons disappear
- def hide_button_o(button_x, button_o, label):
- button_x.pack_forget()
- button_o.pack_forget()
- if label == l1:
- label_text1.set('O')
- elif label == l2:
- label_text2.set('O')
- elif label == l3:
- label_text3.set('O')
- elif label == l4:
- label_text4.set('O')
- elif label == l5:
- label_text5.set('O')
- elif label == l6:
- label_text6.set('O')
- elif label == l7:
- label_text7.set('O')
- elif label == l8:
- label_text8.set('O')
- elif label == l9:
- label_text9.set('O')
- is_won()
- root = Tk()
- # Menubar to Quit the game
- menuBar = Menu(root)
- root.config(menu=menuBar)
- subMenuFile = Menu(menuBar, tearoff=0)
- menuBar.add_cascade(label='File', menu=subMenuFile)
- subMenuFile.add_command(label='Quit', command=quit_application)
- # Creating a 3x3 grid
- f1 = Frame(root)
- f1.grid(row=0, column=0)
- f2 = Frame(root)
- f2.grid(row=0, column=1)
- f3 = Frame(root)
- f3.grid(row=0, column=2)
- f4 = Frame(root)
- f4.grid(row=1, column=0)
- f5 = Frame(root)
- f5.grid(row=1, column=1)
- f6 = Frame(root)
- f6.grid(row=1, column=2)
- f7 = Frame(root)
- f7.grid(row=2, column=0)
- f8 = Frame(root)
- f8.grid(row=2, column=1)
- f9 = Frame(root)
- f9.grid(row=2, column=2)
- # Label to show X or O if clicked, ? if unselected
- label_text1 = StringVar()
- label_text1.set('?')
- label_text2 = StringVar()
- label_text2.set('?')
- label_text3 = StringVar()
- label_text3.set('?')
- label_text4 = StringVar()
- label_text4.set('?')
- label_text5 = StringVar()
- label_text5.set('?')
- label_text6 = StringVar()
- label_text6.set('?')
- label_text7 = StringVar()
- label_text7.set('?')
- label_text8 = StringVar()
- label_text8.set('?')
- label_text9 = StringVar()
- label_text9.set('?')
- # Pack label to grid, above buttons
- l1 = Label(f1, textvariable=label_text1)
- l1.pack(side='top')
- l2 = Label(f2, textvariable=label_text2)
- l2.pack(side='top')
- l3 = Label(f3, textvariable=label_text3)
- l3.pack(side='top')
- l4 = Label(f4, textvariable=label_text4)
- l4.pack(side='top')
- l5 = Label(f5, textvariable=label_text5)
- l5.pack(side='top')
- l6 = Label(f6, textvariable=label_text6)
- l6.pack(side='top')
- l7 = Label(f7, textvariable=label_text7)
- l7.pack(side='top')
- l8 = Label(f8, textvariable=label_text8)
- l8.pack(side='top')
- l9 = Label(f9, textvariable=label_text9)
- l9.pack(side='top')
- # Buttons to change label to X in grid
- buttonX00 = Button(f1, text='X', command=lambda: hide_button_x(buttonX00, buttonO00, l1))
- buttonX00.pack(side='left')
- buttonX01 = Button(f2, text='X', command=lambda: hide_button_x(buttonX01, buttonO01, l2))
- buttonX01.pack(side='left')
- buttonX02 = Button(f3, text='X', command=lambda: hide_button_x(buttonX02, buttonO02, l3))
- buttonX02.pack(side='left')
- buttonX10 = Button(f4, text='X', command=lambda: hide_button_x(buttonX10, buttonO10, l4))
- buttonX10.pack(side='left')
- buttonX11 = Button(f5, text='X', command=lambda: hide_button_x(buttonX11, buttonO11, l5))
- buttonX11.pack(side='left')
- buttonX12 = Button(f6, text='X', command=lambda: hide_button_x(buttonX12, buttonO12, l6))
- buttonX12.pack(side='left')
- buttonX20 = Button(f7, text='X', command=lambda: hide_button_x(buttonX20, buttonO20, l7))
- buttonX20.pack(side='left')
- buttonX21 = Button(f8, text='X', command=lambda: hide_button_x(buttonX21, buttonO21, l8))
- buttonX21.pack(side='left')
- buttonX22 = Button(f9, text='X', command=lambda: hide_button_x(buttonX22, buttonO22, l9))
- buttonX22.pack(side='left')
- # Buttons to chance label to O in grid
- buttonO00 = Button(f1, text='O', command=lambda: hide_button_o(buttonX00, buttonO00, l1), state='disabled')
- buttonO00.pack(side='left')
- buttonO01 = Button(f2, text='O', command=lambda: hide_button_o(buttonX01, buttonO01, l2), state='disabled')
- buttonO01.pack(side='left')
- buttonO02 = Button(f3, text='O', command=lambda: hide_button_o(buttonX02, buttonO02, l3), state='disabled')
- buttonO02.pack(side='left')
- buttonO10 = Button(f4, text='O', command=lambda: hide_button_o(buttonX10, buttonO10, l4), state='disabled')
- buttonO10.pack(side='left')
- buttonO11 = Button(f5, text='O', command=lambda: hide_button_o(buttonX11, buttonO11, l5), state='disabled')
- buttonO11.pack(side='left')
- buttonO12 = Button(f6, text='O', command=lambda: hide_button_o(buttonX12, buttonO12, l6), state='disabled')
- buttonO12.pack(side='left')
- buttonO20 = Button(f7, text='O', command=lambda: hide_button_o(buttonX20, buttonO20, l7), state='disabled')
- buttonO20.pack(side='left')
- buttonO21 = Button(f8, text='O', command=lambda: hide_button_o(buttonX21, buttonO21, l8), state='disabled')
- buttonO21.pack(side='left')
- buttonO22 = Button(f9, text='O', command=lambda: hide_button_o(buttonX22, buttonO22, l9), state='disabled')
- buttonO22.pack(side='left')
- # Create the window
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment