(如想转载,请联系博主或贴上本博地址)

编程,逻辑,总是让人如痴如醉。

下面进入正题。

火热的天气配上火热的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学习,闲鱼搜索-小记的更多相关文章

  1. Python 分析后告诉你闲鱼上哪些商品抢手?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...

  2. 闲鱼上哪些商品抢手?Python 分析后告诉你

    1目 标 场 景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的 睡后收入. 闲鱼上大量的商品,很难精准判断哪些受欢迎,哪些好卖:一个个录入数据去做数据分析,浪费时间的同 ...

  3. PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)

    说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...

  4. PyQt(Python+Qt)学习随笔:QTableWidget的findItems和selectedItems搜索项和访问选中项方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.搜索项 在表格部件中,可以根据文本以及匹配模式来搜索满足条件的项,调用语法: list[QTab ...

  5. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中使用findItems搜索项

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTreeWidget类实例的树型部件中,可以根据文本.搜索列以及匹配模式来搜索满足条件的项,调用 ...

  6. 自己动手制作的淘宝闲鱼APP宝贝数据采集工具软件

    之前做过淘宝PC端宝贝和店铺数据的采集,后来需要做APP端的数据采集,因为没有学过Android,以前也都是做PC端的软件,有没有其他方法呢? 突然想到了用手机模拟器,可以在电脑端控制运行手机APP端 ...

  7. GIAC2019 演讲精选 | 面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码

    一直以来, 如何从‘视觉稿’精确的还原出 对应的UI侧代码 一直是端侧开发同学工作里消耗比较大的部分,一方面这部分的工作 比较确定缺少技术深度,另一方面视觉设计师也需要投入大量的走查时间,有大量无谓的 ...

  8. 消息点击率翻倍的背后——闲鱼无侵入可扩展IFTTT系统

    一.面临问题 在闲鱼生态里,用户之间会有很多种关系.其中大部分关系是由买家触发,联系到卖家,比如买家通过搜索.收藏.聊天等动作与卖家产生联系:另外一部分是平台与用户之间的关系.对这些关系分析之后我们发 ...

  9. Facebook F8|闲鱼高级技术专家参会分享

    笔者代表闲鱼参加了Facebook在4月30日举行的为期二天的F8大会,地点加州.将会议概括和一些收获分享给大家.对国内开发者而言,Facebook的产品设计.社区.VR/AR等有一些借鉴意义:对海外 ...

  10. 零基础Python应该怎样学习呢?(附视频教程)

    Python应该怎样学习呢? 阶段一:适合自己的学习方式 对于零基础的初学者来说,最迷茫的是不知道怎样开始学习?那这里小编建议可以采用视频+书籍的方式进行学习.看视频学习可以让你迅速掌握编程的基础语法 ...

随机推荐

  1. ariba 数据补发

    *&---------------------------------------------------------------------* *& Report Z_ARBA_PZ ...

  2. predixy安装

    #predixy安装#下载predixy-1.0.5-bin-amd64-linux.tar.gz,这个是编译好的,下载就可以使用tar -xzvf predixy-1.0.5-bin-amd64-l ...

  3. Linux基础第十章:系统安全及应用

    目录 一.账户安全措施 1.账户管理 2.锁定配置文件 3.清除历史记录 二.sudo 1.sudo概念及优点 2.使用sudo 3.sudo实操演示 4.设置sudo别名 5.sudo特别注意 一. ...

  4. vector 用法2

    vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器.vector 是C++ STL的一个重要成员,使用它时需要包含头文件: 复制代码 代码如下: #include< ...

  5. java stream map和 flatmap区别

    区别:map mapper返回R,flatMap mapper返回Stream<R> 官网解释 1,<R>Stream<R> flatMap(Function< ...

  6. 【python】绘图,画虚线

    linestyle='--' plot画线时候加linestyle='--'. 参考:python 画图-标注点,画虚线_GXLiu-CSDN博客_python画虚线

  7. WSGI网站部署以及requests请求的一些随想.

    一直想项目,没怎么写过后端服务,但很多时候,有些服务又是公用的,平时一般都用redis来当做通信的中间件,但这个标准的通用型与扩展信太差了. 与一些群友交流,建议还是起http服务比较好,自己也偏向与 ...

  8. phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)(Kali)

    ​  phpMyAdmin是一套开源的.基于Web的MySQL数据库管理工具.其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞. 通过vulhub靶场进行复现 ...

  9. jmeter dubbo测试

    一.环境准备 1.安装jmeter 2.安装dubbo插件,下载地址jmeter-plugins-dubbo, 将jar包放入${JMETER_HOME}\lib\ext路径下,重启即可 二.添加一个 ...

  10. oracle 存过调试 stepinto stepover stepout

    step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数): step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止, ...