Я пытаюсь создать приложение на Python и немного застрял с размещением фреймов tkinter. У меня три кадра;один для новостей, один для календаря и один для цитат. Размещение новостных и календарных фреймов в порядке, но я не могу разместить фрейм цитат под ними, выровненный по центру. Пожалуйста, помогите мне с этим размещением, потому что я не могу понять это сам. Любая помощь приветствуется.
Ниже приведен код: -
from tkinter import *
import time
import datetime
from PIL import Image, ImageTk
import requests
import calendar
from apiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
import pickle
import googlefonts_installer
from bs4 import BeautifulSoup
class News(Frame):
def __init__(self, parent):
super(News, self).__init__(bg='black')
#url = " https://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=caa7f97ce8f2400a9785cbe704afc345"
#json = requests.get(url).json()
self.title = 'Headlines'
self.title_lb = Label(self, text=self.title, font='times 20',bg='black', fg='white')
self.title_lb.pack(side=TOP, anchor=W, pady=15)
#im = Image.open('Newspaper_reduced.png')
#self.pho = ImageTk.PhotoImage(im)
#news1 = json['articles'][0]['title']
#news2 = json['articles'][1]['title']
#news3 = json['articles'][2]['title']
#news4 = json['articles'][3]['title']
#news5 = json['articles'][4]['title']
self.img = Label(self,bg='black')
self.img.pack(anchor=W)
news = ''
self.headline1_lb = Label(self, font = 'times 12' ,bg='black', fg='white')
self.headline1_lb.pack(anchor=W)
self.img2 = Label(self,bg='black')
self.img2.pack(anchor=W)
news2 = ''
self.headline2_lb = Label(self, font='times 12',bg='black', fg='white')
self.headline2_lb.pack(anchor=W)
self.img3 = Label(self,bg='black')
self.img3.pack(anchor=W)
news3 = ''
self.headline3_lb = Label(self, font='times 12',bg='black', fg='white')
self.headline3_lb.pack(anchor=W)
self.img4 = Label(self,bg='black')
self.img4.pack(anchor=W)
news4 = ''
self.headline4_lb = Label(self, font='times 12',bg='black', fg='white')
self.headline4_lb.pack(anchor=W)
self.img5 = Label(self,bg='black')
#self.img5.pack(anchor=W)
news5 = ''
self.headline5_lb = Label(self, font="times 12", bg='black', fg='white')
#self.headline5_lb.pack(anchor=W)
self.show_news()
def show_news(self):
url = " https://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=caa7f97ce8f2400a9785cbe704afc345"
json = requests.get(url).json()
im = Image.open('Newspaper_reduced.png')
self.pho = ImageTk.PhotoImage(im)
self.img.configure(image=self.pho)
self.news1 = json['articles'][0]['title']
self.headline1_lb.configure(text=self.news1)
self.img2.configure(image=self.pho)
self.news2 = json['articles'][1]['title']
self.headline2_lb.configure(text=self.news2)
self.img3.configure(image=self.pho)
self.news3 = json['articles'][2]['title']
self.headline3_lb.configure(text=self.news3)
self.img4.configure(image=self.pho)
self.news4 = json['articles'][3]['title']
self.headline4_lb.configure(text=self.news4)
self.img5.configure(image=self.pho)
self.news5 = json['articles'][4]['title']
self.headline5_lb.configure(text=self.news5)
self.after(600000,self.show_news)
class Calendar(Frame):
def __init__(self, parent):
super(Calendar, self).__init__(bg='black')
'''eventTitle = Label(self, text="To do List", font="Courier 25", bg='black', fg='white')
eventTitle.pack()
eventline = '______________________'
event1 = ''
self.event1_lb = Label(self, font='courier 12',bg='black', fg='white')
self.event1_lb.pack()
self.eventline1_lb = Label(self, text = eventline, bg='black',fg='white')
self.eventline1_lb.pack()
event234 = ''
self.event2_lb = Label(self, font='courier 12', bg='black', fg='white')
self.event2_lb.pack()
self.eventline2_lb = Label(self, text = eventline, bg='black',fg='white')
self.eventline2_lb.pack()'''
self.calendars()
#self.reminders()
def calendars(self):
cal = calendar.month(2019,10)
self.calendarlb = Label(self, text=cal, font="Courier 12", justify="left",bg='black', fg='white')
self.calendarlb.pack(side=TOP, anchor=N, fill=BOTH, expand=YES)
def reminders(self):
scopes = ['https://www.googleapis.com/auth/calendar']
#flow = InstalledAppFlow.from_client_secrets_file("client_secret.json", scopes=scopes)
#credentials = flow.run_console()
#pickle.dump(credentials, open("token.pkl", "wb"))
credentials = pickle.load(open("token.pkl", "rb"))
service = build("calendar", "v3" , credentials=credentials)
result = service.calendarList().list().execute()
calendar_id = result['items'][1]['id']
now = datetime.datetime.utcnow()
today = now.isoformat()+'Z'
tomorrow = (now+datetime.timedelta(days=1)).isoformat()+'Z'
outcomes = service.events().list(calendarId=calendar_id, timeMin=today,timeMax=tomorrow,singleEvents=True ,orderBy='startTime').execute()
self.eventa = outcomes['items'][0]['summary']
self.eventb = outcomes['items'][0]['end']['dateTime']
self.event1 = str(self.eventa + '\n' + self.eventb)
self.event1_lb.configure(text=self.event1)
self.event2 = outcomes['items'][1]['summary']
self.event23 = outcomes['items'][1]['end']['dateTime']
self.event234 = str(self.event2 + '\n' + self.event23)
self.event2_lb.configure(text=self.event234)
'''eventline = '______________________'
eventTitle = Label(self, text="To do List", font="Courier 25", bg='black', fg='white')
eventTitle.pack()
event1_lb = Label(self, text= event123, font='courier 12',bg='black', fg='white')
event1_lb.pack()
#event12_lb = Label(self, text=event12, font='courier 12', bg='black',fg='white')
#event12_lb.pack()
eventline1_lb = Label(self, text = eventline, bg='black',fg='white')
eventline1_lb.pack()
event2_lb = Label(self, text=event2, font='courier 12', bg='black', fg='white')
event2_lb.pack()
event22_lb = Label(self, text=event22, font='courier 12',bg='black', fg='white')
event22_lb.pack()
eventline2_lb = Label(self, text = eventline, bg='black',fg='white')
eventline2_lb.pack()'''
self.after(1000,self.reminders)
class Quotes(Frame):
def __init__(self,parent):
super(Quotes,self).__init__(bg='black')
req = requests.get('https://www.brainyquote.com/quote_of_the_day')
soup = BeautifulSoup(req.text,'lxml')
imageQuote = soup.find('img')
#print(imageQuote['alt'])
text_lb = Label(self,text=imageQuote['alt'],font=("Courier 12"),bg='black',fg='white')
text_lb.pack(side=RIGHT)
class FullscreenWindow:
def __init__(self):
self.tk = Tk()
self.tk.configure(bg='black')
self.tk.title('smartmirror')
self.tFrame = Frame(self.tk , bg='black')
self.tFrame.pack(side=TOP, fill=BOTH, expand=YES)
self.bFrame = Frame(self.tk, bg='black')
self.bFrame.pack(side=BOTTOM, fill=BOTH, expand=YES)
self.state = False
self.tk.bind("<Return>", self.toggle_fullscreen)
self.tk.bind("<Escape>", self.end_fullscreen)
#self.logo = Logo(self.topFrame)
#self.logo.pack(side=TOP,anchor=CENTER)
self.clock = Clock(self.tFrame)
self.clock.pack(side=RIGHT, anchor=NE, padx=50, pady=60) #side=RIGHT, anchor=NE, padx=50, pady=60
self.weather = Weather(self.tFrame)
self.weather.pack(side=LEFT, anchor=NW, padx=50, pady=25) #side=LEFT, anchor=NW, padx=50, pady=25
self.news = News(self.bFrame)
self.news.pack(side=LEFT, anchor=W, padx=25,pady=50)#side=LEFT, anchor=W, padx=25,pady=50 #new news
self.calendar = Calendar(self.bFrame)
self.calendar.pack(side=RIGHT,anchor=E,padx=110,pady=50)#side=RIGHT,anchor=E,padx=110,pady=50 #new calendar
self.quotes = Quotes(self.bFrame)
self.quotes.pack(side=RIGHT, anchor=E, padx=25, pady=40)
def toggle_fullscreen(self, event=None):
self.state = not self.state # Just toggling the boolean
self.tk.attributes("-fullscreen", self.state)
return "break"
def end_fullscreen(self, event=None):
self.state = False
self.tk.attributes("-fullscreen", False)
return "break"
if __name__ == '__main__':
w = FullscreenWindow()
w.tk.mainloop