Learn how to create a Tambola game using Python Tkinter with our detailed step-by-step guide. Perfect for beginners in Python game development.
Table of Contents
- Introduction to Tambola and Python Tkinter
- Setting Up Your Development Environment
- Full Tambola Game Source Code
- Explanation of Tambola Game Source Code
- Conclusion
1. Introduction to Tambola and Python Tkinter
- Tambola, also known as Bingo in many parts of the world, is a popular game of chance. It involves players marking off numbers on a card as they are drawn randomly by a caller. Creating this game using Python and Tkinter offers a fun way to practice your coding skills and learn about GUI (Graphical User Interface) development in Python.
- Python is a versatile programming language that's perfect for beginners and experienced developers alike. Tkinter is the standard GUI toolkit for Python, providing a simple way to create windows, buttons, and other GUI elements. By combining Python and Tkinter, you can create a visually appealing and interactive Tambola game.
- In this guide, we'll walk you through the process of setting up your development environment, designing the game interface, writing the game logic, and running the game. Whether you're new to Python or looking to expand your skills, this tutorial will help you build a fully functional Tambola game.
2. Setting Up Your Development Environment
Before diving into the code, you need to set up your development environment. This involves installing Python, Tkinter, and an Integrated Development Environment (IDE) such as PyCharm or Visual Studio Code.
- Install Python: Download and install the latest version of Python from the official Python website. Make sure to check the box to add Python to your system PATH during installation.
- Install Tkinter: Tkinter usually comes pre-installed with Python. You can verify this by running
import tkinterin a Python shell. If Tkinter is not installed, you can install it using the commandpip install tk. - Choose an IDE: An IDE will make coding easier by providing syntax highlighting, debugging tools, and other helpful features. PyCharm and Visual Studio Code are both excellent choices for Python development.
Once your environment is set up, create a new project in your chosen IDE. You're now ready to start building your Tambola game.
3. Full Tambola Game Source Code
import tkinter as tk
import random
from tkinter import messagebox as mb
from tkinter import *
x1 = 0
y1 = 0
z1 = 10
q1 = 10
a = 0
player1value = "Player1"
player2value = "Player2"
r1_t1 = 0
r2_t1 = 0
r3_t1 = 0
def tabo_game():
global x1
global y1
global z1
global q1
global player1value
global player2value
player1value = player1value.get()
player2value = player2value.get()
root = tk.Toplevel()
root.geometry("400x400")
root.title('Tambola game')
root.config(bg='white')
root.state('zoomed')
# frame to align the host and the ticket
framehead = tk.Frame(root, borderwidth=0, bg='white', relief='ridge')
framehost = tk.Frame(root, borderwidth=5, bg='white', relief='ridge')
frameticket = tk.Frame(root, borderwidth=5, bg='white', relief='ridge')
frameticket1 = tk.Frame(frameticket, borderwidth=5, bg='white', relief='ridge')
framedeclare = tk.Frame(frameticket, borderwidt=0, bg='white', relief='ridge')
# packing the frame to the proper alignment
framehead.pack(side='top', fill='x')
framehost.pack(side='left', fill='y')
frameticket.pack(side='right', fill='y')
frameticket1.pack(side='top', fill='x')
framedeclare.pack(side='top', fill='both')
tk.Label(framehead, text="Welcome to the Tambola game: -", font='times 15 bold ', bg='white', fg='black',
anchor='nw').pack(fill='x', pady=10)
# creating the host side
x1 = 10
y1 = 10
canvas = tk.Canvas(framehost, width=560, height=500, bg='white')
num = 1
for j in range(9):
for i in range(10):
canvas.create_oval(x1, y1, x1 + 50, y1 + 50, outline='black', width=0, fill='lightblue')
tk.Label(canvas, text=str(num)).place(x=x1 + 16, y=y1 + 16)
# print(f"the value of label = {num} and the value of x1 = {x1} the value of y1 = {y1}")
x1 = x1 + 55
num = num + 1
y1 = y1 + 55
x1 = 10
canvas.pack()
# generating the Ticket1
tk.Label(frameticket1, text=str(player1value), font='times 18 bold', bg='white', fg='red').pack(anchor='nw')
t1 = 10
t2 = 10
ticket1 = tk.Canvas(frameticket1, width=510, height=180, bg='black')
for j in range(3):
for i in range(9):
ticket1.create_rectangle(t1, t2, t1 + 50, t2 + 50, outline='white', fill='lightblue')
tk.Label(ticket1, text="17").place(x=65 + 16, y=10 + 16)
tk.Label(ticket1, text="23").place(x=120 + 16, y=10 + 16)
tk.Label(ticket1, text="42").place(x=230 + 16, y=10 + 16)
tk.Label(ticket1, text="54").place(x=285 + 16, y=10 + 16)
tk.Label(ticket1, text="85").place(x=450 + 16, y=10 + 16)
tk.Label(ticket1, text="4").place(x=10 + 16, y=65 + 16)
tk.Label(ticket1, text="27").place(x=120 + 16, y=65 + 16)
tk.Label(ticket1, text="30").place(x=175 + 16, y=65 + 16)
tk.Label(ticket1, text="58").place(x=285 + 16, y=65 + 16)
tk.Label(ticket1, text="74").place(x=395 + 16, y=65 + 16)
tk.Label(ticket1, text="8").place(x=10 + 16, y=120 + 16)
tk.Label(ticket1, text="33").place(x=175 + 16, y=120 + 16)
tk.Label(ticket1, text="44").place(x=230 + 16, y=120 + 16)
tk.Label(ticket1, text="62").place(x=340 + 16, y=120 + 16)
tk.Label(ticket1, text="87").place(x=450 + 16, y=120 + 16)
# print(f"the number of the block {num} x1 = {x1} y1 = {y1}")
t1 = t1 + 55
t2 = t2 + 55
t1 = 10
ticket1.pack(padx=120)
# generating the Second Ticket
tk.Label(frameticket1, text=str(player2value), font='times 18 bold', bg='white', fg='red').pack(anchor='nw')
t1 = 10
t2 = 10
ticket2 = tk.Canvas(frameticket1, width=510, height=180, bg='black')
for j in range(3):
for i in range(9):
ticket2.create_rectangle(t1, t2, t1 + 50, t2 + 50, outline='white', fill='lightblue')
tk.Label(ticket2, text="16").place(x=65 + 16, y=10 + 16)
tk.Label(ticket2, text="22").place(x=120 + 16, y=10 + 16)
tk.Label(ticket2, text="41").place(x=230 + 16, y=10 + 16)
tk.Label(ticket2, text="60").place(x=340 + 16, y=10 + 16)
tk.Label(ticket2, text="80").place(x=450 + 16, y=10 + 16)
tk.Label(ticket2, text='5').place(x=10 + 16, y=65 + 16)
tk.Label(ticket2, text="26").place(x=120 + 16, y=65 + 16)
tk.Label(ticket2, text="48").place(x=230 + 16, y=65 + 16)
tk.Label(ticket2, text="63").place(x=340 + 16, y=65 + 16)
tk.Label(ticket2, text="83").place(x=450 + 16, y=65 + 16)
tk.Label(ticket2, text="29").place(x=120 + 16, y=120 + 16)
tk.Label(ticket2, text="31").place(x=175 + 16, y=120 + 16)
tk.Label(ticket2, text="57").place(x=285 + 16, y=120 + 16)
tk.Label(ticket2, text="79").place(x=395 + 16, y=120 + 16)
tk.Label(ticket2, text="86").place(x=450 + 16, y=120 + 16)
# print(f"the number of the block {num} x1 = {x1} y1 = {y1}")
t1 = t1 + 55
t2 = t2 + 55
t1 = 10
ticket2.pack(padx=120)
# making the function to correct the first index of the value of y1
# defining the function to get the click to be done
def click_me():
global z1
global q1
global x1
global y1
# Taking the value of main variable to the secondary variable
z1 = x1
q1 = y1
numx = random.randint(0, 9)
numy = random.randint(0, 8)
# again taking the value of the main variable to the secondary variable to fix some bug
z1 = x1
q1 = y1
x1 = 10 + 55 * numx
y1 = 10 + 55 * numy
canvas.create_oval(x1, y1, x1 + 50, y1 + 50, outline='black', width=0, fill='red')
canvas.pack()
# condition to change the color after the second click
canvas.create_oval(z1, q1, z1 + 50, q1 + 50, outline='black', width=0, fill='blue')
canvas.pack()
def commentry():
# creating the variable that will store the value of comment
global a
# creating the commentry Section
if x1 == 230 and y1 == 65:
mb.showinfo(parent=root, title='Commentry',
message=' The day we celebrate independence day! \nThe Number is 15 ')
elif x1 == 285 and y1 == 10:
# labelVar.set('And that is a Sixer, hit by Sehwag! \n The Number is 6')
mb.showinfo(parent=root, title='Commentry',
message='And that is a Sixer, hit by Sehwag! \n The Number is 6')
elif x1 == 175 and y1 == 10:
# labelVar.set('A Boundary Hit by sachin ! \n The number is 4 ')
mb.showinfo(parent=root, title='Commentry', message='A Boundary Hit by sachin ! \n The number is 4 ')
elif x1 == 340 and y1 == 10:
mb.showinfo(parent=root, title='Commentry', message='Single Hockey Stick ! \n The number is 7 ')
elif x1 == 285 and y1 == 120:
mb.showinfo(parent=root, title='Commentry', message='Republic day ! \n The number is 26 ')
elif x1 == 340 and y1 == 395:
mb.showinfo(parent=root, title='Commentry', message='Pair Of Hockey Stick ! \n The number is 77 ')
elif x1 == 65 and y1 == 10:
mb.showinfo(parent=root, title='Commentry', message='A day after New Year ! \n The number is 2')
elif x1 == 505 and y1 == 285:
mb.showinfo(parent=root, title='Commentry', message='Retirement Day ! \n The Number is 60')
else:
pass
commentry()
# conditional statement of the Ticket 1
def condi_ticket1():
global r1_t1
global r2_t1
global r3_t1
# -----------------------------------------------------------Variables To Drive the Condition of the winner Declaration------------------
# condition variables for Ticket one
c_1 = 0
c_2 = 0
c_3 = 0
c_4 = 0
c_5 = 0
c_6 = 0
c_7 = 0
c_8 = 0
c_9 = 0
c_10 = 0
c_11 = 0
c_12 = 0
c_13 = 0
c_14 = 0
c_15 = 0
if x1 == 340 and y1 == 65:
if c_1 == 0:
r1_t1 += 65
else:
pass
c_1 = 1
ticket1.create_rectangle(65, 10, 65 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 120 and y1 == 120:
if c_2 == 0:
r1_t1 += 120
else:
pass
c_2 = 1
ticket1.create_rectangle(120, 10, 120 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 65 and y1 == 230:
if c_3 == 0:
r1_t1 += 230
else:
pass
c_3 = 1
ticket1.create_rectangle(230, 10, 230 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 175 and y1 == 285:
if c_4 == 0:
r1_t1 += 285
else:
pass
c_4 = 1
ticket1.create_rectangle(285, 10, 285 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 230 and y1 == 450:
if c_5 == 0:
r1_t1 += 450
else:
pass
c_5 = 1
ticket1.create_rectangle(450, 10, 450 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 175 and y1 == 10:
if c_6 == 0:
r2_t1 += 10
else:
pass
c_6 = 1
ticket1.create_rectangle(10, 65, 10 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 340 and y1 == 120:
if c_7 == 0:
r2_t1 += 120
else:
pass
c_7 = 1
ticket1.create_rectangle(120, 65, 120 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 505 and y1 == 120:
if c_8 == 0:
r2_t1 += 175
else:
pass
c_8 = 1
ticket1.create_rectangle(175, 65, 175 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 395 and y1 == 285:
if c_9 == 0:
r2_t1 += 285
else:
pass
c_9 = 1
ticket1.create_rectangle(285, 65, 285 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 175 and y1 == 395:
if c_10 == 0:
r2_t1 += 395
else:
pass
c_10 = 1
ticket1.create_rectangle(395, 65, 395 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 395 and y1 == 10:
if c_11 == 0:
r3_t1 += 10
else:
pass
c_11 = 1
ticket1.create_rectangle(10, 120, 10 + 50, 120 + 50, outline='black', fill='yellow')
elif x1 == 120 and y1 == 175:
if c_12 == 0:
r3_t1 += 175
else:
pass
c_12 = 1
ticket1.create_rectangle(175, 120, 175 + 50, 120 + 50, outline='black', fill='yellow')
elif x1 == 175 and y1 == 230:
if c_13 == 0:
r3_t1 += 230
else:
pass
c_13 = 1
ticket1.create_rectangle(230, 120, 230 + 50, 120 + 50, outline='black', fill='yellow')
elif x1 == 65 and y1 == 340:
if c_14 == 0:
r3_t1 += 340
else:
pass
c_14 = 1
ticket1.create_rectangle(340, 120, 340 + 50, 120 + 50, outline='black', fill='yellow')
elif x1 == 340 and y1 == 450:
if c_15 == 0:
r3_t1 += 450
else:
pass
c_15 = 1
ticket1.create_rectangle(450, 120, 450 + 50, 120 + 50, outline='black', fill='yellow')
else:
pass
if r1_t1 == 1150:
tk.Label(framedeclare, text='Angry Ticket => Top Row Completed !', bg='white', fg='red',
font='times 15 bold').pack(side='top', anchor='nw')
r1_t1 += 1
elif r2_t1 == 985:
tk.Label(framedeclare, text='Angry Ticket => Mid Row Completed !', bg='white', fg='orange',
font='times 15 bold').pack(side='top', anchor='nw')
elif r3_t1 == 1205:
tk.Label(framedeclare, text='Angry Ticket => Bottom Row Completed !', bg='white', fg='orange',
font='times 15 bold').pack(side='top', anchor='nw')
elif r1_t1 == 1150 and r2_t1 == 985 and r3_t1 == 1205:
mb.showerror('winner', message='Angry is the winner', parent=root)
else:
pass
condi_ticket1()
# condition For Ticket 2
def condi_ticket2():
if x1 == 285 and y1 == 65:
ticket2.create_rectangle(65, 10, 65 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 65 and y1 == 120:
ticket2.create_rectangle(120, 10, 120 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 10 and y1 == 230:
ticket2.create_rectangle(230, 10, 230 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 505 and y1 == 285:
ticket2.create_rectangle(340, 10, 340 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 505 and y1 == 395:
ticket2.create_rectangle(450, 10, 450 + 50, 10 + 50, outline='black', fill='orange')
elif x1 == 230 and y1 == 10:
ticket2.create_rectangle(10, 65, 10 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 285 and y1 == 120:
ticket2.create_rectangle(120, 65, 120 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 395 and y1 == 230:
ticket2.create_rectangle(230, 65, 230 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 120 and y1 == 340:
ticket2.create_rectangle(340, 65, 340 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 120 and y1 == 450:
ticket2.create_rectangle(450, 65, 450 + 50, 65 + 50, outline='black', fill='green')
elif x1 == 450 and y1 == 120:
ticket2.create_rectangle(120, 120, 120 + 50, 120 + 50, outline='black', fill='yellow')
elif x1 == 10 and y1 == 175:
ticket2.create_rectangle(175, 120, 175 + 50, 120 + 50, outline='black', fill='yellow')
elif x1 == 340 and y1 == 285:
ticket2.create_rectangle(285, 120, 285 + 50, 120 + 50, outline='black', fill='yellow')
elif x1 == 450 and y1 == 395:
ticket2.create_rectangle(395, 120, 395 + 50, 120 + 50, outline='black', fill='yellow')
elif x1 == 285 and y1 == 450:
ticket2.create_rectangle(450, 120, 450 + 50, 120 + 50, outline='black', fill='yellow')
else:
pass
condi_ticket2()
# hear the lamda is the one liner function
tk.Button(framehost, text='click me', command=lambda: [click_me()], bg='grey', fg='black', relief='ridge',
font='times 15 bold italic').pack(fill='x')
tk.Label(framedeclare, text='Declaration: -', font='times 20 bold', fg='black', bg='white').pack(anchor='nw')
root.mainloop()
# ----------------------------------------------------Function To take the name of player as input-------------------------------------------
def Enrty():
global player1value
global player2value
root = Toplevel()
root.geometry("644x344")
root.title('Enter the Players Name')
# ----------------------------------------------------------------------------------Heading-----------------------------------------------------------------------
Label(root, text="Write the players name Down To Play The Game ",
font="comicsansms 13 bold underline", pady=15).grid(row=0, column=2)
# --------------------------------------------------------------------------Text for our player form------------------------------------------------------------
player1 = Label(root, text="player1")
player2 = Label(root, text="Player2")
# ------------------------------------------------------------------------Pack text for our player form------------------------------------------------------
player1.grid(row=1, column=2)
player2.grid(row=2, column=2)
# ---------------------------------------------------------------------Tkinter variable for storing entries----------------------------------------------------
player1value = StringVar()
player2value = StringVar()
# ----------------------------------------------------------------------------Entries for our Players------------------------------------------------------------
player1entry = Entry(root, textvariable=player1value)
player2entry = Entry(root, textvariable=player2value)
# ----------------------------------------------------------------------------Packing the Entries----------------------------------------------------------------
player1entry.grid(row=1, column=3)
player2entry.grid(row=2, column=3)
# -----------------------------------------------------------Button & packing it and assigning it a command----------------------------------------------
Button(root, text="Start The Game", command=lambda: [tabo_game()], bg='white', fg='black', relief='ridge',
font='times 12 bold italic').grid(row=10, column=3)
Button(root, text="Quit Game", command=lambda: [root.destroy()], bg='white', fg='black', relief='ridge',
font='times 12 bold italic').grid(row=10, column=2)
root.mainloop()
# -------------------------------------------------Main Window created With Freehand Python code---------------------------------------
root = tk.Tk()
root.geometry("600x600")
root.title('Tambola Game')
root.config(bg='black')
root.state('zoomed')
root.title()
frame = tk.Frame(root, borderwidth=5, bg='white', relief='sunken')
frame1 = tk.Frame(root, borderwidth=0, bg='black', relief='sunken')
frame.pack(side='top', fill='y')
frame1.pack(side='bottom', anchor='nw', fill='x')
tk.Label(frame, text='Tambola By Juhi Kumari\n', font='comicsans 40 bold', bg='white').pack(fill='x')
tk.Button(frame, text='Play now', command=lambda: [Enrty()], bg='white', fg='black', relief='ridge',
font='times 15 bold italic').pack(pady=10)
tk.Button(frame, text='Quit', command=lambda: [root.destroy()], bg='white', fg='black', relief='ridge',
font='times 15 bold italic').pack(pady=15)
tk.Label(frame, text='\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', bg='white').pack()
tk.Label(frame1, text='Acknowledgement: -', font='comicsans 30 bold', bg='black', fg='White').pack(anchor='nw',
fill='x')
tk.Label(frame1, text='SB Dandin sir', font='comicsans 18 bold', fg='Red', bg='black').pack(fill='x')
tk.Label(frame1, text='''My Parent's''', font='comicsans 18 bold', fg='#FFDAB9', bg='black').pack(fill='x')
root.mainloop()
4. Explanation of Tambola Game Source Code
Here's an explanation of the key parts of the code:
1. Initialization
import tkinter as tk import random from tkinter import messagebox as mb from tkinter import * x1 = 0 y1 = 0 z1 = 10 q1 = 10 a = 0 player1value = "Player1" player2value = "Player2" r1_t1 = 0 r2_t1 = 0 r3_t1 = 0
- These lines import the necessary modules and initialize some global variables used for positioning, player names, and keeping track of game states.
2. Main Functions
tabo_game()
This function is the main game window. It sets up the game board and tickets for two players.
def tabo_game():
global x1, y1, z1, q1, player1value, player2value
player1value = player1value.get()
player2value = player2value.get()
root = tk.Toplevel()
root.geometry("400x400")
root.title('Tambola game')
root.config(bg='white')
root.state('zoomed')
framehead = tk.Frame(root, borderwidth=0, bg='white', relief='ridge')
framehost = tk.Frame(root, borderwidth=5, bg='white', relief='ridge')
frameticket = tk.Frame(root, borderwidth=5, bg='white', relief='ridge')
frameticket1 = tk.Frame(frameticket, borderwidth=5, bg='white', relief='ridge')
framedeclare = tk.Frame(frameticket, borderwidt=0, bg='white', relief='ridge')
- These lines set up the main window and different frames within the window for the game board, tickets, and declarations.
3. Drawing the Game Board
framehead.pack(side='top', fill='x')
framehost.pack(side='left', fill='y')
frameticket.pack(side='right', fill='y')
frameticket1.pack(side='top', fill='x')
framedeclare.pack(side='top', fill='both')
tk.Label(framehead, text="Welcome to the Tambola game: -", font='times 15 bold ', bg='white', fg='black', anchor='nw').pack(fill='x', pady=10)
x1, y1 = 10, 10
canvas = tk.Canvas(framehost, width=560, height=500, bg='white')
num = 1
for j in range(9):
for i in range(10):
canvas.create_oval(x1, y1, x1 + 50, y1 + 50, outline='black', width=0, fill='lightblue')
tk.Label(canvas, text=str(num)).place(x=x1 + 16, y=y1 + 16)
x1 += 55
num += 1
y1 += 55
x1 = 10
canvas.pack()
- This section creates the game board with 90 numbered circles (10 rows by 9 columns), where each number is displayed inside a circle.
4. Player Tickets
tk.Label(frameticket1, text=str(player1value), font='times 18 bold', bg='white', fg='red').pack(anchor='nw')
t1, t2 = 10, 10
ticket1 = tk.Canvas(frameticket1, width=510, height=180, bg='black')
for j in range(3):
for i in range(9):
ticket1.create_rectangle(t1, t2, t1 + 50, t2 + 50, outline='white', fill='lightblue')
tk.Label(ticket1, text="17").place(x=65 + 16, y=10 + 16)
t1 += 55
t2 += 55
t1 = 10
ticket1.pack(padx=120)
- This part creates the ticket for Player 1. Each ticket has a grid of 3 rows and 9 columns with pre-defined numbers. The same process is repeated for Player 2.
5. Click Handling
def click_me():
global z1, q1, x1, y1
z1, q1 = x1, y1
numx = random.randint(0, 9)
numy = random.randint(0, 8)
x1 = 10 + 55 * numx
y1 = 10 + 55 * numy
canvas.create_oval(x1, y1, x1 + 50, y1 + 50, outline='black', width=0, fill='red')
canvas.pack()
canvas.create_oval(z1, q1, z1 + 50, q1 + 50, outline='black', width=0, fill='blue')
canvas.pack()
- The click_me function is called when the "click me" button is pressed. It randomly selects a new number on the board and changes the color of the corresponding circle.
6. Commentary and Ticket Conditions
def commentry():
if x1 == 230 and y1 == 65:
mb.showinfo(parent=root, title='Commentry', message=' The day we celebrate independence day! \nThe Number is 15 ')
# Additional conditions omitted for brevity
def condi_ticket1():
global r1_t1, r2_t1, r3_t1
# Checking if numbers match and updating the ticket colors
if x1 == 340 and y1 == 65:
ticket1.create_rectangle(65, 10, 65 + 50, 10 + 50, outline='black', fill='orange')
r1_t1 += 65
# Additional conditions omitted for brevity
if r1_t1 == 1150:
tk.Label(framedeclare, text='Angry Ticket => Top Row Completed !', bg='white', fg='red', font='times 15 bold').pack(side='top', anchor='nw')
# Additional logic omitted for brevity
- The commentry function shows a message box with special commentary for certain numbers. The condi_ticket1 function checks if the clicked number is on the ticket and updates the colors and scores accordingly.
7. Entry Function
def Enrty():
global player1value, player2value
root = Toplevel()
root.geometry("644x344")
root.title('Enter the Players Name')
Label(root, text="Write the players name Down To Play The Game ", font="comicsansms 13 bold underline", pady=15).grid(row=0, column=2)
player1 = Label(root, text="player1")
player2 = Label(root, text="Player2")
player1.grid(row=1, column=2)
player2.grid(row=2, column=2)
player1value = StringVar()
player2value = StringVar()
player1entry = Entry(root, textvariable=player1value)
player2entry = Entry(root, textvariable=player2value)
player1entry.grid(row=1, column=3)
player2entry.grid(row=2, column=3)
Button(root, text="Start The Game", command=lambda: [tabo_game()], bg='white', fg='black', relief='ridge', font='times 12 bold italic').grid(row=10, column=3)
Button(root, text="Quit Game", command=lambda: [root.destroy()], bg='white', fg='black', relief='ridge', font='times 12 bold italic').grid(row=10, column=2)
root.mainloop()
- The Enrty function creates a window for entering the names of the players and starts the game when the "Start The Game" button is pressed.
8. Main Window
root = tk.Tk()
root.geometry("600x600")
root.title('Tambola Game')
root.config(bg='black')
root.state('zoomed')
frame = tk.Frame(root, borderwidth=5, bg='white', relief='sunken')
frame1 = tk.Frame(root, borderwidth=0, bg='black', relief='sunken')
frame.pack(side='top', fill='y')
frame1.pack(side='bottom', anchor='nw', fill='x')
tk.Label(frame, text='Tambola By Juhi Kumari\n', font='comicsans 40 bold', bg='white').pack(fill='x')
tk.Button(frame, text='Play now', command=lambda: [Enrty()], bg='white', fg='black', relief='ridge', font='times 15 bold italic').pack(pady=10)
tk.Button(frame, text='Quit', command=lambda: [root.destroy()], bg='white', fg='black', relief='ridge', font='times 15 bold italic').pack(pady=15)
tk.Label(frame, text='\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', bg='white').pack()
tk.Label(frame1, text='Acknowledgement: -', font='comicsans 30 bold', bg='black', fg='White').pack(anchor='nw', fill='x')
tk.Label(frame1, text='1. THis GUI is created by JUHI KUMARI \n2. GUI is in 2 layer frame packed system! \n3. Done Under Great Guidance of SHUBHAM SIR', font='comicsans 20 bold', bg='black', fg='White').pack(anchor='nw', fill='x')
root.mainloop()
- Finally, the main window of the application is created. It includes a title, a "Play now" button to start the game, and a "Quit" button to exit.
5. Conclusion
Creating a Tambola game using Python and Tkinter is a fantastic project to enhance your programming skills. You've learned how to set up your development environment, design a game interface, write the game logic, and test the game.
To further improve your Tambola game, consider adding more advanced features such as multiplayer support, a more sophisticated user interface, and integration with online services. You can also explore other Python libraries like Pygame for more complex game development projects.
Keep experimenting and expanding your skills. Python and Tkinter offer endless possibilities for creative projects.
Code by: Juhi Kumari
That’s a wrap!
I hope you enjoyed this article
Did you like it? Let me know in the comments below 🔥 and you can support me by buying me a coffee.
And don’t forget to sign up to our email newsletter so you can get useful content like this sent right to your inbox!
Thanks!
Faraz 😊

