import requests import wikipedia from customtkinter import * from tkinter import Label import tkinter.messagebox as messagebox import tkinter.font as tkfont import webbrowser class WikipediaArticle(CTk): def __init__(self): """Initialize the WikipediaArticle application.""" super().__init__() # font for link self.custom_font = tkfont.Font(size=10, underline=True) # setting an empty label to avoid errors self.link = CTkLabel(self, text="") # button for generating random article self.get_article = CTkButton(self, text="Random Stuff", command=self.random_article_t_summary) self.get_article.grid(row=3, column=1 ,padx=10,pady=10) # button to copy article link self.copy_t = CTkButton(self, text="Copy Link", command=self.copy_text, fg_color="transparent") self.copy_t.grid(row=3, column=2 ,padx=10,pady=10) # button to open link in browser self.open_i = CTkButton(self, text="Open in browser", command=self.open_link) self.open_i.grid(row=3, column=0 ,padx=10,pady=10) def random_article_t_summary(self): """Generate a random Wikipedia article and display its title, summary, and link. uses the self.summarize_wikipedia_article() method""" url = requests.get("https://en.wikipedia.org/wiki/Special:Random") article_link = url.url title_and_summary = self.summarize_wikipedia_article(article_link) if title_and_summary: # getting link and title self.link = Label(self, text=article_link, fg="blue", font=self.custom_font) self.title = CTkLabel(self, text=title_and_summary[0]) # getting summary self.random_article = CTkTextbox(self) self.random_article.insert("0.0", title_and_summary[1]) self.random_article.configure(state="disabled") # packing title, summary, and link self.title.grid(row=0, column=1, padx=10) self.random_article.grid(row=1, column=1 ,padx=10,pady=10) self.link.grid(row=2, column=0, padx=10) def summarize_wikipedia_article(self,article_link): """ Summarize a Wikipedia article based on its link. Args: article_link (str): The link to the Wikipedia article. Returns: list: A list containing the page title and summary of the article, or None if the article is not found. """ # Extract the page title from the article link page_title = article_link.split("/")[-1] try: # Get the Wikipedia page based on the page title page = wikipedia.page(page_title) # Retrieve the summary of the page summary = page.summary return [page_title,summary] except wikipedia.exceptions.PageError: message = CTkLabel(self, text="Something went wrong! Try Again!") message.grid(row=4, column=1,padx=10, pady=10) return None def copy_text(self): # Get the text from the label text = self.link.cget("text") # Set the text to the clipboard self.clipboard_clear() self.clipboard_append(text) messagebox.showinfo("Copy", "Text copied to clipboard!") def open_link(self): try: webbrowser.open(self.link.cget("text")) except Exception: message = CTkLabel(self, text="Get the link first!") message.grid(row=4, column=1,padx=10, pady=10) if __name__ == "__main__": app = WikipediaArticle() app.mainloop()
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter