📅  最后修改于: 2023-12-03 15:21:26.121000             🧑  作者: Mango
这是一个使用 Tkinter 和 Newsapi 构建的简单的新闻应用程序。它可以通过 Newsapi API 获取最新的国内、国际、科技和体育新闻,并将它们展示在用户界面上。
import tkinter as tk
import webbrowser
from newsapi import NewsApiClient
# 初始化 Newsapi 客户端
newsapi = NewsApiClient(api_key='your_api_key')
# 创建主窗口
root = tk.Tk()
root.title('简单新闻应用程序')
# 新闻显示区域
news_frame = tk.Frame(root, padx=10, pady=10)
news_frame.pack()
# 新闻选项卡
options_frame = tk.Frame(root)
options_frame.pack()
# 新闻选项
option_dict = {'国内': 'cn', '国际': 'en', '科技': 'technology', '体育': 'sports'}
# 创建新闻选项卡按钮
option_buttons = []
for option in option_dict:
button = tk.Button(options_frame, text=option, width=10, pady=5)
button.pack(side=tk.LEFT, padx=5)
option_buttons.append(button)
# 获取新闻的功能函数
def get_news(category):
news = newsapi.get_top_headlines(category=category)
return news['articles']
# 显示新闻在用户界面上
def show_news(news_list):
for widget in news_frame.winfo_children():
widget.destroy()
for news in news_list:
link = news['url']
title = news['title']
author = news['source']['name']
title_label = tk.Label(news_frame, text=title, foreground='blue')
title_label.pack(anchor='w')
title_label.bind('<Button-1>', lambda e, l=link: webbrowser.open(l))
author_label = tk.Label(news_frame, text=author)
author_label.pack(anchor='w')
# 显示默认新闻
news_list = get_news('en')
show_news(news_list)
# 绑定新闻选项卡按钮的事件处理程序
def option_button_clicked(index):
category = list(option_dict.values())[index]
news_list = get_news(category)
show_news(news_list)
for i, button in enumerate(option_buttons):
button.configure(command=lambda index=i: option_button_clicked(index))
# 主事件循环
root.mainloop()
tkinter
和 webbrowser
模块。后者用于打开新闻文章的链接。newsapi
模块,它是我们用来与 Newsapi API 交互的主要工具。NewsApiClient
类创建了一个实例,它需要我们向其提供我们的 Newsapi API 密钥。option_dict
字典将选项的文本(国内、国际、科技和体育)映射到它们在 Newsapi API 中使用的类别。option_buttons
列表,其中包含了我们的选项。我们遍历了 option_dict
,对于每个选项,创建了一个 Button
对象,并将其添加到选项区域中。我们还将每个按钮添加到 option_buttons
列表中,以便稍后使用。get_news
函数,该函数使用 Newsapi API 获取特定类别的前几条头条新闻。我们通过 Newsapi API 客户端调用 get_top_headlines
方法来实现这一点,并向其传递了我们的选项类别作为参数。该函数返回所有新闻的列表。show_news
函数将新闻列表显示在新闻显示区域中。我们首先使用 winfo_children
方法来删除所有现有的新闻选项。然后,我们迭代我们的新闻列表,并为每个新闻创建了一个标签。我们将新闻标题设置为 Label
对象的文本,并为其设置前景颜色为蓝色(以示可点击)。我们还将副标题设置为新闻源的名称,并将其放置在标题标签下方。option_button_clicked
函数,该函数是被我们选项卡按钮单击触发的事件处理程序。该函数使用每个按钮的索引与 option_dict
中的键进行映射,以确定选择的选项卡类别。然后,它获取该类别的新闻,并将其传递给 show_news
函数来显示新闻。option_button_clicked
函数,并调用了 Tkinter 的 mainloop
方法来等待用户事件。这个简单的新闻应用程序向我们展示了如何使用 Tkinter 和 Newsapi 创建一个交互性良好的 GUI,以及如何使用 API 来获取和显示实时新闻。我们的应用程序向用户提供了几种不同的新闻选项,以及查看每个选项的最新新闻的方便方法。