Python tkinter 制作文章搜索软件

简介: 今天,我无聊的时候做了一个搜索文章的软件,有没有更加的方便快捷不知道,好玩就行了。基于Python tkinter 制作文章搜索软件,都是一些基础的应用。🍖 🍗 🥩

功能实现


76.png

导入模块

代码

我们首先做到第一件事是导入模块。

import tkinter as tk
import webbrowser
from tkinter import ttk
import requests

创建窗口

代码

root = tk.Tk()
root.title('CSDN问题搜索')
root.geometry('1000x700+100+100')
root.iconbitmap('search.ico')
root.mainloop()

这段代码创建了一个名为root的Tkinter窗口对象,并设置了窗口的标题和大小。然后,它使用root.iconbitmap()方法将一个名为search.ico的图标图像设置为窗口的图标。


root.geometry()方法用于设置窗口的位置和大小,它接受一个参数,即窗口的位置和大小。在这个例子中,我们将窗口的位置设置为(1000, 700)并将大小设置为(100, 100)


效果


77.png

背景图片

代码

img = tk.PhotoImage(file='benjing.png')
tk.Label(root, image=img).pack()

这行代码创建了一个名为img的PhotoImage对象,并将其设置为根窗口对象root的图像。然后,它使用tk.Label创建一个标签对象,并将图像设置为该标签的图像。最后,它使用pack()方法将标签对象放置在根窗口对象中。


效果


78.png

搜索文本框

代码

search_frame = tk.Frame(root)
search_frame.pack(pady=12)
# 创建一个字符串变量
search_va = tk.StringVar()
tk.Label(search_frame, text='CSDN搜索', font=('黑体', 12)).pack(side=tk.LEFT, padx=6)
tk.Entry(search_frame, relief='flat', width=30, textvariable=search_va).pack(side=tk.LEFT, padx=5, fill='both')
tk.Button(search_frame, text='C一下', font=('黑体', 12), relief='flat', bg='#fe6b00').pack(side=tk.LEFT, padx=5)

这段代码创建了一个名为search_frame的Tkinter窗口对象,并将其放置在根窗口对象root中。然后,它创建了一个StringVar对象search_va,并将其设置为一个字符串变量。接下来,它创建了一个Label对象tk.Label,并将其放置在search_frame中。tk.Label对象具有一个文本属性和一个字体属性,这里使用了一个黑体字体和12号字号。tk.Entry对象具有一个文本属性和一个宽度属性,这里使用了一个30像素的宽度和一个StringVar对象search_va。最后,它创建了一个Button对象tk.Button,并将其放置在search_frame中。tk.Button对象具有一个文本属性、一个字体属性和一个背景属性,这里使用了一个黑体字体、12号字号和一个背景颜色为#fe6b00。


效果


79.png


内容显示界面

代码

tree_view = ttk.Treeview(root,show="headings", columns=('num', 'title', 'author', 'date', 'link'))
tree_view.column("num", width=10, anchor='center')
tree_view.column('title', width=200, anchor='w')
tree_view.column('author', width=10, anchor='center')
tree_view.column('date', width=10, anchor='center')
tree_view.column('link', width=150, anchor='center')
tree_view.heading('num', text='序号')
tree_view.heading('title', text='标题')
tree_view.heading('author', text='作者')
tree_view.heading('date', text='发布时间')
tree_view.heading('link', text='链接')
tree_view.pack(fill=tk.BOTH, expand=False, pady=10)

这段代码创建了一个名为tree_view的Tkinter Treeview对象,并将根节点设置为root。show参数设置为"headings",表示显示节点的标题。columns参数设置为一个包含节点标题、作者、发布时间和链接的列表。tree_view.column()方法用于设置每个列的宽度和锚点。tree_view.column()方法接受一个参数,即要设置宽度和锚点的列的名称。tree_view.heading()方法用于设置每个列的标题。tree_view.pack()方法用于设置节点的位置和大小,并将节点放置在根窗口对象中。tree_view.fill参数设置为"both",表示填充整个窗口,expand参数设置为True,表示展开节点,pady参数设置为10,表示节点之间的间距。


效果


80.png

搜索内容效果代码

到了这里,我们这个框架就写好了,那么,我们如何获取搜索功能呢。、

def search(word):
    search_list = []
    num = 1
    for page in range(1, 3):
        url = 'https://so.csdn.net/api/v3/search'
        data = {
            'q': word,
            'p': page,
        }
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
        }
        response = requests.get(url=url, params=data, headers=headers)
        for index in response.json()['result_vos']:
            title = index["title"].replace('<em>', '').replace('</em>', '')
            author = index["nickname"].replace('<em>', '').replace('</em>', '')
            dit = {
                'num': num,
                'title': title,
                'author': author,
                'date': index['create_time_str'],
                'link': index['url'],
            }
            num += 1
            search_list.append(dit)
    return search_list

这段代码定义了一个名为search的函数,该函数接受一个字符串参数word,并返回一个字符串列表,其中包含符合给定字符串的所有文档的标题、作者和发布时间。


该函数首先创建一个空字符串列表search_list,然后使用一个循环来搜索所有可能的页面。在每个页面上,它使用requests库发送一个HTTP GET请求,并将搜索参数作为请求的一部分传递。然后,它将响应的JSON数据解析为一个字典,其中包含每个文档的标题、作者和发布时间。然后,它将每个字典添加到search_list中,并将搜索列表的长度增加1。


最后,该函数返回search_list,该列表包含符合给定字符串的所有文档的标题、作者和发布时间。


效果

比如讲,搜索博主“爱吃饼干的小白鼠”,我们看看网站反馈的数据是不是和我们一样的。


81.png

展示内容效果代码

接下来,我们就要把上面的内容展示到界面里面。

def show(search_list):
    # 往树状图中插入数据
    for index, li in enumerate(search_list):
        tree_view.insert('', index + 1,values=(li['num'], li['title'], li['author'], li['date'], li['link']))

这段代码定义了一个名为show的函数,该函数接受一个字符串列表参数search_list,该列表包含每个文档的标题、作者和发布时间,用于插入树状图中。


该函数首先使用一个循环来遍历search_list,并使用tree_view.insert()方法将每个文档插入到树状图中。tree_view.insert()方法接受一个参数,即要插入的节点的索引和值列表。values参数用于指定节点的值列表。


点击搜索功能代码

上面我们讲述了搜索功能代码,以及展示代码。接下来,我们就要实现这样的功能——我们在文本框输入“爱吃饼干的小白鼠”,然后,我们点击C一下,就会在界面显示内容。

PS—如果大家感兴趣,可以实现一个回车的功能

def click():
    key_word = search_va.get()
    if key_word:
        search_list = search(word=key_word)
        show(search_list)

这段代码定义了一个名为click的函数,该函数用于查找键盘上输入的字符串。如果找到了相应的字符串,则调用search()函数查找包含该字符串的文档并显示它们。get()方法用于从缓冲区中获取字符串。if key_word语句检查输入字符串是否包含在search_va中,如果是,则将search_list更新为包含相关文档的字符串列表。然后调用show()函数将其显示在树状图中。


效果




82.png

访问博客网页

我们接下来,就实现点击某一行就会访问该文章。

def tree_view_click():
    for item in tree_view.selection():
        item_text = tree_view.item(item, "values")
        webbrowser.open(item_text[-1])

这段代码定义了一个名为tree_view_click的函数,该函数用于在树状图中选择节点并打开相应的网页。它使用tree_view.selection()方法获取选中的节点,并使用tree_view.item()方法获取节点的文本值。然后,它使用webbrowser.open()方法打开相应的网页。

tree_view.bind("<Button-1>",tree_view_click)

在 Python 中,可以使用 tkinter 模块中的 ttk 子模块来创建树形视图控件。要为树形视图添加点击函数,可以使用 ttk.Treeview__init__ 方法来设置点击事件处理函数。


总结

到了这里,我们这个功能就实现了,是不是很神奇。搜索文章的软件就实现了,有的人说了,何必这么麻烦,直接去官网搜索就好了啊。确实,可是通过这个练习,我们可以学到很多东西。


相关文章
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
7天前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
28 10
|
11天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
25天前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
50 17
|
2月前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
74 0
|
2月前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
70 20
|
3月前
|
测试技术 开发者 Python
对于Python中的异常要如何处理,raise关键字你真的了解吗?一篇文章带你从头了解
`raise`关键字在Python中用于显式引发异常,允许开发者在检测到错误条件时中断程序流程,并通过异常处理机制(如try-except块)接管控制。`raise`后可跟异常类型、异常对象及错误信息,适用于验证输入、处理错误、自定义异常、重新引发异常及测试等场景。例如,`raise ValueError(&quot;Invalid input&quot;)`用于验证输入数据,若不符合预期则引发异常,确保数据准确并提供清晰错误信息。此外,通过自定义异常类,可以针对特定错误情况提供更具体的信息,增强代码的健壮性和可维护性。
|
3月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
3月前
|
Python
二分查找变种大赏!Python 中那些让你效率翻倍的搜索绝技!
二分查找是一种高效的搜索算法,适用于有序数组。其基本原理是通过不断比较中间元素来缩小搜索范围,从而快速找到目标值。常见的变种包括查找第一个等于目标值的元素、最后一个等于目标值的元素、第一个大于等于目标值的元素等。这些变种在实际应用中能够显著提高搜索效率,适用于各种复杂场景。
52 9
|
3月前
|
算法 数据处理 开发者
超越传统:Python二分查找的变种策略,让搜索效率再上新台阶!
本文介绍了二分查找及其几种Python实现的变种策略,包括经典二分查找、查找第一个等于给定值的元素、查找最后一个等于给定值的元素以及旋转有序数组的搜索。通过调整搜索条件和边界处理,这些变种策略能够适应更复杂的搜索场景,提升搜索效率和应用灵活性。
51 5

热门文章

最新文章

推荐镜像

更多