Leer hoe u uw eigen nieuwstoepassing kunt maken met Python en de Tkinter-bibliotheek.

In deze snelle wereld is het cruciaal om op de hoogte te blijven van het laatste nieuws. Bouw uw eigen News-applicatie die u nieuws brengt in verschillende categorieën, zoals entertainment, sport en technologie, toegankelijk op elk platform binnen handbereik.

Je ontwikkelt deze applicatie met behulp van Tkinter, de standaard GUI-bibliotheek voor Python, en voedt deze met behulp van de News API die artikelen uit meer dan 80.000 bronnen haalt.

Installeer tkinter en vraag Modules aan

Tkinter is een platformonafhankelijke, eenvoudige en gebruiksvriendelijke module waarmee u snel grafische gebruikersinterfaces kunt maken. Sommige van de applicaties die u met Tkinter kunt bouwen, bevatten een muziekspeler, kalender, hulpmiddel voor gewichtsconversie, woordspelletje, enzovoort.

Installeren tkinter voer in uw systeem de volgende opdracht uit in de terminal:

pip installeer tkinter

De aanvragen module maakt het gemakkelijker om HTTP-verzoeken te doen. Hiermee,

instagram viewer
je kunt interessante toepassingen ontwikkelen, zoals een website-statuschecker, webschraper, beursmonitor-bot en website-prestatietester. Om de verzoekenmodule te installeren, opent u de terminal en voert u de volgende opdracht uit:

pip installatieverzoeken

Hierin vind je de volledige broncode van de News-applicatie met behulp van Python GitHub-opslagplaats.

Genereer de News API-sleutel

Begin met het importeren van de vereiste bibliotheken. Aanmelden bij Nieuws-API en genereer uw API-sleutel. Met het gratis ontwikkelaarsaccount kun je dagelijks tot 100 verzoeken verzenden, wat geweldig is om te testen en aan de slag te gaan. Sla de API op in een variabele die u later zult gebruiken met de basis-URL om de belangrijkste krantenkoppen voor uw land op te halen.

van tkinter importeren *
van tkinter importeren berichten box
importeren aanvragen

apiKey = 'UW_API_KEY'

Definieer de structuur van de app

Definieer een klasse, NieuwsApp. Verwijs naar de API sleutel En type variabelen wereldwijd. Definieer een object van de klasse en initialiseer het hoofdvenster. Stel de afmetingen en titel van uw aanvraag in. Definieer twee lijsten, u gebruikt de eerste lijst om de knoppen te definiëren en de tweede om nieuwscategorieën te definiëren die u in uw toepassing wilt weergeven.

klasNieuwsApp:
globaal apiKey, typ
def__in het__(zelf, wortel):
zelf.root = root
zelf.root.geometry('1000x650')
zelf.root.titel("Nieuws applicatie")
self.newsCategoryButton = []
self.newsCategory = ["algemeen", "amusement", "sport", "technologie"]

Definieer een label dat fungeert als titel voor uw toepassing. Geef het bovenliggende element door waarin u het wilt plaatsen, de tekst die het moet weergeven, de lettertypestijl, de opvulling en de achtergrondkleur die het moet hebben. Gebruik de pak() vuloptie om het label de volledige ruimte in de X-richting te laten bezetten.

Definieer een LabelFrame en stel het bovenliggende element in samen met de achtergrondkleur die het zou moeten hebben. Gebruik de plaats() functie om het te organiseren op gespecificeerde coördinaten. Geef bovendien de breedte en hoogte van het frame door.

 titel = Label (self.root, tekst="Nieuws applicatie", lettertype=("keer nieuwe roman", 28, "vetgedrukt"), padie=2, bg='#ff007f').pak (vul=X)
F1 = LabelFrame (zelf.root, bg='#fc6c85')
F1.plaats (x=20, j=80, breedte=215, hoogte=210)

Definieer een for-lus die door de lengte van de nieuwsCat lijst. Definieer een knop in het eerder gedefinieerde frame. Geef de tekst door die moet worden weergegeven en converteer deze naar hoofdletters. Geef de breedte, de randdiepte, de letterstijl en de achtergrondkleur van de knoppen door. Gebruik de rooster manager om de knoppen in kolomvorm te rangschikken en opvulling toe te voegen in de X- en Y-richtingen.

Gebruik de bindmethode om de knop en het nieuwsgedeelte te koppelen. bepaalt dat de Nieuwsgebied functie zal plaatsvinden bij een linkermuisklik door de gebruiker. Voeg deze knoppen toe aan het newsCatButton eerder gedefinieerde lijst.

voor i in bereik (len (self.newsCategory)):
b = knop (F1, tekst=self.newsCategory[i].upper(), breedte=15, bd=3, lettertype="arial 14 vet", bg='#c154c1')
b.grid (rij=i, kolom=0, padx=10, padie=5)
b.binden('', zelf. Nieuwsgebied)
self.newsCategoryButton.append (b)

Definieer een frame en geef het het bovenliggende element door waarin u het wilt plaatsen en de randdiepte die het moet hebben. Organiseer het op gespecificeerde coördinaten en geef de relatieve hoogte en breedte door. Definieer een verticale schuifbalk met behulp van de oriënteren parameter en plaats deze in dit frame.

Definieer een tekstwidget. Geef het bovenliggende element door als dit frame, samen met de lettertypestijl en de achtergrondkleur die het zou moeten hebben. Bij het instellen van de waarde van de yscrollopdracht als scroll_y.set het krijgt de huidige positie van de schuifbalk bij gebruikersinteractie.

 F2 = Frame (zelf.root, bd=3)
F2.plaats (x=260, j=80, breedte=0.7, relatieve hoogte=0.8)
scroll_y = schuifbalk (F2, oriënteren=VERTICAAL)
self.txtarea = Tekst (F2, yscrollcommand=scroll_y.set, font=("keer nieuwe roman", 15, "vetgedrukt"), bg='#fc6c85')

Gebruik de pak() vuloptie om de schuifbalk aan de rechterkant van het frame te plaatsen en de volledige ruimte in de Y-richting in te nemen. Bij het instellen van de opdrachtparameter als txtarea.yview, wordt de beweging van de schuifbalk gekoppeld aan de functies omhoog en omlaag. Dus wanneer de gebruiker interactie heeft met de schuifbalk, veranderen de weergaven van het tekstgebied dienovereenkomstig.

Gebruik de invoegen() methode om de gebruiker te vragen een categorie te selecteren en deze aan het einde van bestaande tekst te plaatsen. Gebruik de pak() methode om de tekstwidget te vragen de ruimte in de X- en Y-richting in te nemen en indien nodig extra ruimte toe te wijzen met behulp van de uitbreiden parameter.

 scroll_y.pack (zijde=RECHTS, vulling=Y)
scroll_y.config (opdracht=self.txtarea.yview)
self.txtarea.insert (EINDE,"Kies een categorie:")
self.txtarea.pack (fill=BEIDE, expand=1)

Haal nieuws uit de API-reactie

Definieer een functie, Nieuwsgebied() die de huidige instantie van de klasse en de knopgebeurtenis accepteert. Geef de categorie van het nieuws dat de gebruiker heeft geselecteerd door in kleine letters en sla het op. Geef de vereiste parameters door aan de basis-URL en verwijder alle eerder aanwezige tekst van de eerste tot de laatste index. Voeg een lijn in voor afbakening.

Definieer een poging blokkeer en stuur een HTTP GET-verzoek naar de server die is gedefinieerd in de basis-URL. Converteer het antwoord naar JSON-indeling en extraheer de inhoud met de sleutel als Lidwoord en sla het op in een variabele.

defNieuwsgebied(zelf, gebeurtenis):
typ = gebeurtenis.widget.cget('tekst').lager()
BASE_URL = F' http://newsapi.org/v2/top-headlines? land=in&categorie={type}&apiKey=' + apiKey
zelf.txtarea.delete("1.0", EINDE)
self.txtarea.insert (EINDE, "\N")
poging:
artikelen = (requests.get (BASE_URL).json())['Lidwoord']

Als het aantal opgehaalde artikelen niet nul is, voert u een lus uit en voegt u de artikelen een voor een in de tekstwidget in. Geef de titel weer, gevolgd door de beschrijving, inhoud en URL in afzonderlijke regels. Voeg twee lijnen in voor afbakening. Als het aantal artikelen nul is, laat dan zien dat er geen nieuws beschikbaar is voor die specifieke categorie.

Als het try-blok mislukt, gebruikt u het uitzonderingsblok om de juiste foutmelding aan de gebruikers weer te geven.

als (artikelen != 0):
voor i in bereik (len (artikelen)):
self.txtarea.insert (EINDE, F"{artikelen[i]['titel']}\N")
self.txtarea.insert (EINDE, F"{artikelen[i]['beschrijving']}\N")
self.txtarea.insert (EINDE, F"{artikelen[i]['inhoud']}\N")
self.txtarea.insert (EINDE, ff"lees meer...{artikelen[i]['url']}\N")
self.txtarea.insert (EINDE, "\N")
self.txtarea.insert (EINDE, "\N")
anders:
self.txtarea.insert (EINDE, "Geen nieuws beschikbaar")
behalve Uitzondering als e:
berichtenbox.showerror('FOUT', "Sorry, we zijn wat problemen tegengekomen. Controleer de internetverbinding en probeer het opnieuw.")

Maak een instantie van de klasse en initialiseer deze. De Hoofdlus() functie vertelt Python om de Tkinter-gebeurtenislus uit te voeren en te luisteren naar gebeurtenissen totdat u het venster sluit.

wortel = Tk()
obj = NewsApp (root)
root.mainloop()

Zet alle code bij elkaar en uw applicatie is klaar om nieuws weer te geven volgens verschillende categorieën.

De uitvoer van de nieuwstoepassing

Bij het uitvoeren van het programma wordt in het tekstgebied gevraagd om een ​​categorie te selecteren. Door op een van de knoppen te klikken, wordt het nieuws weergegeven met de beschrijving, inhoud en de link (indien aanwezig) voor die categorie, gescheiden door twee regels.

Handige API's voor uw Python-project

API's zijn superhandig om nieuwe applicaties te integreren met bestaande softwaresystemen. U kunt de OpenWeatherMap API gebruiken om realtime weersinformatie van elk gebied op te halen en de Google Maps API om kaarten in uw websitetoepassing op te nemen. Je kunt GitHub-taken automatiseren via de GitHub API en Zoom API gebruiken voor het integreren van videoconferenties.

Je kunt ook de kracht van ChatGPT gebruiken vanuit je eigen apps met behulp van OpenAI's API en een aantal fascinerende AI-aangedreven applicaties maken.