python 制作磁力搜索工具


Posted in Python onMarch 04, 2021

不知不觉已经到了 大年三十,在此祝大家 牛年大吉,恭喜发财!今天还是要发一篇博客,是关于tkinter的一款磁力搜索GUI工具,可以帮助我们检索网络 资源。

一.准备工作

装库,主要有tkinter os threading win32 pillow

二.预览

预览我们的软件

1.启动

python 制作磁力搜索工具

2.运行

python 制作磁力搜索工具

3.结果

可以选择保存链接到本地,也可以选择复制链接倒剪切板。

3.1保存到本地:

保存格式为txt

python 制作磁力搜索工具

3.2复制链接:

复制以后,如果存在第三方下载工具,就能在工具中打开。

python 制作磁力搜索工具

三.tk源代码

设计流程就不说了,本次设计主要在界面布局上。这里直接上源代码。

#coding:utf-8
from tkinter import ttk
from tkinter import *
from tkinter import messagebox
from tkinter.filedialog import askdirectory
import tkinter.simpledialog
from PIL import Image,ImageTk
import os
import threading
import win32clipboard as w
from Spiders.spider1 import magent_spider1
from Spiders.spider2 import magent_spider2
from Spiders.spider3 import magent_spider3
from Spiders.spider4 import magent_spider4
from QQ_infos import QQ_data

#spider1和spider4比较稳定
imgs=['lsj.png']
class App:

 def __init__(self):
  self.window=Tk()
  self.window.resizable(0,0)
  width=420
  height=400
  screen_width=self.window.winfo_screenwidth()
  screen_height=self.window.winfo_screenheight()
  left=(screen_width-width)/2
  top=(screen_height-height)/2
  self.window.geometry('%dx%d+%d+%d'%(width,height,left,top))
  self.window.title('老司机搜索器-v1.0')
  self.create_widget()
  self.place_sidget()
  self.set_config()
  self.window.mainloop()

 def create_widget(self):
  self.l1=ttk.Label(self.window,text='选择引擎:')
  self.r_chose=StringVar()
  self.filepath=StringVar()
  self.ls_var=StringVar()
  self.l5_var=StringVar()
  self.l_p_var=StringVar()
  self.qq_screenname_var=StringVar()
  self.r1=Radiobutton(self.window,text='引擎一',value='1',variable=self.r_chose)
  self.r2=Radiobutton(self.window,text='引擎二',value='2',variable=self.r_chose)
  self.r3=Radiobutton(self.window,text='引擎三',value='3',variable=self.r_chose)
  self.r4=Radiobutton(self.window,text='引擎四',value='4',variable=self.r_chose)
  self.l2=ttk.Label(self.window,text='关键字:')
  self.e1=ttk.Entry(self.window)
  self.b1=ttk.Button(self.window,text='搜索',)
  self.l3 = ttk.Label(self.window, text='存储路径:')
  self.e2 = ttk.Entry(self.window,textvariable=self.filepath)
  self.b2 = ttk.Button(self.window, text='选择目录')
  self.qq_screenname=ttk.Label(self.window,textvariable=self.qq_screenname_var)
  self.ls=Label(self.window,bg='pink',textvariable=self.ls_var)
  self.listbox=Listbox(self.window,selectmode=SINGLE)
  self.S_coll_vertical = Scrollbar(self.window, orient=VERTICAL)
  self.S_coll_level = Scrollbar(self.window, orient=HORIZONTAL)
  self.b3=ttk.Button(self.window,text='保存')
  self.paned = PanedWindow(self.window)
  self.img=imgs
  img = Image.open(self.img[0])
  photo = img.resize((180, 190))
  self.paned.image = ImageTk.PhotoImage(photo)
  self.l4=Label(self.window,image=self.paned.image,)
  self.b4=ttk.Button(self.window,text='上一页')
  self.l_p=ttk.Label(self.window,textvariable=self.l_p_var,background='orange')
  self.b5=ttk.Button(self.window,text='下一页')
  self.l5=ttk.Label(self.window,text='影片信息:',)
  self.m=Menu(self.window)
  self.s1=Menu(self.m,tearoff=False)
  self.s2=Menu(self.m,tearoff=False)
  self.s3=Menu(self.m,tearoff=False)

 def place_sidget(self):
  self.l1.place(x=20,y=12)
  self.r1.place(x=100,y=10)
  self.r2.place(x=180,y=10)
  self.r3.place(x=260,y=10)
  self.l2.place(x=20,y=45)
  self.e1.place(x=90,y=40,height=30,width=120)
  self.b1.place(x=230,y=40,width=80)
  self.l3.place(x=20,y=85)
  self.e2.place(x=90,y=80,height=30,width=120)
  self.b2.place(x=230,y=80,width=80)
  self.ls.place(x=0,y=114,width=420,height=22)
  self.listbox.place(x=20,y=140,width=190,height=180)
  self.b3.place(x=230,y=140,width=80)
  self.S_coll_vertical.place(x=200, y=140,width=15,height=180)
  self.S_coll_level.place(x=20, y=310,width=190,height=15)
  self.paned.place(x=230,y=170,height=180,width=300)
  self.b4.place(x=15,y=328,width=60)
  self.l_p.place(x=85,y=331,)
  self.b5.place(x=145,y=328,width=60)
  self.l4.place(x=215,y=170,height=200,width=220)
  self.l5.place(x=0,y=365,height=25,width=420)

 def set_config(self):
  self.lock=True
  self.ls_var.set('---还未搜索---')
  self.b1.config(command=self.search_res)
  self.r_chose.set(1)
  self.S_coll_vertical.config(command=self.listbox.yview)
  self.listbox['yscrollcommand'] = self.S_coll_vertical.set
  self.S_coll_level.config(command=self.listbox.xview)
  self.listbox['xscrollcommand'] = self.S_coll_level.set
  self.window['menu']=self.m
  self.s1.add_command(label='选择目录',command=self.open_file_savepath)
  self.s1.add_command(label='打开文件夹',command=self.open_dir)
  self.s1.add_separator()
  self.s1.add_command(label='退出',command=self.quit_window)
  self.m.add_cascade(label='文件',menu=self.s1)
  self.m.add_cascade(label='操作',menu=self.s2)
  self.m.add_cascade(label='关于',menu=self.s3)
  self.s2.add_command(label='搜索',command=lambda :self.thread_it(self.search_res))
  self.s2.add_command(label='复制',command=lambda :self.thread_it(self.copy_magent))
  self.s2.add_command(label='保存',command=lambda :self.thread_it(self.save_magent))
  self.s3.add_command(label='联系作者',command=self.show_QQ)
  self.s3.add_command(label='解锁隐藏引擎',command=self.unlock_engine)
  self.b1.config(command=lambda :self.thread_it(self.search_res))
  self.b3.config(command=lambda :self.thread_it(self.save_magent))
  self.b4.config(command=lambda :self.thread_it(self.page_min))
  self.b5.config(command=lambda :self.thread_it(self.page_add))
  self.l5.config(textvariable=self.l5_var,background='#008080')
  self.b2.config(command=self.open_file_savepath)
  self.l_p_var.set('页码:')
  self.listbox.bind('<<ListboxSelect>>',self.display_infos)
  # 绑定esc键---退出
  self.window.bind('<Escape>', self.escape)
  # 使用return键给输入框Entry绑定enter事件---search搜索
  self.e1.bind('<Return>', self.enter)
  self.window.protocol('WM_DELETE_WINDOW',self.quit_window)

 def enter(self):
  self.search_res()

 def escape(self,event):
  self.quit_window()

 def quit_window(self):
  ask=messagebox.askyesno('退出','真的要退出吗?')
  if ask:
   self.window.destroy()

 def open_file_savepath(self):
  self.file = askdirectory()
  self.filepath.set(self.file)
  abs_path = os.path.abspath(self.filepath.get())
  self.magnetic_dir = abs_path

 def open_dir(self):
  os.startfile(self.magnetic_dir)

 def show_QQ(self):
  messagebox.showinfo('联系作者','作者QQ:xxxxxxxxx')

 def search_res(self):
  key_word=self.e1.get()
  self.ls_var.set('')
  self.page=1
  if key_word:
   # print(self.r_chose.get())
   self.listbox.delete(0,END)
   #使用self.r_chose.get()判断选中了哪个
   if self.r_chose.get()=='1':
    spider1=magent_spider1()
    self.speed,self.flag,self.result_list= spider1.get_data(key_word,1)
    if self.speed is None:
     messagebox.showinfo('提示','此引擎停用!')
     self.r1.config(state='disable')
    self.ls_var.set(self.speed)
    self.l_p_var.set('页码:1')
    for data in self.result_list:
     title = data.split(')-*/(')[0]
     self.listbox.insert(END, title)
   elif self.r_chose.get()=='2':
    spider2=magent_spider2()
    self.speed,self.flag,self.result_list=spider2.get_data(key_word,1)
    if self.speed is None:
     messagebox.showinfo('提示','此引擎停用!')
     self.r2.config(state='disable')
    else:
     self.ls_var.set(self.speed)
     for data in self.result_list:
      title = data.split(')-*/(')[0]
      self.listbox.insert(END, title)
   #爬虫3只返回flag和result_list
   elif self.r_chose.get()=='3':
    spider3=magent_spider3()
    self.flag, self.result_list = spider3.get_data(key_word, 1)
    if self.flag:
     self.ls_var.set(f'搜索到关于{key_word}的资源')
     self.l_p_var.set('页码:1')
     for data in self.result_list:
      title = data.split(')-*/(')[0]
      self.listbox.insert(END, title)
    else:
     messagebox.showinfo('提示','此引擎停用!')
     self.r3.config(state='disable')
   elif self.r_chose.get()=='4':
    spider4=magent_spider4()
    self.speed,self.flag,self.result_list=spider4.get_data(key_word,1)
    if self.speed is None:
     messagebox.showinfo('提示','此引擎停用!')
     self.r4.config(state='disable')
    else:
     self.l_p_var.set('页码:1')
     self.ls_var.set(self.speed)
     for data in self.result_list:
      title = data.split(')-*/(')[0]
      self.listbox.insert(END, title)

   self.listbox.update()
  else:
   messagebox.showwarning('警告','请先输入关键字!')

 def display_infos(self,event):
  try:
   curr_content_index=self.listbox.curselection()[0]
   content=self.result_list[curr_content_index].split(']-*/[')[0]
   pre_con=content.split(')-*/(')[0]
   aft_con = ' 大小:' + content.split(')-*/(')[1]
   if len(pre_con)>45:
    #print(self.listbox[curr_content_index])
    self.l5_var.set(aft_con)
   else:
    self.l5_var.set(pre_con+aft_con)
  except IndexError:
   pass

 def do_turn_page(self,page):
  self.listbox.delete(0, END)
  key_word=self.e1.get()
  if self.r_chose.get()=='1':
   spider1 = magent_spider1()
   self.flag=spider1.get_data(key_word, page)[1]
   if self.flag:
    self.result_list = spider1.get_data(key_word, page)[2]
  elif self.r_chose.get()=='2':
   spider2 = magent_spider2()
   self.flag=spider2.get_data(key_word, page)[1]
   if self.flag:
    self.result_list = spider2.get_data(key_word, page)[2]
  elif self.r_chose.get()=='3':
   spider3 = magent_spider3()
   self.flag,self.result_list=spider3.get_data(key_word, page)
  elif self.r_chose.get()=='4':
   spider4 = magent_spider4()
   self.flag = spider4.get_data(key_word, page)[1]
   if self.flag:
    self.result_list = spider4.get_data(key_word, page)[2]
  if self.flag:
   for data in self.result_list:
    title = data.split(')-*/(')[0]
    self.listbox.insert(END, title)
   self.listbox.update()
  else:
   messagebox.showinfo('提示','已经是最后一页')

 def page_min(self):
  if self.page==1:
   messagebox.showwarning('警告','当前已经是第一页了')
  else:
   self.page-=1
   self.l_p_var.set('页码:'+str(self.page))
   self.do_turn_page(self.page)
   self.listbox.update()

 def page_add(self):
  if self.flag is False :
   messagebox.showwarning('警告','当前已经是最后一页了')
  else:
   self.page += 1
   self.l_p_var.set('页码:'+str(self.page))
   self.do_turn_page(self.page)
   self.listbox.update()

 def get_magnet(self):
  try:
   curr_content_index = self.listbox.curselection()[0]
   hashes = self.result_list[curr_content_index].split(']-*/[')[-1]
   file_name=self.result_list[curr_content_index].split(')-*/(')[0]
   if self.r_chose.get()=='1':
    spider1=magent_spider1()
    magnet=spider1.get_megent(hashes)
    return file_name, magnet
   elif self.r_chose.get() == '2':
    spider2 = magent_spider2()
    magnet = spider2.get_magent(hashes)
    return file_name, magnet
   elif self.r_chose.get() == '3':
    spider3 = magent_spider3()
    magnet = spider3.get_magent(hashes)
    return file_name, magnet
   elif self.r_chose.get() == '4':
    spider4 = magent_spider4()
    magnet = spider4.get_magent(hashes)
    return file_name, magnet
  except IndexError:
   messagebox.showwarning('警告','请先选中要下载的资源!')

 def save_magent(self):
  if os.path.exists(self.filepath.get()):
   try:
    filename, magent_link=self.get_magnet()
    if '.' in filename:
     filename=filename.replace('.','')
    file_path=self.magnetic_dir
    with open(file_path+filename+'.txt','w')as f:
     f.write(magent_link)
    messagebox.showinfo('提示','保存磁力链接成功!')
   except TypeError:
    pass
  else:
   messagebox.showwarning('警告', '您还未选择路径!')

 def copy_magent(self):
  magent_link=self.get_magnet()[1]
  w.OpenClipboard()
  w.EmptyClipboard()
  w.SetClipboardText(magent_link)
  w.CloseClipboard()
  messagebox.showinfo('提示','磁力链接已经复制到了剪切板!')

 def unlock_engine(self):
  if self.lock:
   # 获取字符串(标题,提示,初始值)initialvalue初始值
   qq_number = tkinter.simpledialog.askstring(title='解锁', prompt='请输入QQ号:', )
   # 打印内容
   qq_screenname=QQ_data(qq_number).get_screenname()
   if qq_screenname:
    self.qq_screenname_var.set('欢迎您:\n\n'+qq_screenname)
    self.qq_screenname.config(font=(('Times',12)),foreground='Tomato')
    self.qq_screenname.place(x=320,y=40)
    QQ_data(qq_number).save_heade_img()
    messagebox.showinfo('恭喜','解锁成功!')
    self.img2=os.path.abspath('./')
    self.img2+='/head_img/'+qq_number+'.jpg'
    img = Image.open(self.img2)
    photo = img.resize((190, 170))
    self.paned.image = ImageTk.PhotoImage(photo)
    self.l4 = Label(self.window, image=self.paned.image, )
    self.l4.place(x=215, y=170, height=180, width=210)
    self.r4.config(font=(('Times',12)),foreground='blue')
    self.l4.config(background='red')
    self.r4.place(x=340, y=10)
    self.lock=False
   else:
    messagebox.showerror('错误','解锁失败!')
  else:
   messagebox.showwarning('警告','您已成功解锁!')


 def thread_it(self,func,*args):
  t=threading.Thread(target=func,args=args)
  t.setDaemon(True)
  t.start()


if __name__ == '__main__':
 a=App()

以上就是python 制作磁力搜索工具的详细内容,更多关于python 磁力搜索的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
简单谈谈Python流程控制语句
Dec 04 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
Python网络编程之TCP套接字简单用法示例
Apr 09 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
Python操作Excel插入删除行的方法
Dec 10 Python
python数据化运营的重要意义
Nov 25 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
浅析python中特殊文件和特殊函数
Feb 24 Python
python抢购软件/插件/脚本附完整源码
Mar 04 #Python
Python 求向量的余弦值操作
Mar 04 #Python
django使用多个数据库的方法实例
Mar 04 #Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 #Python
Python 调用C++封装的进一步探索交流
Mar 04 #Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 #Python
Python与C/C++的相互调用案例
Mar 04 #Python
You might like
在PWS上安装PHP4.0正式版
2006/10/09 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
让微信小程序支持ES6中Promise特性的方法详解
2017/06/13 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python生成不重复随机值的方法
2015/05/11 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
毕业生简单求职信
2013/11/19 职场文书
项目考察欢迎辞
2014/01/17 职场文书
放飞理想主题班会
2015/08/14 职场文书