python之tk学习,闲鱼搜索-小记
(如想转载,请联系博主或贴上本博地址)
编程,逻辑,总是让人如痴如醉。
下面进入正题。
火热的天气配上火热的python,python的入门友好性让门外汉们都看到了希望。当然自己写的程序如果没有GUI,很难让别人很好的使用,在这个基础上,学习了python的入门GUI——tk。
学习总是要学以致用,现在电脑上搜索闲鱼比较困难,就诞生这个闲鱼搜索工具,下面直接贴上代码。仅供记录学习tk之用,勿用做商业用途。(另:感谢提供界面设计思路的百度搜到的案例作者。找不到作者是谁了。)
下面贴上效果图:

有几点需要注意的地方:
①主要函数—search搜索功能
name3 = urllib.parse.quote(name,encoding='gbk')
将name搜索关键字url编码,避免搜索的关键字有转义字符。
def search(*args):
try:
name=str(feet.get())
vv=str(v.get())
if vv=='1':
name3 = urllib.parse.quote(name,encoding='gbk')
name3=name3.replace("%2B","%20")
addstime='https://s.2.taobao.com/list?st_edtime=1&q='+name3+'&ist=1'
adds=str(addstime)
webbrowser.open(adds)
#feet.set("")
feet_entry.focus()
return content()
elif vv=='2':
name3 = urllib.parse.quote(name,encoding='gbk')
name3=name3.replace("%2B","%20")
addsprice='https://s.2.taobao.com/list?st_price=0&q='+name3+'&ist=1'
adds=str(addsprice)
webbrowser.open(adds)
#feet.set("")
feet_entry.focus()
return content()
elif vv=='3':
name=name.replace("+","%20")
adds='https://s.2.taobao.com/list?q=' + name + '&search_type=item&_input_charset=utf8'
adds=str(adds)
webbrowser.open(adds)
feet_entry.focus()
return content()
else:
name=name.replace("+","%20")
adds='https://s.2.taobao.com/list?q=' + name + '&search_type=item&_input_charset=utf8'
adds=str(adds)
webbrowser.open(adds)
feet_entry.focus()
return content()
except ValueError:
pass
②content函数功能
将scrolledtext下拉文本框作为历史记录功能并按照最新更改从上而下排序,并带有双击记录,上屏至搜索框。
def content():
#修改scr编辑状态,为可编辑
scr.config(state=NORMAL)
value = str(feet.get())
#替换多个关键字情况下可能存在的回车
value=value.replace("'\n'","")
ttk.Label(mainframe, text='').grid(column=1, row=2,sticky='W')
#以空字符替换历史文本,暂时没好办法
ttk.Label(mainframe, text=value+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" ").grid(column=1, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%1+'页').grid(column=2, row=2,sticky='W')
#获取当前历史记录全部内容
oldvalue=scr.get(0.0,tk.END)
#删除当前历史记录
delvalue=scr.delete(0.0,tk.END)
#插入新记录和回车和原有记录
scr.insert(tk.INSERT,value +'\n'+oldvalue)
#改scrolledtext编辑状态为不可编辑
scr.config(state=DISABLED)
global page
page=int(1)
feet_entry.focus()
③mousejian函数
def mousejian(*args):
scr.config(state=NORMAL)
#获取鼠标指针所在行号列号
rowcol=scr.index('insert')
#获取当前光标所在行号列号
rowcolv=str(rowcol)
rowcolv=float(rowcol)
vcopy=scr.get(rowcolv,rowcolv+1)
scr.config(state=DISABLED)
#删除头尾多余的换行符
vcopy=vcopy.strip()
feet.set(vcopy)
下面贴上完整代码。
import webbrowser
import re
import urllib
from urllib import parse
from tkinter import *
from tkinter import ttk
import tkinter as tk
from tkinter import scrolledtext
from tkinter import Menu
import tkinter.messagebox
import tkinter as tk
from tkinter import StringVar, IntVar
from tkinter import Tk, Checkbutton, Label def get_screen_size(window):
return window.winfo_screenwidth(),window.winfo_screenheight() def get_window_size(window):
return window.winfo_reqwidth(),window.winfo_reqheight() def center_window(root, width, height):
screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight()
size = '%dx%d+%d+%d' % (width, height, (screenwidth - width)/2, (screenheight - height)/2)
#print(size)
root.geometry(size) def search(*args):
try:
name=str(feet.get())
vv=str(v.get())
if vv=='1':
name3 = urllib.parse.quote(name,encoding='gbk')
name3=name3.replace("%2B","%20")
addstime='https://s.2.taobao.com/list?st_edtime=1&q='+name3+'&ist=1'
adds=str(addstime)
webbrowser.open(adds)
#feet.set("")
feet_entry.focus()
return content()
elif vv=='2':
name3 = urllib.parse.quote(name,encoding='gbk')
name3=name3.replace("%2B","%20")
addsprice='https://s.2.taobao.com/list?st_price=0&q='+name3+'&ist=1'
adds=str(addsprice)
webbrowser.open(adds)
#feet.set("")
feet_entry.focus()
return content()
elif vv=='3':
name=name.replace("+","%20")
adds='https://s.2.taobao.com/list?q=' + name + '&search_type=item&_input_charset=utf8'
adds=str(adds)
webbrowser.open(adds)
feet_entry.focus()
return content()
else:
name=name.replace("+","%20")
adds='https://s.2.taobao.com/list?q=' + name + '&search_type=item&_input_charset=utf8'
adds=str(adds)
webbrowser.open(adds)
feet_entry.focus()
return content()
except ValueError:
pass def clear(*args):
try:
feet.set("")
scr.config(state=NORMAL)
scr.delete(0.0,tk.END)
scr.config(state=DISABLED)
feet_entry.focus()
except ValueError:
pass def callback(event):
return search() def content():
scr.config(state=NORMAL)
value = str(feet.get())
value=value.replace("'\n'","")
ttk.Label(mainframe, text='').grid(column=1, row=2,sticky='W')
ttk.Label(mainframe, text=value+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" ").grid(column=1, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%1+'页').grid(column=2, row=2,sticky='W')
oldvalue=scr.get(0.0,tk.END)
delvalue=scr.delete(0.0,tk.END)
scr.insert(tk.INSERT,value +'\n'+oldvalue)
scr.config(state=DISABLED)
global page
page=int(1)
feet_entry.focus() page=int(1)
def nextpage():
global page
page=page+1
vv=str(v.get())
if vv=='1':
if page==1:
page=int(2)
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_edtime=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open(href,new=0,autoraise=False)
else:
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_edtime=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open(href,new=0,autoraise=False)
elif vv=='2':
if page==1:
page=int(2)
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_price=0&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open(href,new=0,autoraise=False)
else:
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_price=0&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open(href,new=0,autoraise=False)
elif vv=='3':
if page==1:
page=int(2)
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_trust=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open(href,new=0,autoraise=False)
else:
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_trust=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open(href,new=0,autoraise=False)
else:
if page==1:
page=int(2)
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_trust=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open(href,new=0,autoraise=False)
else:
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_trust=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open(href,new=0,autoraise=False) def prepage():
global page
page=page-1
vv=str(v.get())
if vv=='1':
if page<1:
tk.messagebox.showinfo(title='到首页了',message='已经是第一页了!')
else:
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_edtime=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open_new(href)
elif vv=='2':
if page<1:
tk.messagebox.showinfo(title='到首页了',message='已经是第一页了!')
else:
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_price=0&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open_new(href)
elif vv=='3':
if page<1:
tk.messagebox.showinfo(title='到首页了',message='已经是第一页了!')
else:
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_trust=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open_new(href)
else:
if page<1:
tk.messagebox.showinfo(title='到首页了',message='已经是第一页了!')
else:
qname=str(feet.get())
qname = urllib.parse.quote(qname,encoding='gbk')
qname=qname.replace("%2B","%20")
ttk.Label(mainframe, text='').grid(column=2, row=2,sticky='W')
ttk.Label(mainframe, text='当前在第%d'%page+'页').grid(column=2, row=2,sticky='W')
href='https://s.2.taobao.com/list?st_trust=1&page=%d'%(page) + '&q=' + qname + '&ist=1'
href=str(href)
webbrowser.open_new(href) def modified(self, event):
self.txt.see(END) def mousejian(*args):
scr.config(state=NORMAL)
#获取鼠标指针所在行号列号
rowcol=scr.index('insert')
#获取当前光标所在行号列号
rowcolv=str(rowcol)
rowcolv=float(rowcol)
vcopy=scr.get(rowcolv,rowcolv+1)
scr.config(state=DISABLED)
vcopy=vcopy.strip()
feet.set(vcopy) root = Tk()
root.title("剁手搜索")
root.resizable(0,0)
center_window(root, 320, 350)
root.maxsize(int(get_screen_size(root)[0]), int(get_screen_size(root)[1]))
root.minsize(320, 350)
root.bind("<Key-Return>", callback)
root.bind("<Double-Button-1>",mousejian) mainframe = ttk.Frame(root, padding="0 0 0 0",height=40,width=320)
mainframe.grid(column=0, row=0, padx=0, pady=0,sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1) feet = StringVar()
ttk.Label(mainframe, text="请输入内容:").grid(column=0, row=0,sticky='W')
feet_entry = ttk.Entry(mainframe, width=18, textvariable=feet)#feet)
feet_entry.grid(column=1, row=0, sticky=(W, E))
#获取当前正在搜索内容
valueD=str(feet.get())
valueD = urllib.parse.quote(valueD,encoding='gbk')
valueD=valueD.replace("%2B","%20")
but1=ttk.Button(mainframe, text="剁手搜索", width=10,command=search).grid(column=2, row=0,sticky='W')
#createToolTip(but1,'回车快速搜索')
ttk.Button(mainframe, text="清空记录", width=10,command=clear).grid(column=2, row=1,sticky='W')
#selects = [('最新发布',1),('价格升序',2)]
v = IntVar() #tkinter专用整型变量
v.set(3) #设置v的值为1,值多少无所谓了,我的理解是第一组写1,第二组写2,一次递增
ttk.Radiobutton(mainframe,text="最新发布",width=7,variable = v,value = 1).grid(column=0, row=1,sticky='W') #,command=RadioCall ,command=RadioCall
ttk.Radiobutton(mainframe,text="价格升序",width=7,variable = v,value = 2).grid(column=1, row=1,sticky='W')
ttk.Radiobutton(mainframe,text="默认",width=4,variable = v,value = 3).grid(column=1, row=1,sticky='E')
ttk.Label(mainframe, text="当前正搜索:").grid(column=0, row=2,sticky='W')
ttk.Button(mainframe, text="下一页", width=8,command=nextpage).grid(column=0, row=3,sticky='W')
ttk.Button(mainframe, text="上一页", width=8,command=prepage).grid(column=1, row=3,sticky='W')
#历史记录
scrolW = 30; scrolH = 16
scr = scrolledtext.ScrolledText(width=scrolW, height=scrolH, wrap=tk.WORD) #monty,
scr.grid(column=0, row=4, sticky='WE', columnspan=3)
scr.config(state=DISABLED)
for child in mainframe.winfo_children(): child.grid_configure(padx=3, pady=3)
feet_entry.focus()
root.mainloop()
python之tk学习,闲鱼搜索-小记的更多相关文章
- Python 分析后告诉你闲鱼上哪些商品抢手?
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...
- 闲鱼上哪些商品抢手?Python 分析后告诉你
1目 标 场 景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的 睡后收入. 闲鱼上大量的商品,很难精准判断哪些受欢迎,哪些好卖:一个个录入数据去做数据分析,浪费时间的同 ...
- PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- PyQt(Python+Qt)学习随笔:QTableWidget的findItems和selectedItems搜索项和访问选中项方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.搜索项 在表格部件中,可以根据文本以及匹配模式来搜索满足条件的项,调用语法: list[QTab ...
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中使用findItems搜索项
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTreeWidget类实例的树型部件中,可以根据文本.搜索列以及匹配模式来搜索满足条件的项,调用 ...
- 自己动手制作的淘宝闲鱼APP宝贝数据采集工具软件
之前做过淘宝PC端宝贝和店铺数据的采集,后来需要做APP端的数据采集,因为没有学过Android,以前也都是做PC端的软件,有没有其他方法呢? 突然想到了用手机模拟器,可以在电脑端控制运行手机APP端 ...
- GIAC2019 演讲精选 | 面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
一直以来, 如何从‘视觉稿’精确的还原出 对应的UI侧代码 一直是端侧开发同学工作里消耗比较大的部分,一方面这部分的工作 比较确定缺少技术深度,另一方面视觉设计师也需要投入大量的走查时间,有大量无谓的 ...
- 消息点击率翻倍的背后——闲鱼无侵入可扩展IFTTT系统
一.面临问题 在闲鱼生态里,用户之间会有很多种关系.其中大部分关系是由买家触发,联系到卖家,比如买家通过搜索.收藏.聊天等动作与卖家产生联系:另外一部分是平台与用户之间的关系.对这些关系分析之后我们发 ...
- Facebook F8|闲鱼高级技术专家参会分享
笔者代表闲鱼参加了Facebook在4月30日举行的为期二天的F8大会,地点加州.将会议概括和一些收获分享给大家.对国内开发者而言,Facebook的产品设计.社区.VR/AR等有一些借鉴意义:对海外 ...
- 零基础Python应该怎样学习呢?(附视频教程)
Python应该怎样学习呢? 阶段一:适合自己的学习方式 对于零基础的初学者来说,最迷茫的是不知道怎样开始学习?那这里小编建议可以采用视频+书籍的方式进行学习.看视频学习可以让你迅速掌握编程的基础语法 ...
随机推荐
- mybatis核心配置文件—mappers标签设置映射文件
<!-- 加载映射文件 --> <mappers> <!--<mapper resource="mappers/UserMapper.xml"& ...
- docker 安装后报错处理
问题场景: Docker服务安装之后启动报错 日志如下: time="2022-03-20T21:51:16.116163560+08:00" level=info msg=&qu ...
- vue引入swiper的报错以及swiper在vue中的交互事件处理
安装遇到找不到 css的问题,百度查了一些帖子也不行,可能是swiper 升级6.0后的一些变化导致 安装成功的帖子:转载于:https://www.jianshu.com/p/0150d2ee109 ...
- code的用法
今天写程序的时候用了const,想到之前遇到的code的用法,那是第一次遇到code的那样的用法,查了一下,解释如下: 在单片机使用C语言进行编程的时候,经常使用到code.code是keil C51 ...
- Mac Google浏览器 Chrome
Mac Google浏览器 Chrome https://590m.com/f/28636472-500465601-d4c369 (访问密码:7410)
- TypeScript Array(数组)
TypeScript Array(数组) 数组对象是使用单独的变量名来存储一系列的值. 数组非常常用. 假如你有一组数据(例如:网站名字),存在单独变量如下所示: var site1="Go ...
- golang实现请求cloudflare修改域名A记录解析
现在有些DNS解析要收费,国内的几个厂商需要实名制.下面给出golang请求cloudflare修改域名A记录解析的代码. 准备工作: 在域名购买服务商处,将dns解析服务器改为cloudflare的 ...
- 记事本默认编码改为UTF-8
前端时间发现用记事本直接创建的记录目标信息的TXT文本再用sublime打开变成了乱码,才发现编码有问题,记事本直接创建的文本编码竟然是ANSI编码. 于是动手将记事本默认编码改为UTF-8. 记事本 ...
- bzoj 4407
莫比乌斯反演 还是推式子: 设$f(n)=n^{k}$ 那就是上一道题了 推的过程如下: $\sum_{i=1}^{a}\sum_{j=1}^{b}f(gcd(i,j))$ $\sum_{i=1}^{ ...
- 使用python脚本批量造数据
本篇将采用 Python 脚本的方式进行批量给mysql造数据. 为了使 Python 可以连上数据库(MySQL),并且可以与数据库交互(增删改查等操作),则需要安装 MySQL 客户端操作库. ...