You are on page 1of 29

Certificate

This is to certify that the content of this project entitled


Wyntr Streaming Service is the bona fide work of
Nishan Kashyap of class XII - ‘A’ of Army Public School
Bhopal and have successfully completed his project
under my supervision. He has taken proper care and
shown utmost sincerity in completion of this practical
file.
This project is absolutely genuine and does not indulge
in plagiarism of any kind. The references taken in
making this project have been declared in Bibliography.
I certify that his practical file is up to my expectation
and as per the guidelines issued by the Central Board
of Secondary Education (CBSE), New Delhi

Signature Signature
Mr. Deepak Hardikar (External)
(PGT Computer Science)

Signature
(Ms. Priyanka Trivedi)
431
Session : 2021 - 2022

Informatics Practices Project


𝕎𝕪𝕟𝕥𝕣 𝕊𝕥𝕣𝕖𝕒𝕞𝕚𝕟𝕘
𝕊𝕖𝕣𝕧𝕚𝕔𝕖
Submitted To : Submitted By :
Mr. Deepak Hardikar Nishan Kashyap
Members :
Rishu Nandan
Yogesh Thakur
432
Acknowledgement
Many people have bestowed their blessings and
heartfelt support on us in the successful completion of
this project, and we would want to take this opportunity
to thank everyone who has been involved with it.
I'd like to convey my heartfelt gratitude to Mr. Deepak
Hardikar, my project guide, for her invaluable
assistance during the project. She was always really
interested in what I was doing. The successful
completion of this project was due to her helpful
counsel and persistent motivation. Her invaluable
advice was vital in guiding us through this endeavour
and ensuring its complete success. Her
recommendations and directions were important in
bringing the project to a successful conclusion. Her
invaluable advice was vital in guiding us through this
endeavour and ensuring its complete success. Her
recommendations and directions were important in
bringing the project to a successful conclusion. This
project, Wyntr Streaming Service, also assisted us in
conducting extensive study, and I learned a great deal.
I'd also like to thank my parents and friends for their
insightful suggestions and for their helpful direction
throughout the project's completion.
433
Python - In Brief
Python is developed by Guido van Rossum. He started implementing Python in
1989. It is a computer programming language often used to build websites and
software, automate tasks, and conduct data analysis. It is a general-purpose
language, meaning it can be used to create a variety of different programs and
isn’t specialized for any specific problems. This versatility, along with its
beginner-friendliness, has made it one of the most-used programming
languages today.
It is commonly used for developing websites and software, task automation,
data analysis, and data visualization. Since it’s relatively easy to learn, Python
has been adopted by many non-programmers such as accountants and
scientists, for a variety of everyday tasks, like organizing finances.
It is often used to develop the back end of a website or application—the parts
that a user doesn’t see. Python’s role in web development can include sending
data to and from servers, processing data and communicating with databases,
URL routing, and ensuring security. Python offers several frameworks for web
development. Commonly used ones include Django and Flask.
It uses dynamic typing and a combination of reference counting and a cycle-
detecting garbage collector for memory management.[63] It also features
dynamic name resolution (late binding), which binds method and variable
names during program execution.
It is meant to be an easily readable language. Its formatting is visually
uncluttered, and it often uses English keywords where other languages use
punctuation. Unlike many other languages, it does not use curly brackets to
delimit blocks, and semicolons after statements are allowed but are rarely, if
ever, used.
Python's large standard library, commonly cited as one of its greatest
strengths, provides tools suited to many tasks. For Internet-facing
applications, many standard formats and protocols such as MIME and HTTP are
supported. It includes modules for creating graphical user interfaces,
connecting to relational databases, generating pseudorandom numbers,
arithmetic with arbitrary-precision decimals, manipulating regular expressions,
and unit
434testing.
Index
Serial No. Contents Page No.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

435
About Wyntr
Introduction
Unlimited movies, TV shows and more. Watch anywhere. Cancel anytime. Ready to
watch? Sign up your email to create to create a Wyntr Account.
Watch on smart TVs, PlayStation, Xbox, Chromecast, Apple TV, Blu-ray players and
more. Download your shows to watch offline. Save your favourites easily and always
have something to watch. Stream unlimited movies and TV shows on your phone,
tablet, laptop, and TV.
Wyntr is a streaming service that offers a wide variety of award-winning TV shows,
movies, anime, documentaries, and more – on thousands of internet-connected
devices.
Members can watch TV series, documentaries and feature films across a wide
variety of genres and languages. Members can watch as much as they want,
anytime, anywhere, on any internet-connected screen. Members can play, pause
and resume watching, all without commercials or commitments.
Wyntr, Inc. is an Indian pay television over-the-top media service and original
programming production company. It offers subscription-based video on demand
from a library of films and television series.
Wyntr can be accessed via internet browser on computers, or via application
software installed on smart TVs, set-top boxes connected to televisions, tablet
computers, smartphones, digital media players, Blu-ray Disc players, video game
consoles, and virtual reality headsets o It is available in 4K resolution.
It includes a wide variety of familiar network shows and more original series, films,
documentaries and specials than any of its myriad competitors. The world's first
major streaming service remains our favourite choice in 2021 thanks to its huge
library of constantly refreshed content and its easy accessibility across different
devices.
Wyntr's design encourages scrolling -- there are so many different categories to
look through, and then shows and movies within those categories to continue
scrolling into. You can create a watch list to help you cut down on this, but the vast,
colourful library makes it easy to spend more time looking through options than
actually watching a show, so be careful.
Wyntr has more 4K content than just about any other streaming service, and a lot of
its 4K shows and movies are also available in HDR. High dynamic range provides an
even bigger improvement in image quality than 4K according to CNET's tests, with
better436
contrast and colour, and the difference is especially apparent on large,
higher-end televisions.
Snapshots

Signing In

437
Signing Up
MySQL - In Brief
SQL stands for Structured Query Language. It is used to create, remove, alter
the database and database objects in a database management system and to
store, retrieve, update the data in a database. SQL is a standard language for
creating, accessing, manipulating database management system. SQL works
for all modern relational database management systems, like SQL Server,
Oracle, MySQL, etc.
SQL defines following ways to manipulate data stored in an RDBMS :
DDL: Data Definition Language
This includes changes to the structure of the table like creation of table,
altering table, deleting a table etc. All DDL commands are auto-committed.
That means it saves all the changes permanently in the database.
DML: Data Manipulation Language
DML commands are used for manipulating the data stored in the table and not
the table itself. DML commands are not auto-committed. It means changes are
not permanent to database, they can be rolled back

MySQL Query Execution Flow Chart

Query Parser Translation


INPUT
Data Optimizer
Dictionary

Evaluation Execution
Result Engine Plan
OUTPUT
Data
438
Name : MySQL
Original Author : MySQL AB
Developer : Oracle Corporation
Released On : 23 May 1995
Written in : C, C++
Operating system : Linux, Solaris, macOS, Windows, FreeBSD
Type : RDBMS
License : GPLv2 or proprietary

Hardware Used

Hardware : Pen Drive


Memory Storage Capacity : 32 GB
Brand : HP
Hardware Interface : USB, USB 3.0, USB 2.0
Read Speed : 140 Megabytes Per Second

Harware : Printer
Resolution : Maximum 2880 dpi x 1440 dpi
Print direction : Bidirectional
Control code : ESC/P Raster
RAM : 64 MB for StylusPro 9600
Character
439 tables : PC 437 (US, Europe), PC 850 (Multilingual)
SQL Tables
Accounts

Media

4310
ER Diagram
First Name Last Name Username E-mail Password

Register

Username

PROVIDES Login

Password

ID Title

Genre Media Type

IMDb Certificate

Streaming Description
Platform Link

4311
Conclusion
Wyntr is a tracking platform and social television network for TV and movies. It allows
users to store information about their media consumption.
It also stores the records of Movies, TV Shows, Web Series and Anime. We designed a
user-friendly graphical user interface which suits the user and also saves the precious
time.
Streaming combined with social media is the next stage in the evolution of digital
entertainment, and we see Wyntr as a primary actor in starting that evolution. The
content is made free by the streaming services themselves as part of their marketing
promotions. Our platform simply aggregates all the free content across all the
streaming services.
The Wyntr helps you find the best way to stream anything. Follow our daily streaming
news, in-depth reviews on streaming services & devices, and use our tools to find
where your favourite content is streaming.
The world has changed. People’s watching habits became fragmented, different. The
TV universe got bigger and yet felt smaller at the same time. Mobile phones, tablets and
other devices allowed us to watch from anywhere. Entire series were released in a day.
10 channels became 1,000. And more than ever, we wanted to stay on top of our
favourite shows. We got enraged when anyone even hinted at a spoiler. And finding our
tribes, those like us, to share moments and react to, at the moment we felt it, became
so vital, so enriching, so core to our daily routines.
And so we created our own collection of movies, series and anime.
➢ It is organised for you to save your time.
➢ Get personal recommendations and see what’s new across your favourite
streaming services.
➢ It has various filters for easy access of your favourites.
➢ You don’t have to check each and every platform for movies and series just visit
us.
➢ Never go back and forth between your services again to find out if a movie or TV
show is available.
➢ Keep track of all the TV shows and movies you want to watch in one list across all
your devices.
➢ Your 'Watch Next' section will tell you when you have episodes to watch or
movies to stream.
➢ See where to watch movies & TV online for free from trusted legal services like
MTV,
4312 Crackle and many others!
➢ Don't accidentally pay for movies that are available free online.
Snapshots

User Interface

Developer Interface
4313
Objective
We all know how overwhelming it can be to scroll through all
of our streaming subscriptions to find something to watch.
Wyntr, a new all-in-one social media and streaming service
app combines Netflix, Amazon Prime Video, HBO Max,
Disney+, Hulu, among other streaming platforms in one place,
giving the consumer a convenient way to search and discover
content across all services.
The vast majority of the time, people just resort to
recommendations from their friends or people they know.
When they’re looking to watch something or unwind at night,
they don’t have time to go do long research on what to watch,
most consumers are simply interested in three things: what is
new, what is popular/trending, and what their friends are
watching or talking about. And with the Wyntr technology, we
hope to satisfy all those three things, and much more.
You probably already have a Netflix queue (possibly one for
everyone in your household), a Hulu favourites list, and maybe
some bookmarked TV shows or movies you want to stream
from Amazon Video on Demand. If you are sitting in front of
the TV, ready to watch something, it can be tricky to try to sort
out which service the show you want to watch is on, or
whether the show you are interested in is on any of them.

4314
Bibliography
➢ https://www.w3schools.com
➢ https://stackoverflow.com
➢ https://github.com
➢ https://www.youtube.com
➢ https://www.javatpoint.com
➢ https://www.geeksforgeeks.org
➢ https://codemy.com
➢ https://edu.google.com/code-with-google

4315
Source Code
import tkinter, pymysql, webbrowser, time
from tkinter import *
from tkinter import ttk, messagebox
from PIL import ImageTk
class Wynter :
def __init__(self, root) :
self.root = root
self.root.title(" ")
self.root.iconbitmap("Images/Icon.ico")
self.root.geometry("1536x801")
self.root.state("zoomed")
self.Login_Interface()
def Login_Interface(self):
self.bg = ImageTk.PhotoImage(file = "Images/LogIn.png")
bg = Label(self.root, image = self.bg).place(x = 0, y = 0, height = 801,width = 1536)
self.Logo = ImageTk.PhotoImage(file = "Images/Logo.jpg")
Logo = Label(self.root, image = self.Logo).place(x = 210, y = 180, height = 435, width = 435)
Login_Frame = Frame(self.root, bg = "#F3C892")
Login_Frame.place(x = 648, y = 180, width = 680, height = 435)
Title = Label(Login_Frame, text = "Sign In", font = ("FZShuTi", 50, "bold"), bg = "#F3C892",
fg = "#021E2F").place(x = 50, y = 20)
Username = Label(Login_Frame, text = "Username", font = ("Product Sans", 20, "bold"), bg
= "#F3C892", fg = "#630000").place(x = 50, y = 130)
self.txt_Username = Entry (Login_Frame, font = ("Product Sans", 15), bg = "#FFEFD5")
self.txt_Username.place(x = 50, y = 170, height = 35, width = 350)
Password = Label(Login_Frame, text = "Password", font = ("Product Sans", 20, "bold"), bg =
"#F3C892", fg = "#630000").place(x = 50, y = 230)
self.txt_Password = Entry (Login_Frame, font = ("Product Sans", 15, "bold"), bg =
"#FFEFD5", show = "*")
self.txt_Password.place(x = 50, y = 270, height = 35, width = 350)
btn_register = Button(Login_Frame, text = "LOGIN",font = ("20th Century Font", 30), bd =
5, bg = "#F99A05", cursor = 'hand2', relief = RIDGE, command = self.Login)
btn_register.place(x = 425, y = 345, height = 50, width = 150)
Title = Label(Login_Frame, text = "Don't Have an Account ?", font = ("FZShuTi", 15, 'bold'),
bg = "#F3C892", fg = "#021E2F").place(x = 50, y = 340)
btn_login = Button(self.root, text = "SIGN UP", font = ("20th Century Font", 20), bg =
"#F99A05", bd = 5, relief = RIDGE, cursor = "hand2", command =
self.Registration_Interface)
btn_login.place(x = 770, y = 550, height = 40, width = 110)
self.root.bind('<Return>',lambda event:self.Login())
def Login(self):
if self.txt_Username.get() == "" and self.txt_Password.get() == "" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴜꜱᴇʀɴᴀᴍᴇ ᴀɴᴅ
ᴘᴀꜱꜱᴡᴏʀᴅ", icon = "warning", parent = self.root)
elif self.txt_Username.get() == "" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴜꜱᴇʀɴᴀᴍᴇ", icon =
"warning", parent = self.root)
elif self.txt_Password.get() == "" :
4316 messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴘᴀꜱꜱᴡᴏʀᴅ", icon =
"warning", parent = self.root)
else:
mycon = pymysql.connect(host="localhost",user="root",password="1234",database="Details")
cursor = mycon.cursor()
cursor.execute("SELECT * FROM Accounts WHERE Username = %s AND Password = %s",
(self.txt_Username.get(), self.txt_Password.get()))
row = cursor.fetchone()
if self.txt_Username.get() == "mainishanhoon" and self.txt_Password.get() == "Password" :
self.Management_Interface()
elif row == None :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ɪɴᴠᴀʟɪᴅ ᴜꜱᴇʀɴᴀᴍᴇ / ᴘᴀꜱꜱᴡᴏʀᴅ", icon
= "warning", parent = self.root)
self.Login_Clear()
else :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴡᴇʟᴄᴏᴍᴇ ᴛᴏ 𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲",
parent = self.root)
self.Media_Interface()
mycon.close()

def Login_Clear(self) :
self.txt_Username.delete("0",END)
self.txt_Password.delete("0",END)

def Registration_Interface(self) :
self.bg = ImageTk.PhotoImage(file = "Images/Registration.jpg")
bg = Label(self.root, image = self.bg, bg = "#FAA460").place(x = 0, y = 0, height = 801,width =
1536)
self.Logo = ImageTk.PhotoImage(file = "Images/Logo.jpg")
Left = Label(self.root, image = self.Logo).place(x = 200, y = 180, height = 435, width = 435)
Registration_Frame=Frame(self.root, bg = "#F3C892")
Registration_Frame.place(x = 638, y = 180, width = 700, height = 435)
title = Label(Registration_Frame, text = "Sign Up", font = ("FZShuTi", 50, "bold"), bg = "#F3C892",
fg = "#021E2F").place(x = 50, y = 10)
FirstName = Label(Registration_Frame, text = "First Name", font = ("Product Sans", 15, "bold"), bg
= "#F3C892", fg = "#630000").place(x = 70, y = 120)
self.txt_FirstName = Entry (Registration_Frame, font = ("Product Sans", 15), justify = CENTER, bg
= "#FFEFD5")
self.txt_FirstName.place(x = 70, y = 150, width = 250)
LastName = Label(Registration_Frame, text = "Last Name", font = ("Product Sans", 15, "bold"), bg
= "#F3C892", fg = "#630000").place(x = 380, y = 120)
self.txt_LastName = Entry (Registration_Frame, font = ("Product Sans", 15), justify = CENTER, bg
= "#FFEFD5")
self.txt_LastName.place(x = 380, y = 150, width = 250)
Username = Label(Registration_Frame, text = "Username", font = ("Product Sans", 15, "bold"), bg =
"#F3C892", fg = "#630000").place(x = 70, y = 190)

def Registration(self) :
if self.txt_FirstName.get() == "" or self.txt_Email.get() == "" or self.txt_FirstName.get() == "" or
self.txt_Username.get() == "" or self.txt_Password.get() == "" or self.txt_ConfirmPassword.get()
== "":
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴀʟʟ ꜰɪᴇʟᴅꜱ ᴀʀᴇ ʀᴇ🇶ᴜɪʀᴇᴅ", icon = "warning",
parent = self.root)
elif self.txt_Password.get() != self.txt_ConfirmPassword.get() :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿
4317 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴄᴏɴꜰɪʀᴍ ᴘᴀꜱꜱᴡᴏʀᴅ ɪꜱ ᴅɪꜰꜰᴇʀ ᴇɴᴛ", icon =
"warning", parent = self.root)
else :
mycon = pymysql.connect(host="localhost",user="root",password="1234",database="Details")
cursor = mycon.cursor()
cursor.execute("SELECT * FROM Accounts WHERE Username = %s", self.txt_Username.get())
Username = cursor.fetchone()
cursor.execute("SELECT * FROM Accounts WHERE Email = %s", self.txt_Email.get())
Email = cursor.fetchone()
if Username != None :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴜꜱᴇʀ ᴀʟʀᴇᴀᴅʏ ᴇxɪꜱᴛꜱ, ᴛʀʏ ᴏᴛʜᴇʀ
ᴜꜱᴇʀɴᴀᴍᴇ", icon = "warning", parent = self.root)
elif Email != None :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇᴍᴀɪʟ ᴀʟʀᴇᴀᴅʏ ᴇxɪꜱᴛꜱ, ᴛʀʏ ᴏᴛʜᴇʀ
ᴇᴍᴀɪʟ", icon = "warning", parent = self.root)
else :
cursor.execute("INSERT INTO Accounts (First_Name, Last_Name, Username, Email,
Password) VALUES (%s,%s,%s,%s,%s)",
(self.txt_FirstName.get(),
self.txt_LastName.get(),
self.txt_Username.get(),
self.txt_Email.get(),
self.txt_Password.get()
))
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴀᴄᴄᴏᴜɴᴛ ʜᴀꜱ ʙᴇᴇɴ ʀᴇɢɪꜱᴛᴇʀᴇᴅ")
self.Management_Interface()
mycon.commit()
mycon.close()
def Registration_Clear(self) :
self.txt_FirstName.delete(0,END)
self.txt_LastName.delete(0,END)
self.txt_Username.delete(0,END)
self.txt_Email.delete(0,END)
self.txt_Password.delete(0,END)
self.txt_ConfirmPassword.delete(0,END)

def Management_Interface(self) :
Title_Frame = Frame(self.root, bd = 0, bg = "#FFE6BC")
Title_Frame.place(x = 0, y= 0, width = 1535.5, height = 95)
Title = Label(Title_Frame, text = "𝕎𝕪𝕟𝕥𝕣 𝕊𝕥𝕣𝕖𝕒𝕞𝕚𝕟𝕘 𝕊𝕖𝕣𝕧𝕚𝕔𝕖", bd = 8, relief = RIDGE, font =
("Product Sans", 50, "bold"), bg = "#ECB365", fg = "#630000")
Title.place(x =0, y = 0, height = 90, width = 1535.5)
Logo_Frame = Frame(self.root, bd = 0, bg = "#ffffff")
Logo_Frame.place(x = 280, y = 10, width = 80, height = 70)
self.Logo = ImageTk.PhotoImage(file = "Images/Logo.png")
Logo = Label(Logo_Frame, image = self.Logo).place(x = 0, y = 0, height = 70, width = 80)
self.Addbtn = PhotoImage(file = "Images/Sign_Out.png")
btn = Button(Title_Frame, image = self.Addbtn, bd = 0, cursor = "hand2", relief = FLAT, command =
self.SignOut)
btn.place(x = 1484, y = 11, width = 40, height = 40)
Developers = Label(Title_Frame, text = "Developers : Nishan, Rishu, Yogesh",bd = 0, font =
("Bafora Demo", 20, 'bold'), bg = "#ECB365", fg = "#800000")
Developers.place(x =1178, y = 52, height = 30, width = 350)
self.ID_var = StringVar()
self.Title_var
4318 = StringVar()
self.Genre_var = StringVar()
self.Type_var = StringVar()
self.IMDb_var = StringVar()
self.Certificate_var = StringVar()
self.Streaming_Platform_var = StringVar()
self.Description_var = StringVar()
self.Link_var = StringVar()
self.SearchBy_var = StringVar()
self.SearchBox_var = StringVar()
Manage_Frame = Frame(self.root, bd = 5, relief = GROOVE, bg = "#F3C892")
Manage_Frame.place(x = 2, y= 93, width = 613, height = 700)

Details_Title = Label(Manage_Frame, text = "Manage Details", font = ("FZShuTi",40, "bold"), bg =


"#F3C892", fg = "#630000")
Details_Title.place(x = 45, y = 0, height = 55, width = 500)

Label_ID = Label(Manage_Frame, text = "ID", font = ("Product Sans",17, "bold"), bg = "#F3C892", fg =


"#800000").place(x = 35, y = 70)
txt_ID = Entry(Manage_Frame, textvariable = self.ID_var, font = ("Product Sans",15), justify = CENTER, bg
= "#FFEFD5")
txt_ID.place(x = 35, y = 105, width = 250)

Label_Type = Label(Manage_Frame, text = "Type", font = ("Product Sans",17, "bold"), bg = "#F3C892", fg =


"#800000").place(x = 315, y = 70)
cmb_Type = ttk.Combobox(Manage_Frame, font = ("Product Sans",14), textvariable = self.Type_var,
justify = CENTER, state = "readonly")
cmb_Type['values'] = ("Movie", "Series", "Documentary", "Anime")
cmb_Type.place(x = 315, y = 103, width = 250)
self.Type_var.set("Select Type")

Label_Title = Label(Manage_Frame, text = "Title", font = ("Product Sans",17, "bold"), bg = "#F3C892", fg =


"#800000").place(x = 35, y = 140)
txt_Title = Entry(Manage_Frame, textvariable = self.Title_var, font = ("Product Sans",15), justify =
CENTER, bg = "#FFEFD5")
txt_Title.place(x = 35, y = 175, width = 530)

Label_Genre = Label(Manage_Frame, text = "Genre", font = ("Product Sans",17, "bold"), bg = "#F3C892",


fg = "#800000").place(x = 35, y = 210)
cmb_Genre = ttk.Combobox(Manage_Frame, textvariable = self.Genre_var, font = ("Product Sans",15),
justify = CENTER, state = "readonly")
cmb_Genre['values'] = ("Action", "Drama", "Thriller", "Horror", "Comedy", "Romance", "Science Fiction",
"Fantasy", "Adventure", "Fiction")
cmb_Genre.place(x = 35, y = 243, width = 250)
self.Genre_var.set("Select Genre")

Label_IMDb = Label(Manage_Frame, text = "IMDb", font = ("Product Sans",17, "bold"), bg = "#F3C892", fg


= "#800000").place(x = 315, y = 210)
txt_IMDb = Entry(Manage_Frame, textvariable = self.IMDb_var, font = ("Product Sans",15), justify =
CENTER, bg = "#FFEFD5")
txt_IMDb.place(x = 315, y = 245, width = 250)

Label_Certificate = Label(Manage_Frame, text = "Certificate", font = ("Product Sans",17, "bold"), bg =


"#F3C892", fg = "#800000").place(x = 35, y = 280)
cmb_Certificate
4319 = ttk.Combobox(Manage_Frame, textvariable = self.Certificate_var, font = ("Product
Sans",14), justify = CENTER, state = "readonly")
cmb_Certificate['values'] = ("U (Unrestricted)", "U/A (Parental Guidance)", "A (Adults)", "S (Special
Class)")
cmb_Certificate.place(x = 35, y = 313, width = 250)
self.Certificate_var.set("Select Certificate")

Label_Streaming_Platform = Label(Manage_Frame, text = "Streaming Platform", font = ("Product


Sans",17, "bold"), bg = "#F3C892", fg = "#800000").place(x = 315, y = 280)
cmb_Streaming_Platform = ttk.Combobox(Manage_Frame, textvariable = self.Streaming_Platform_var,
font = ("Product Sans",14), justify = CENTER, state = "readonly")
cmb_Streaming_Platform['values'] = ("Disney+", "ZEE 5", "VOOT", "Prime Video", "Netflix", "HBO Max",
"Sony Liv", "Hulu", "Youtube", "Hotstar")
cmb_Streaming_Platform.place(x = 315, y = 313, width = 250)
self.Streaming_Platform_var.set("Select Streaming Platform")

Label_Description = Label(Manage_Frame, text = "Description", font = ("Product Sans",17, "bold"), bg =


"#F3C892", fg = "#800000").place(x = 35, y = 350)
self.txt_Description = Text(Manage_Frame, font = ("Cambria",11), bg = "#FFEFD5")
self.txt_Description.place(x = 35, y = 382, width = 530, height = 185)

Label_Link = Label(Manage_Frame, text = "Link", font = ("Product Sans",17, "bold"), bg = "#F3C892", fg =


"#800000").place(x = 35, y = 570)
txt_Link = Entry(Manage_Frame, textvariable = self.Link_var, font = ("Product Sans",15), justify =
CENTER, bg = "#FFEFD5")
txt_Link.place(x = 35, y = 600, width = 530, height = 30)

self.txt_Description = Text(Manage_Frame, font = ("Cambria",11), bg = "#FFEFD5")


self.txt_Description.place(x = 35, y = 382, width = 530, height = 185)

Label_Link = Label(Manage_Frame, text = "Link", font = ("Product Sans",17, "bold"), bg = "#F3C892", fg =


"#800000").place(x = 35, y = 570)
txt_Link = Entry(Manage_Frame, textvariable = self.Link_var, font = ("Product Sans",15), justify =
CENTER, bg = "#FFEFD5")
txt_Link.place(x = 35, y = 600, width = 530, height = 30)

Button_Frame = Frame(self.root, bd = 0, bg = "#F3C892")


Button_Frame.place(x = 20, y= 725, width = 580, height = 60)
Addbtn = Button(Button_Frame, text = "Add", width = 10, font = ("Gagalin", 20), bg = "#F99A05", bd = 5,
relief = RIDGE, cursor = "hand2", command = self.Add_Details)
Addbtn.place(x = 0, y = 15, width = 100, height = 40)
Addbtn = Button(Button_Frame, text = "Update", width = 10, font = ("Gagalin", 18), bg = "#F99A05", bd =
5, relief = RIDGE, cursor = "hand2", command = self.Update_Data)
Addbtn.place(x = 111, y = 15, width = 100, height = 40)
Addbtn = Button(Button_Frame, text = "Delete", width = 10, font = ("Gagalin", 18), bg = "#F99A05", bd =
5, relief = RIDGE, cursor = "hand2", command = self.Delete_Data)
Addbtn.place(x = 222, y = 15, width = 100, height = 40)
Addbtn = Button(Button_Frame, text = "Clear", width = 10, font = ("Gagalin", 18), bg = "#F99A05", bd = 5,
relief = RIDGE, cursor = "hand2", command = self.Clear)
Addbtn.place(x = 333, y = 15, width = 100, height = 40)
Addbtn = Button(Button_Frame, text = "Stream Now", width = 10, font = ("Gagalin", 16), bg = "#F99A05",
bd = 5, relief = RIDGE, cursor = "hand2", command = self.Stream_Now)
Addbtn.place(x = 447, y = 15, width = 130, height = 40)
Details_Frame = Frame(self.root, bd = 5, relief = GROOVE, bg = "#F3C892")
Details_Frame.place(x
4320 = 615, y= 93, width = 920, height = 700)
Extract_Frame = Frame(self.root, bd = 0, bg = "#F3C892")
Extract_Frame.place(x = 630, y= 100, width = 890, height = 60)

Search_Title = Label(Extract_Frame, text = "Details", font = ("FZShuTi",50, "bold"), bg = "#F3C892", fg =


"#630000")
Search_Title.place(x = 0, y = 0, height = 55, width = 220)

Label_SearchBy = Label(Extract_Frame, font = ("Product Sans",15, "bold"), bg = "#F3C892", fg =


"#9B0000").place(x = 310, y = 110)
SearchBy = ttk.Combobox(Extract_Frame, textvariable = self.SearchBy_var, font = ("Product Sans",14),
justify = CENTER, state = 'readonly')
SearchBy['values'] = ("Title", "Genre", "Type", "Certificate", "Streaming_Platform")
SearchBy.place(x = 238, y = 15, width = 195, height = 35)
self.SearchBy_var.set("Select Category")

self.txt_SearchBox = Entry(Extract_Frame, width = 10, bg = "#FFEFD5", textvariable =


self.SearchBox_var, font = ("Product Sans", 15), relief = GROOVE)
self.txt_SearchBox.place(x = 455, y = 15, width = 160, height = 35)
Addbtn = Button(Extract_Frame, text = "Search", width = 10, font = ("Gagalin", 18), bg = "#F99A05", bd =
5, relief = RIDGE, cursor = "hand2", command = self.Search_Data)
Addbtn.place(x = 640, y = 12, width = 100, height = 40)

Addbtn = Button(Extract_Frame, text = "Show All", width = 10, font = ("Gagalin", 18), bg = "#F99A05", bd
= 5, relief = RIDGE, cursor = "hand2", command = self.ShowAll_Data)
Addbtn.place(x = 760, y = 12, width = 120, height = 40)
Table_Frame = Frame(Details_Frame, bd = 0, bg = "#95D1CC" )
Table_Frame.place(x = 0, y = 70, width = 910, height = 620)

Style = ttk.Style(self.root)
Style.theme_use("winnative")
Style.configure(".", font=('Product Sans', 10), bg = "#FFDEAD")
Style.configure("Media_Table.Heading", fg = "#630000", font = ('Product Sans', 20))
scroll_y = Scrollbar(Table_Frame, orient = VERTICAL)
self.Media_Table = ttk.Treeview(Table_Frame, columns = ("ID", "Title", "Genre", "Type", "IMDb",
"Certificate", "Streaming_Platform"), yscrollcommand = scroll_y.set)
scroll_y.pack(side = RIGHT, fill = Y)
scroll_y.config(command = self.Media_Table.yview)
self.Media_Table.heading("ID", text = "ID", anchor=tkinter.CENTER)
self.Media_Table.heading("Title", text = "Title", anchor=tkinter.CENTER)
self.Media_Table.heading("Genre", text = "Genre", anchor=tkinter.CENTER)
self.Media_Table.heading("Type", text = "Type", anchor=tkinter.CENTER)
self.Media_Table.heading("IMDb", text = "IMDb", anchor=tkinter.CENTER)
self.Media_Table.heading("Certificate", text = "Certificate", anchor=tkinter.CENTER)
self.Media_Table.heading("Streaming_Platform", text = "Streaming On", anchor=tkinter.CENTER)
self.Media_Table['show'] = "headings"
self.Media_Table.column("ID", width = 70, anchor=tkinter.CENTER)
self.Media_Table.column("Title", width = 290, anchor=tkinter.CENTER)
self.Media_Table.column("Genre", width = 110, anchor=tkinter.CENTER)
self.Media_Table.column("Type", width = 100, anchor=tkinter.CENTER)
self.Media_Table.column("IMDb", width = 60, anchor=tkinter.CENTER)
self.Media_Table.column("Certificate", width = 160, anchor=tkinter.CENTER)
self.Media_Table.column("Streaming_Platform", width = 100, anchor=tkinter.CENTER)
self.Media_Table.pack(fill = BOTH, expand = 1)
self.Media_Table.bind("<ButtonRelease-1>",
4321 self.Get_Details)
self.root.bind('<Return>',lambda event:self.Search_Data())
self.ShowAll_Data()
def Add_Details(self) :
if self.ID_var.get() == "" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ ɪᴅ ᴏ🇫 ᴍᴇᴅɪᴀ", icon =
"warning", parent = self.root)
elif self.Type_var.get() == "Select Type" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ ᴛʏᴘᴇ ᴏ🇫 ᴍᴇᴅɪᴀ", icon =
"warning", parent = self.root)
elif self.Title_var.get() == "" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ ᴛɪᴛʟᴇ ᴏ🇫 ᴍᴇᴅɪᴀ", icon =
"warning", parent = self.root)
elif self.Genre_var.get() == "Select Genre" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ ɢᴇɴʀᴇ ᴏ🇫 ᴍᴇᴅɪᴀ", icon =
"warning", parent = self.root)
elif self.IMDb_var.get() == "" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ ɪᴍᴅʙ ʀᴀɪᴛɪɴɢ ᴏ🇫 ᴍᴇᴅɪᴀ", i
con = "warning", parent = self.root)
elif self.Certificate_var.get() == "Select Certificate" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ ᴄᴇʀᴛɪꜰɪᴄᴀᴛᴇ ᴏ🇫 ᴍᴇᴅɪᴀ", icon
= "warning", parent = self.root)
elif self.Streaming_Platform_var.get() == "Select Streaming Platform" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ 🇸ᴛʀᴇᴀᴍɪɴɢ ᴘʟᴀᴛ🇫ᴏʀᴍ ᴏ🇫
ᴍᴇᴅɪᴀ", icon = "warning", parent = self.root)
elif self.txt_Description.get('1.0' , END) == "" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ ᴅᴇ🇸ᴄʀɪᴘᴛɪᴏɴ ᴏ🇫 ᴍᴇᴅɪᴀ", icon
= "warning", parent = self.root)
elif self.Link_var.get() == "" :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴇɴᴛᴇʀ ᴛʜᴇ ʟɪɴᴋ ᴏ🇫 ᴍᴇᴅɪᴀ", icon =
"warning", parent = self.root)
else :
mycon = pymysql.connect(host = "localhost", user = "root", password = "1234", database =
"details")
cursor = mycon.cursor()
cursor.execute("SELECT * FROM Media WHERE ID = %s", self.ID_var.get())
Details = cursor.fetchone()
if Details != None :
messagebox.showerror("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴍᴇᴅɪᴀ ᴡɪᴛʜ ᴛʜɪꜱ ɪᴅ ᴀʟʀᴇᴀᴅʏ ᴇxɪ🇸ᴛ",
icon = "warning", parent = self.root)
else :
cursor.execute("INSERT INTO Media VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s)",(
self.ID_var.get(),
self.Title_var.get(),
self.Genre_var.get(),
self.Type_var.get(),
self.IMDb_var.get(),
self.Certificate_var.get(),
self.Streaming_Platform_var.get(),
self.txt_Description.get('1.0', END),
self.Link_var.get()
))
mycon.commit()
4322 messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ʏᴏᴜʀ ᴍᴇᴅɪᴀ ɪ🇸 ɴᴏᴡ 🇸ᴛʀᴇᴀᴍɪɴɢ", parent
= self.root)
self.ShowAll_Data()
self.Clear()
mycon.close()
def ShowAll_Data(self) :
mycon = pymysql.connect(host = "localhost", user = "root", password = "1234", database =
"details")
cursor = mycon.cursor()
cursor.execute("SELECT * FROM Media")
rows = cursor.fetchall()
if len(rows) != 0 :
self.Media_Table.delete(*self.Media_Table.get_children())
for row in rows :
self.Media_Table.insert('', END, values = row)
mycon.commit()
mycon.close()
def Clear(self) :
self.ID_var.set(""),
self.Title_var.set(""),
self.Genre_var.set("Select Genre"),
self.Type_var.set("Select Type"),
self.IMDb_var.set(""),
self.Certificate_var.set("Select Certificate"),
self.Streaming_Platform_var.set("Select Streaming Platform"),
self.txt_Description.delete("1.0", END),
self.Link_var.set(""),
self.SearchBy_var.set("Select Category"),
self.txt_SearchBox.delete("0", END)

def Get_Details(self, event) :


Cursor_Row = self.Media_Table.focus()
Contents = self.Media_Table.item(Cursor_Row)
row = Contents['values']
self.ID_var.set(row[0]),
self.Title_var.set(row[1]),
self.Genre_var.set(row[2]),
self.Type_var.set(row[3]),
self.IMDb_var.set(row[4]),
self.Certificate_var.set(row[5]),
self.Streaming_Platform_var.set(row[6]),
self.txt_Description.delete("1.0", END)
self.txt_Description.insert(END, row[7])
self.Link_var.set(row[8])
def Update_Data(self) :
if self.ID_var.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇʟᴇᴄᴛ ᴍᴇᴅɪᴀ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ
ᴜᴘᴅᴀᴛᴇ", icon = "warning", parent = self.root)
else :
mycon = pymysql.connect(host = "localhost", user = "root", password = "1234", database =
"details")
cursor = mycon.cursor()
cursor.execute("UPDATE Media SET Title = %s, Genre = %s, Type = %s, IMDb = %s,
Certificate = %s, Streaming_Platform = %s, Description = %s, Link = %s WHERE ID = %s", (
4323 self.Title_var.get(),
self.Genre_var.get(),
self.Type_var.get(),
self.IMDb_var.get(),
self.Certificate_var.get(),
self.Streaming_Platform_var.get(),
self.txt_Description.get('1.0', END),
self.Link_var.get(),
self.ID_var.get()
))
mycon.commit()
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴍᴇᴅɪᴀ ᴅᴇᴛᴀɪʟꜱ ʜᴀꜱ ʙᴇᴇɴ ᴜᴘᴅᴀᴛᴇᴅ",
parent = self.root)
self.ShowAll_Data()
self.Clear()
mycon.close()
def Delete_Data(self) :
if self.ID_var.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇʟᴇᴄᴛ ᴍᴇᴅɪᴀ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ
ᴅᴇʟᴇᴛᴇ", icon = "warning", parent = self.root)
else :
mycon = pymysql.connect(host = "localhost", user = "root", password = "1234", database =
"details")
cursor = mycon.cursor()
cursor.execute("DELETE FROM Media WHERE ID = %s", self.ID_var.get())
mycon.commit()
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇʟᴇᴄᴛᴇᴅ ᴍᴇᴅɪᴀ ʜᴀꜱ ʙᴇᴇɴ
ᴅᴇʟᴇᴛᴇᴅ", parent = self.root)
self.ShowAll_Data()
self.Clear()
mycon.close()

def Stream_Now(self) :
if self.ID_var.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇʟᴇᴄᴛ ᴍᴇᴅɪᴀ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ
ꜱᴛʀᴇᴀᴍ", icon = "warning", parent = self.root)
else :
webbrowser.open(str(self.Link_var.get()), new=2)

def Search_Data(self) :
if self.SearchBy_var.get() == "Select Category" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴏɴ ᴡʜᴀᴛ ʙᴀꜱɪꜱ ʏᴏᴜ ᴡᴀɴɴᴀ
ᴡᴀᴛᴄʜ", icon = "question", parent = self.root)
elif self.txt_SearchBox.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇᴀʀᴄʜ ʙᴏx ɪꜱ ᴇᴍᴘᴛʏ", icon =
"warning", parent = self.root)
elif self.SearchBy_var.get() == "Select Category" and self.txt_SearchBox.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴏɴ ᴡʜᴀᴛ ʙᴀꜱɪꜱ ʏᴏᴜ ᴡᴀɴɴᴀ
ᴡᴀᴛᴄʜ", icon = "question", parent = self.root)
else :
mycon = pymysql.connect(host = "localhost", user = "root", password = "1234",
database = "details")
cursor = mycon.cursor()
cursor.execute("SELECT * FROM Media WHERE " +str(self.SearchBy_var.get())+"
LIKE '%"4324
+str(self.txt_SearchBox.get())+"%' ")
Details = cursor.fetchall()
if len(Details) != 0 :
self.Media_Table.delete(*self.Media_Table.get_children())
if self.ID_var.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇʟᴇᴄᴛ ᴍᴇᴅɪᴀ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ ᴅᴇʟᴇᴛᴇ", icon
= "warning", parent = self.root)
else :
mycon = pymysql.connect(host = "localhost", user = "root", password = "1234", database =
"details")
cursor = mycon.cursor()
cursor.execute("DELETE FROM Media WHERE ID = %s", self.ID_var.get())
mycon.commit()
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇʟᴇᴄᴛᴇᴅ ᴍᴇᴅɪᴀ ʜᴀꜱ ʙᴇᴇɴ ᴅᴇʟᴇᴛᴇᴅ", parent =
self.root)
self.ShowAll_Data()
self.Clear()
mycon.close()

def Stream_Now(self) :
if self.ID_var.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇʟᴇᴄᴛ ᴍᴇᴅɪᴀ ᴡʜɪᴄʜ ʏᴏᴜ ᴡᴀɴɴᴀ
ꜱᴛʀᴇᴀᴍ", icon = "warning", parent = self.root)
else :
webbrowser.open(str(self.Link_var.get()), new=2)

def Search_Data(self) :
if self.SearchBy_var.get() == "Select Category" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴏɴ ᴡʜᴀᴛ ʙᴀꜱɪꜱ ʏᴏᴜ ᴡᴀɴɴᴀ ᴡᴀᴛᴄʜ",
icon = "question", parent = self.root)
elif self.txt_SearchBox.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ꜱᴇᴀʀᴄʜ ʙᴏx ɪꜱ ᴇᴍᴘᴛʏ", icon =
"warning", parent = self.root)
elif self.SearchBy_var.get() == "Select Category" and self.txt_SearchBox.get() == "" :
messagebox.showinfo("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "ᴏɴ ᴡʜᴀᴛ ʙᴀꜱɪꜱ ʏᴏᴜ ᴡᴀɴɴᴀ ᴡᴀᴛᴄʜ",
icon = "question", parent = self.root)
else :
mycon = pymysql.connect(host = "localhost", user = "root", password = "1234", database =
"details")
cursor = mycon.cursor()
cursor.execute("SELECT * FROM Media WHERE " +str(self.SearchBy_var.get())+" LIKE '%"
+str(self.txt_SearchBox.get())+"%' ")
Details = cursor.fetchall()
if len(Details) != 0 :
self.Media_Table.delete(*self.Media_Table.get_children())
for Data in Details :
self.Media_Table.insert("", END, values = Data)
else :
No_Data = Label(self.root, text = "Oops! No Medias Were Found",font=("FZShuTi",
45, 'bold'), fg = "#021E2F", bg = '#FFEFD5')
No_Data.place(x = 622, y = 189, height = 597, width = 890)
No_Data.after(3000, No_Data.destroy)
self.Clear()
mycon.commit()
mycon.close()
def SignOut(self) :
MessageBox
4325 = messagebox.askyesno("𝗪𝘆𝗻𝘁𝗿 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴 𝗦𝗲𝗿𝘃𝗶𝗰𝗲", "Are You Sure You Wanna Sign
Out ?")
if MessageBox == True :
self.Login_Interface()

def Media_Interface(self) :
Title_Frame = Frame(self.root, bd = 0, bg = "#FFE6BC")
Title_Frame.place(x = 0, y= 0, width = 1535.5, height = 95)

Title = Label(Title_Frame, text = "𝕎𝕪𝕟𝕥𝕣 𝕊𝕥𝕣𝕖𝕒𝕞𝕚𝕟𝕘 𝕊𝕖𝕣𝕧𝕚𝕔𝕖", bd = 8, relief = RIDGE, font =


("Product Sans", 50, "bold"), bg = "#ECB365", fg = "#630000")
Title.place(x =0, y = 0, height = 90, width = 1535.5)

Logo_Frame = Frame(self.root, bd = 0, bg = "#ffffff")


Logo_Frame.place(x = 280, y = 10, width = 80, height = 70)
self.Logo = ImageTk.PhotoImage(file = "Images/Logo.png")
Logo = Label(Logo_Frame, image = self.Logo).place(x = 0, y = 0, height = 70, width = 80)

self.Addbtn = PhotoImage(file = "Images/Sign_Out.png")


btn = Button(Title_Frame, image = self.Addbtn, bd = 0, cursor = "hand2", relief = FLAT, command =
self.SignOut)
btn.place(x = 1484, y = 11, width = 40, height = 40)

Developers = Label(Title_Frame, text = "Developers : Nishan, Rishu, Yogesh",bd = 0, font =


("Bafora Demo", 20, 'bold'), bg = "#ECB365", fg = "#800000")
Developers.place(x =1178, y = 52, height = 30, width = 350)

self.ID_var = StringVar()
self.Title_var = StringVar()
self.Genre_var = StringVar()
self.Type_var = StringVar()
self.IMDb_var = StringVar()
self.Certificate_var = StringVar()
self.Streaming_Platform_var = StringVar()
self.Description_var = StringVar()
self.Link_var = StringVar()
self.SearchBy_var = StringVar()
self.SearchBox_var = StringVar()
Manage_Frame = Frame(self.root, bd = 5, relief = GROOVE, bg = "#F3C892")
Manage_Frame.place(x = 2, y= 93, width = 613, height = 700)
Details_Title = Label(Manage_Frame, text = "Media Details", font = ("FZShuTi",50, "bold"), bg =
"#F3C892", fg = "#630000")
Details_Title.place(x = 45, y = 0, height = 55, width = 500)
Label_ID = Label(Manage_Frame, text = "ID", font = ("Product Sans",17, "bold"), bg = "#F3C892", fg
= "#800000").place(x = 35, y = 70)
txt_ID = Entry(Manage_Frame, textvariable = self.ID_var, font = ("Product Sans",15), state =
DISABLED, justify = CENTER, bg = "#FFEFD5")
txt_ID.place(x = 35, y = 105, width = 250)
Label_Type = Label(Manage_Frame, text = "Type", font = ("Product Sans",17, "bold"), bg =
"#F3C892", fg = "#800000").place(x = 315, y = 70)
txt_Type = Entry(Manage_Frame, textvariable = self.Type_var, font = ("Product Sans",15), state =
DISABLED, justify = CENTER, bg = "#FFEFD5")
txt_Type.place(x = 315, y = 105, width = 250)
Label_Title = Label(Manage_Frame, text = "Title", font = ("Product Sans",17, "bold"), bg =
"#F3C892",
4326 fg = "#800000").place(x = 35, y = 140)
txt_Title = Entry(Manage_Frame, textvariable = self.Title_var, font = ("Product Sans",15), state =
DISABLED, justify = CENTER, bg = "#FFEFD5")
txt_Title.place(x = 35, y = 175, width = 530)

Label_Genre = Label(Manage_Frame, text = "Genre", font = ("Product Sans",17, "bold"), bg =


"#F3C892", fg = "#800000").place(x = 35, y = 210)
txt_Genre = Entry(Manage_Frame, textvariable = self.Genre_var, font = ("Product Sans",15), state
= DISABLED, justify = CENTER, bg = "#FFEFD5")
txt_Genre.place(x = 35, y = 245, width = 250)
Label_IMDb = Label(Manage_Frame, text = "IMDb", font = ("Product Sans",17, "bold"), bg =
"#F3C892", fg = "#800000").place(x = 315, y = 210)
txt_IMDb = Entry(Manage_Frame, textvariable = self.IMDb_var, font = ("Product Sans",15), state =
DISABLED, justify = CENTER, bg = "#FFEFD5")
txt_IMDb.place(x = 315, y = 245, width = 250)
Label_Certificate = Label(Manage_Frame, text = "Cerificate", font = ("Product Sans",17, "bold"), bg
= "#F3C892", fg = "#800000").place(x = 35, y = 280)
txt_Certificate = Entry(Manage_Frame, textvariable = self.Certificate_var, font = ("Product
Sans",15), state = DISABLED, justify = CENTER, bg = "#FFEFD5")
txt_Certificate.place(x = 35, y = 313, width = 250)
Label_Streaming_Platform = Label(Manage_Frame, text = "Streaming Platform", font = ("Product
Sans",17, "bold"), bg = "#F3C892", fg = "#800000").place(x = 315, y = 280)
txt_Streaming_Platform = Entry(Manage_Frame, textvariable = self.Streaming_Platform_var, font
= ("Product Sans",15), state = DISABLED, justify = CENTER, bg = "#FFEFD5")
txt_Streaming_Platform.place(x = 315, y = 315, width = 250)
Label_Description = Label(Manage_Frame, text = "Description", font = ("Product Sans",17, "bold"),
bg = "#F3C892", fg = "#800000").place(x = 35, y = 350)
self.txt_Description = Text(Manage_Frame, font = ("Cambria",11), bg = "#FFEFD5")
self.txt_Description.place(x = 35, y = 382, width = 530, height = 185)
Label_Link = Label(Manage_Frame, text = "Link", font = ("Product Sans",17, "bold"), bg =
"#F3C892", fg = "#800000").place(x = 35, y = 570)
txt_Link = Entry(Manage_Frame, textvariable = self.Link_var, font = ("Product Sans",15), state =
DISABLED, justify = CENTER, bg = "#FFEFD5")
txt_Link.place(x = 35, y = 600, width = 530, height = 30)
Button_Frame = Frame(self.root, bd = 0, bg = "#F3C892")
Button_Frame.place(x = 20, y= 725, width = 580, height = 60)
Addbtn = Button(Button_Frame, text = "Stream Now", width = 10, font = ("Gagalin", 16), bg =
"#F99A05", bd = 5, relief = RIDGE, cursor = "hand2", command = self.Stream_Now)
Addbtn.place(x = 230, y = 10, width = 130, height = 40)
Details_Frame = Frame(self.root, bd = 5, relief = GROOVE, bg = "#F3C892")
Details_Frame.place(x = 615, y= 93, width = 920, height = 700)
Extract_Frame = Frame(self.root, bd = 0, bg = "#F3C892")
Extract_Frame.place(x = 630, y= 100, width = 890, height = 60)
Filter_Title = Label(Extract_Frame, text = "Filter", font = ("FZShuTi",50, "bold"), bg = "#F3C892", fg
= "#630000")
Filter_Title.place(x = 0, y = 0, height = 55, width = 220)
Label_SearchBy = Label(Extract_Frame, font = ("Product Sans",15, "bold"), bg = "#F3C892", fg =
"#9B0000").place(x = 310, y = 110)
SearchBy = ttk.Combobox(Extract_Frame, textvariable = self.SearchBy_var, font = ("Product
Sans",14), justify = CENTER, state = 'readonly')
SearchBy['values'] = ("Title", "Genre", "Type", "Certificate", "Streaming_Platform")
SearchBy.place(x = 238, y = 15, width = 195, height = 35)
self.SearchBy_var.set("Select Category")
self.txt_SearchBox = Entry(Extract_Frame, width = 10, bg = "#FFEFD5", textvariable =
self.SearchBox_var,
4327 font = ("Product Sans", 15), relief = GROOVE)
self.txt_SearchBox.place(x = 455, y = 15, width = 160, height = 35)
Addbtn = Button(Extract_Frame, text = "Search", width = 10, font = ("Gagalin", 18), bg =
"#F99A05", bd = 5, relief = RIDGE, cursor = "hand2", command = self.Search_Data)
Addbtn.place(x = 640, y = 12, width = 100, height = 40)

Addbtn = Button(Extract_Frame, text = "Show All", width = 10, font = ("Gagalin", 18), bg =
"#F99A05", bd = 5, relief = RIDGE, cursor = "hand2", command = self.ShowAll_Data)
Addbtn.place(x = 760, y = 12, width = 120, height = 40)

Table_Frame = Frame(Details_Frame, bd = 0, bg = "#95D1CC" )


Table_Frame.place(x = 0, y = 70, width = 910, height = 620)

Style = ttk.Style(self.root)
Style.theme_use("winnative")
Style.configure(".", font=('Product Sans', 10), bg = "#FFDEAD")
Style.configure("Media_Table.Heading", fg = "#630000", font = ('Product Sans', 20))
scroll_y = Scrollbar(Table_Frame, orient = VERTICAL)
self.Media_Table = ttk.Treeview(Table_Frame, columns = ("ID", "Title", "Genre", "Type", "IMDb",
"Certificate", "Streaming_Platform"), yscrollcommand = scroll_y.set)
scroll_y.pack(side = RIGHT, fill = Y)
scroll_y.config(command = self.Media_Table.yview)
self.Media_Table.heading("ID", text = "ID", anchor=tkinter.CENTER)
self.Media_Table.heading("Title", text = "Title", anchor=tkinter.CENTER)
self.Media_Table.heading("Genre", text = "Genre", anchor=tkinter.CENTER)
self.Media_Table.heading("Type", text = "Type", anchor=tkinter.CENTER)
self.Media_Table.heading("IMDb", text = "IMDb", anchor=tkinter.CENTER)
self.Media_Table.heading("Certificate", text = "Certificate", anchor=tkinter.CENTER)
self.Media_Table.heading("Streaming_Platform", text = "Streaming On", anchor=tkinter.CENTER)
self.Media_Table['show'] = "headings"
self.Media_Table.column("ID", width = 70, anchor=tkinter.CENTER)
self.Media_Table.column("Title", width = 290, anchor=tkinter.CENTER)
self.Media_Table.column("Genre", width = 110, anchor=tkinter.CENTER)
self.Media_Table.column("Type", width = 100, anchor=tkinter.CENTER)
self.Media_Table.column("IMDb", width = 60, anchor=tkinter.CENTER)
self.Media_Table.column("Certificate", width = 160, anchor=tkinter.CENTER)
self.Media_Table.column("Streaming_Platform", width = 100, anchor=tkinter.CENTER)
self.Media_Table.pack(fill = BOTH, expand = 1)
self.Media_Table.bind("<ButtonRelease-1>", self.Get_Details)
self.root.bind('<Return>',lambda event:self.Search_Data())
self.ShowAll_Data()

root = Tk()
obj = Wynter(root)
root.mainloop()

4328
System
Implementation
Software Used

Name : Python
Designed by : Guido van Rossum
Developer : Python Software Foundation
First appeared : February 20, 1991
OS : Windows, Linux/UNIX, macOS & more
License : Python Software Foundation License
Name : Sublime Text 4
Developer : Sublime HQ
Initial release : 18 January 2008
OS : Linux, macOS & Windows
Platform : x64 and ARM64
Type : Source code editor
License : Shareware
Name : Windows 11
Developer : Microsoft
Written in : C, C++, C#, assembly language
Source model : Closed-source, Source-available (through
Shared Source Initiative) & Some components open source
4329
Platforms : x86-64, ARM64

You might also like