前言
今天,我無聊的時(shí)候做了一個(gè)搜索文章的軟件,有沒有更加的方便快捷不知道,好玩就行了。基于Python tkinter 制作文章搜索軟件,都是一些基礎(chǔ)的應(yīng)用。?? ?? ??
功能實(shí)現(xiàn)
導(dǎo)入模塊
代碼
我們首先做到第一件事是導(dǎo)入模塊。
import tkinter as tk
import webbrowser
from tkinter import ttk
import requests
創(chuàng)建窗口
代碼
root = tk.Tk()
root.title('CSDN問題搜索')
root.geometry('1000x700+100+100')
root.iconbitmap('search.ico')
root.mainloop()
這段代碼創(chuàng)建了一個(gè)名為root
的Tkinter窗口對(duì)象,并設(shè)置了窗口的標(biāo)題和大小。然后,它使用root.iconbitmap()
方法將一個(gè)名為search.ico
的圖標(biāo)圖像設(shè)置為窗口的圖標(biāo)。
root.geometry()
方法用于設(shè)置窗口的位置和大小,它接受一個(gè)參數(shù),即窗口的位置和大小。在這個(gè)例子中,我們將窗口的位置設(shè)置為(1000, 700)并將大小設(shè)置為(100, 100)
效果
背景圖片
代碼
img = tk.PhotoImage(file='benjing.png')
tk.Label(root, image=img).pack()
這行代碼創(chuàng)建了一個(gè)名為img
的PhotoImage對(duì)象,并將其設(shè)置為根窗口對(duì)象root
的圖像。然后,它使用tk.Label
創(chuàng)建一個(gè)標(biāo)簽對(duì)象,并將圖像設(shè)置為該標(biāo)簽的圖像。最后,它使用pack()
方法將標(biāo)簽對(duì)象放置在根窗口對(duì)象中。
效果
搜索文本框?
代碼
search_frame = tk.Frame(root)
search_frame.pack(pady=12)
# 創(chuàng)建一個(gè)字符串變量
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)
這段代碼創(chuàng)建了一個(gè)名為search_frame
的Tkinter窗口對(duì)象,并將其放置在根窗口對(duì)象root
中。然后,它創(chuàng)建了一個(gè)StringVar
對(duì)象search_va
,并將其設(shè)置為一個(gè)字符串變量。接下來,它創(chuàng)建了一個(gè)Label
對(duì)象tk.Label
,并將其放置在search_frame
中。tk.Label
對(duì)象具有一個(gè)文本屬性和一個(gè)字體屬性,這里使用了一個(gè)黑體字體和12號(hào)字號(hào)。tk.Entry
對(duì)象具有一個(gè)文本屬性和一個(gè)寬度屬性,這里使用了一個(gè)30像素的寬度和一個(gè)StringVar
對(duì)象search_va
。最后,它創(chuàng)建了一個(gè)Button
對(duì)象tk.Button
,并將其放置在search_frame
中。tk.Button
對(duì)象具有一個(gè)文本屬性、一個(gè)字體屬性和一個(gè)背景屬性,這里使用了一個(gè)黑體字體、12號(hào)字號(hào)和一個(gè)背景顏色為#fe6b00
。
效果
內(nèi)容顯示界面
代碼
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='序號(hào)')
tree_view.heading('title', text='標(biāo)題')
tree_view.heading('author', text='作者')
tree_view.heading('date', text='發(fā)布時(shí)間')
tree_view.heading('link', text='鏈接')
tree_view.pack(fill=tk.BOTH, expand=False, pady=10)
這段代碼創(chuàng)建了一個(gè)名為tree_view
的Tkinter Treeview對(duì)象,并將根節(jié)點(diǎn)設(shè)置為root
。show
參數(shù)設(shè)置為"headings"
,表示顯示節(jié)點(diǎn)的標(biāo)題。columns
參數(shù)設(shè)置為一個(gè)包含節(jié)點(diǎn)標(biāo)題、作者、發(fā)布時(shí)間和鏈接的列表。tree_view.column()
方法用于設(shè)置每個(gè)列的寬度和錨點(diǎn)。tree_view.column()
方法接受一個(gè)參數(shù),即要設(shè)置寬度和錨點(diǎn)的列的名稱。tree_view.heading()
方法用于設(shè)置每個(gè)列的標(biāo)題。tree_view.pack()
方法用于設(shè)置節(jié)點(diǎn)的位置和大小,并將節(jié)點(diǎn)放置在根窗口對(duì)象中。tree_view.fill
參數(shù)設(shè)置為"both"
,表示填充整個(gè)窗口,expand
參數(shù)設(shè)置為True
,表示展開節(jié)點(diǎn),pady
參數(shù)設(shè)置為10,表示節(jié)點(diǎn)之間的間距。
效果
搜索內(nèi)容效果代碼
到了這里,我們這個(gè)框架就寫好了,那么,我們?nèi)绾潍@取搜索功能呢。、
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
這段代碼定義了一個(gè)名為search
的函數(shù),該函數(shù)接受一個(gè)字符串參數(shù)word
,并返回一個(gè)字符串列表,其中包含符合給定字符串的所有文檔的標(biāo)題、作者和發(fā)布時(shí)間。
該函數(shù)首先創(chuàng)建一個(gè)空字符串列表search_list
,然后使用一個(gè)循環(huán)來搜索所有可能的頁面。在每個(gè)頁面上,它使用requests
庫發(fā)送一個(gè)HTTP GET請(qǐng)求,并將搜索參數(shù)作為請(qǐng)求的一部分傳遞。然后,它將響應(yīng)的JSON數(shù)據(jù)解析為一個(gè)字典,其中包含每個(gè)文檔的標(biāo)題、作者和發(fā)布時(shí)間。然后,它將每個(gè)字典添加到search_list
中,并將搜索列表的長(zhǎng)度增加1。
最后,該函數(shù)返回search_list
,該列表包含符合給定字符串的所有文檔的標(biāo)題、作者和發(fā)布時(shí)間。
效果
比如講,搜索博主“愛吃餅干的小白鼠”,我們看看網(wǎng)站反饋的數(shù)據(jù)是不是和我們一樣的。
展示內(nèi)容效果代碼
接下來,我們就要把上面的內(nèi)容展示到界面里面。
def show(search_list):
# 往樹狀圖中插入數(shù)據(jù)
for index, li in enumerate(search_list):
tree_view.insert('', index + 1,values=(li['num'], li['title'], li['author'], li['date'], li['link']))
這段代碼定義了一個(gè)名為show
的函數(shù),該函數(shù)接受一個(gè)字符串列表參數(shù)search_list
,該列表包含每個(gè)文檔的標(biāo)題、作者和發(fā)布時(shí)間,用于插入樹狀圖中。
該函數(shù)首先使用一個(gè)循環(huán)來遍歷search_list
,并使用tree_view.insert()
方法將每個(gè)文檔插入到樹狀圖中。tree_view.insert()
方法接受一個(gè)參數(shù),即要插入的節(jié)點(diǎn)的索引和值列表。values
參數(shù)用于指定節(jié)點(diǎn)的值列表。
點(diǎn)擊搜索功能代碼
上面我們講述了搜索功能代碼,以及展示代碼。接下來,我們就要實(shí)現(xiàn)這樣的功能——我們?cè)谖谋究蜉斎搿皭鄢燥灨傻男“资蟆?,然后,我們點(diǎn)擊C一下,就會(huì)在界面顯示內(nèi)容。
(PS—如果大家感興趣,可以實(shí)現(xiàn)一個(gè)回車的功能)
def click():
key_word = search_va.get()
if key_word:
search_list = search(word=key_word)
show(search_list)
這段代碼定義了一個(gè)名為click
的函數(shù),該函數(shù)用于查找鍵盤上輸入的字符串。如果找到了相應(yīng)的字符串,則調(diào)用search()
函數(shù)查找包含該字符串的文檔并顯示它們。get()
方法用于從緩沖區(qū)中獲取字符串。if key_word
語句檢查輸入字符串是否包含在search_va
中,如果是,則將search_list
更新為包含相關(guān)文檔的字符串列表。然后調(diào)用show()
函數(shù)將其顯示在樹狀圖中。
效果
?訪問博客網(wǎng)頁
我們接下來,就實(shí)現(xiàn)點(diǎn)擊某一行就會(huì)訪問該文章。
def tree_view_click():
for item in tree_view.selection():
item_text = tree_view.item(item, "values")
webbrowser.open(item_text[-1])
這段代碼定義了一個(gè)名為tree_view_click
的函數(shù),該函數(shù)用于在樹狀圖中選擇節(jié)點(diǎn)并打開相應(yīng)的網(wǎng)頁。它使用tree_view.selection()
方法獲取選中的節(jié)點(diǎn),并使用tree_view.item()
方法獲取節(jié)點(diǎn)的文本值。然后,它使用webbrowser.open()
方法打開相應(yīng)的網(wǎng)頁。
tree_view.bind("<Button-1>",tree_view_click)
在 Python 中,可以使用?tkinter
?模塊中的?ttk
?子模塊來創(chuàng)建樹形視圖控件。要為樹形視圖添加點(diǎn)擊函數(shù),可以使用?ttk.Treeview
?的?__init__
?方法來設(shè)置點(diǎn)擊事件處理函數(shù)。
總結(jié)
到了這里,我們這個(gè)功能就實(shí)現(xiàn)了,是不是很神奇。搜索文章的軟件就實(shí)現(xiàn)了,有的人說了,何必這么麻煩,直接去官網(wǎng)搜索就好了啊。確實(shí),可是通過這個(gè)練習(xí),我們可以學(xué)到很多東西。文章來源:http://www.zghlxwxcb.cn/news/detail-401942.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-401942.html
到了這里,關(guān)于Python tkinter 制作文章搜索軟件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!