├── calculator.py ├── favicon.ico ├── flipkart-logo.png ├── news_gui.py ├── tkinter_demo.py ├── wallpaper_viewer.py └── wallpapers ├── flipkart-logo.png ├── img1.jpg ├── img2.jpg ├── img3.jpg └── readme.md /calculator.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | 3 | first_number=second_number=operator=None 4 | 5 | def get_digit(digit): 6 | current = result_label['text'] 7 | new = current + str(digit) 8 | result_label.config(text=new) 9 | 10 | def clear(): 11 | result_label.config(text='') 12 | 13 | def get_operator(op): 14 | global first_number,operator 15 | 16 | first_number = int(result_label['text']) 17 | operator = op 18 | result_label.config(text='') 19 | 20 | def get_result(): 21 | global first_number,second_number,operator 22 | 23 | second_number = int(result_label['text']) 24 | 25 | if operator == '+': 26 | result_label.config(text=str(first_number+second_number)) 27 | elif operator == '-': 28 | result_label.config(text=str(first_number - second_number)) 29 | elif operator == '*': 30 | result_label.config(text=str(first_number * second_number)) 31 | else: 32 | if second_number == 0: 33 | result_label.config(text='Error') 34 | else: 35 | result_label.config(text=str(round(first_number / second_number,2))) 36 | 37 | root = Tk() 38 | root.title('Calculator') 39 | root.geometry('280x380') 40 | root.resizable(0,0) 41 | root.configure(background='black') 42 | 43 | result_label = Label(root,text='',bg='black',fg='white') 44 | result_label.grid(row=0,column=0,columnspan=5,pady=(50,25),sticky='w') 45 | result_label.config(font=('verdana',30,'bold')) 46 | 47 | btn7 = Button(root,text='7',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(7)) 48 | btn7.grid(row=1,column=0) 49 | btn7.config(font=('verdana',14)) 50 | 51 | btn8 = Button(root,text='8',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(8)) 52 | btn8.grid(row=1,column=1) 53 | btn8.config(font=('verdana',14)) 54 | 55 | btn9 = Button(root,text='9',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(9)) 56 | btn9.grid(row=1,column=2) 57 | btn9.config(font=('verdana',14)) 58 | 59 | btn_add = Button(root,text='+',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_operator('+')) 60 | btn_add.grid(row=1,column=3) 61 | btn_add.config(font=('verdana',14)) 62 | 63 | btn4 = Button(root,text='4',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(4)) 64 | btn4.grid(row=2,column=0) 65 | btn4.config(font=('verdana',14)) 66 | 67 | btn5 = Button(root,text='5',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(5)) 68 | btn5.grid(row=2,column=1) 69 | btn5.config(font=('verdana',14)) 70 | 71 | btn6 = Button(root,text='6',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(6)) 72 | btn6.grid(row=2,column=2) 73 | btn6.config(font=('verdana',14)) 74 | 75 | btn_sub = Button(root,text='-',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_operator('-')) 76 | btn_sub.grid(row=2,column=3) 77 | btn_sub.config(font=('verdana',14)) 78 | 79 | btn1 = Button(root,text='1',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(1)) 80 | btn1.grid(row=3,column=0) 81 | btn1.config(font=('verdana',14)) 82 | 83 | btn2 = Button(root,text='2',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(2)) 84 | btn2.grid(row=3,column=1) 85 | btn2.config(font=('verdana',14)) 86 | 87 | btn3 = Button(root,text='3',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(3)) 88 | btn3.grid(row=3,column=2) 89 | btn3.config(font=('verdana',14)) 90 | 91 | btn_mul = Button(root,text='*',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_operator('*')) 92 | btn_mul.grid(row=3,column=3) 93 | btn_mul.config(font=('verdana',14)) 94 | 95 | btn_clr = Button(root,text='C',bg='#00a65a',fg='white',width=5,height=2,command=lambda :clear()) 96 | btn_clr.grid(row=4,column=0) 97 | btn_clr.config(font=('verdana',14)) 98 | 99 | btn0 = Button(root,text='0',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_digit(0)) 100 | btn0.grid(row=4,column=1) 101 | btn0.config(font=('verdana',14)) 102 | 103 | btn_equals = Button(root,text='=',bg='#00a65a',fg='white',width=5,height=2,command=get_result) 104 | btn_equals.grid(row=4,column=2) 105 | btn_equals.config(font=('verdana',14)) 106 | 107 | btn_div = Button(root,text='/',bg='#00a65a',fg='white',width=5,height=2,command=lambda :get_operator('/')) 108 | btn_div.grid(row=4,column=3) 109 | btn_div.config(font=('verdana',14)) 110 | 111 | root.mainloop() -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/campusx-official/python-gui-tkinter/37e701f2de6d50824c6360bfa5026e8ec949ba5e/favicon.ico -------------------------------------------------------------------------------- /flipkart-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/campusx-official/python-gui-tkinter/37e701f2de6d50824c6360bfa5026e8ec949ba5e/flipkart-logo.png -------------------------------------------------------------------------------- /news_gui.py: -------------------------------------------------------------------------------- 1 | import io 2 | import webbrowser 3 | import requests 4 | from tkinter import * 5 | from urllib.request import urlopen 6 | from PIL import ImageTk,Image 7 | 8 | class NewsApp: 9 | 10 | def __init__(self): 11 | 12 | # fetch data 13 | self.data = requests.get('https://newsapi.org/v2/top-headlines?country=in&apiKey=07ce6431517e45c5b04b589c36e5bed6').json() 14 | # initial GUI load 15 | self.load_gui() 16 | # load the 1st news item 17 | self.load_news_item(0) 18 | 19 | def load_gui(self): 20 | self.root = Tk() 21 | self.root.geometry('350x600') 22 | self.root.resizable(0,0) 23 | self.root.title('Mera News App') 24 | self.root.configure(background='black') 25 | 26 | def clear(self): 27 | for i in self.root.pack_slaves(): 28 | i.destroy() 29 | 30 | def load_news_item(self,index): 31 | 32 | # clear the screen for the new news item 33 | self.clear() 34 | 35 | # image 36 | try: 37 | img_url = self.data['articles'][index]['urlToImage'] 38 | raw_data = urlopen(img_url).read() 39 | im = Image.open(io.BytesIO(raw_data)).resize((350,250)) 40 | photo = ImageTk.PhotoImage(im) 41 | except: 42 | img_url = 'https://www.hhireb.com/wp-content/uploads/2019/08/default-no-img.jpg' 43 | raw_data = urlopen(img_url).read() 44 | im = Image.open(io.BytesIO(raw_data)).resize((350, 250)) 45 | photo = ImageTk.PhotoImage(im) 46 | 47 | 48 | label = Label(self.root,image=photo) 49 | label.pack() 50 | 51 | 52 | heading = Label(self.root,text=self.data['articles'][index]['title'],bg='black',fg='white',wraplength=350,justify='center') 53 | heading.pack(pady=(10,20)) 54 | heading.config(font=('verdana',15)) 55 | 56 | details = Label(self.root, text=self.data['articles'][index]['description'], bg='black', fg='white', wraplength=350,justify='center') 57 | details.pack(pady=(2, 20)) 58 | details.config(font=('verdana', 12)) 59 | 60 | frame = Frame(self.root,bg='black') 61 | frame.pack(expand=True,fill=BOTH) 62 | 63 | if index != 0: 64 | prev = Button(frame,text='Prev',width=16,height=3,command=lambda :self.load_news_item(index-1)) 65 | prev.pack(side=LEFT) 66 | 67 | read = Button(frame, text='Read More', width=16, height=3,command=lambda :self.open_link(self.data['articles'][index]['url'])) 68 | read.pack(side=LEFT) 69 | 70 | if index != len(self.data['articles'])-1: 71 | next = Button(frame, text='Next', width=16, height=3,command=lambda :self.load_news_item(index+1)) 72 | next.pack(side=LEFT) 73 | 74 | self.root.mainloop() 75 | 76 | def open_link(self,url): 77 | webbrowser.open(url) 78 | 79 | 80 | obj = NewsApp() -------------------------------------------------------------------------------- /tkinter_demo.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from PIL import ImageTk,Image 3 | from tkinter import messagebox 4 | 5 | def handle_login(): 6 | email = email_input.get() 7 | password = password_input.get() 8 | 9 | if email == 'nitish@gmail.com' and password == '1234': 10 | messagebox.showinfo('Yayyy','Login Successful') 11 | else: 12 | messagebox.showerror('Error','Login Failed') 13 | 14 | 15 | root = Tk() 16 | 17 | root.title('Login Form') 18 | root.iconbitmap('favicon.ico') 19 | 20 | root.geometry('350x500') 21 | 22 | root.configure(background='#0096DC') 23 | img = Image.open('wallpapers/img1.jpg') 24 | resized_img = img.resize((70,70)) 25 | img = ImageTk.PhotoImage(resized_img) 26 | 27 | img_label = Label(root,image=img) 28 | img_label.pack(pady=(10,10)) 29 | 30 | text_label = Label(root,text='Flipkart',fg='white',bg='#0096DC') 31 | text_label.pack() 32 | text_label.config(font=('verdana',24)) 33 | 34 | email_label = Label(root,text='Enter Email',fg='white',bg='#0096DC') 35 | email_label.pack(pady=(20,5)) 36 | email_label.config(font=('verdana',12)) 37 | 38 | email_input = Entry(root,width=50) 39 | email_input.pack(ipady=6,pady=(1,15)) 40 | 41 | password_label = Label(root,text='Enter Password',fg='white',bg='#0096DC') 42 | password_label.pack(pady=(20,5)) 43 | password_label.config(font=('verdana',12)) 44 | 45 | password_input = Entry(root,width=50) 46 | password_input.pack(ipady=6,pady=(1,15)) 47 | 48 | login_btn = Button(root,text='Login Here',bg='white',fg='black',width=20,height=2,command=handle_login) 49 | login_btn.pack(pady=(10,20)) 50 | login_btn.config(font=('verdana',10)) 51 | 52 | 53 | 54 | root.mainloop() -------------------------------------------------------------------------------- /wallpaper_viewer.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from PIL import ImageTk,Image 3 | import os 4 | 5 | def rotate_image(): 6 | global counter 7 | img_label.config(image=img_array[counter%len(img_array)]) 8 | counter = counter + 1 9 | 10 | 11 | counter = 1 12 | root = Tk() 13 | root.title('Wallpaper Viewer') 14 | 15 | root.geometry('250x400') 16 | root.configure(background='black') 17 | 18 | files = os.listdir('wallpapers') 19 | 20 | img_array = [] 21 | for file in files: 22 | img = Image.open(os.path.join('wallpapers',file)) 23 | resized_img = img.resize((200,300)) 24 | img_array.append(ImageTk.PhotoImage(resized_img)) 25 | 26 | img_label = Label(root,image=img_array[0]) 27 | img_label.pack(pady=(15,10)) 28 | 29 | next_btn = Button(root,text='Next',bg='white',fg='black',width=28,height=2,command=rotate_image) 30 | next_btn.pack() 31 | root.mainloop() -------------------------------------------------------------------------------- /wallpapers/flipkart-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/campusx-official/python-gui-tkinter/37e701f2de6d50824c6360bfa5026e8ec949ba5e/wallpapers/flipkart-logo.png -------------------------------------------------------------------------------- /wallpapers/img1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/campusx-official/python-gui-tkinter/37e701f2de6d50824c6360bfa5026e8ec949ba5e/wallpapers/img1.jpg -------------------------------------------------------------------------------- /wallpapers/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/campusx-official/python-gui-tkinter/37e701f2de6d50824c6360bfa5026e8ec949ba5e/wallpapers/img2.jpg -------------------------------------------------------------------------------- /wallpapers/img3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/campusx-official/python-gui-tkinter/37e701f2de6d50824c6360bfa5026e8ec949ba5e/wallpapers/img3.jpg -------------------------------------------------------------------------------- /wallpapers/readme.md: -------------------------------------------------------------------------------- 1 | Nothing to display 2 | --------------------------------------------------------------------------------