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应该怎样学习呢? 阶段一:适合自己的学习方式 对于零基础的初学者来说,最迷茫的是不知道怎样开始学习?那这里小编建议可以采用视频+书籍的方式进行学习.看视频学习可以让你迅速掌握编程的基础语法 ...
随机推荐
- ubuntu的vsftpd
先输入vsftp -v查看自己的ubuntu是不是已经安装了vsftpd 没有安装的样子 安装的样子 如果没有安装先安装,输入下面的东西 apt-get install vsftpd 进行安装,安装好 ...
- Rsync等传统文件同步方式已过时 如何寻找替代产品?
Rsync原本是在Linux系统下面的一个文件同步协议,随着技术的发展,它也有其它版本的,如Windows和AIX.HPUX下面都有相应的版本可以支持的.它有很多版本都是免费的,配置也不复杂,所以很多 ...
- JAVASCRIPT 对有符号整型、无符号整型、浮点型、十六进制、二进制的数据处理
1.十六进制字符串转有符号整型,支持S8.S16.S32: function hexToInt(hex) { if(hex.length % 2 != 0) { hex = "0" ...
- python打开Excel中指定的sheet表
一个Excel中有多个sheet的时候,你在第几个sheet保存关闭的,那下次打开就在原来的那个表的位置,所以有时候你想--在打开一个Excel的时候指定到其中的一个sheet表,那么使用第三方库xl ...
- curl 与 header 及 file_get_countents 访问内容时的区别
在开发中 想用curl 或者是file_get_contents 模拟请求或者是获取数据时 ,经常会发现获取到的内容与想象中的不一样,主要原因在与这两个走得host要走外网,在内网及测试环境下host ...
- Safari浏览器如何收藏网页?
Safari浏览器是MacOS所自带的一款功能强劲的浏览器,许多MacOS的用户在使用过Safari浏览器后就不会去下载其他浏览器了.对于很多Mac新手用户来说,如何使用Safari浏览器来收藏喜欢的 ...
- Vue3.0 里为什么要用 Proxy API 替代 defineProperty API?
响应式优化. a. defineProperty API 的局限性最大原因是它只能针对单例属性做监听. Vue2.x 中的响应式实现正是基于 defineProperty 中的 descriptor, ...
- Java poi导入Excel
public MessageTo insertExcel(MultipartFile file) { try { InputStream is = file.getInputStream(); Wor ...
- flutter TextField 使用prefixIcon图标和文字间距问题
可以看到使用prefixIcon图标就出现间距问题.网上看了很多文章,好像是没有什么好的解决办法,也有可能是太简单了,别人懒的发(哭笑). 我把我知道的方法写出来吧 decoration: Input ...
- spring-security-oauth2-authorization-server
旧依赖的移除 长久以来,使用Spring Security整合oauth2,都是使用Spring Security Oauth2这个系列的包: <dependency> <group ...