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

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

下面进入正题。

火热的天气配上火热的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. 0xc0000142怎么修复

    0xc0000142怎么修复 参考链接 https://jingyan.baidu.com/article/4d58d54102f3d29dd4e9c0b1.html

  2. Redis-shake工具 [ 自建redis集群->云redis主从 ]

    redis-shake工具是阿里用go写的开源工具 开始前准备 1. 确保ECS实例与Redis实例属于同一专有网络(即实例基本信息中的专有网络ID一致) 2. 获取ECS实例的内网IP地址,即执行操 ...

  3. Python自动化测试更新selenium的两种方式

    第一种手动实现: 来源 https://www.codeleading.com/article/73395290617/ import os import re import winreg impor ...

  4. JMeter压测基础(二)——Mysql数据库

    JMeter压测基础(二)Mysql数据库 环境准备 mysql驱动 JMeter jdbc配置 JMeter jdbc请求 1.下载mysql驱动:mysql-connector-java.jar ...

  5. 突然连不上虚拟机,本地网络里没有VMnet8

    今天打开虚拟机,突然发现无法ping通网络了,但是能ping通虚拟机ip,打开我的window的网络适配器发现居然没有vmnet 8虚拟网卡了,防火墙什么的都设置好了,仍然不行,后来发现,在网络和共享 ...

  6. 如何使用autotools/automake自动生成Makefile文件

    前言: Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Linux为我们提供了自动生成功能完善的Makefile文 ...

  7. SAP ABAP 验证与替代

    1.校验与替代的作用 校验(Validation):在凭证保存前根据设置条件判断此凭证是否有效,其中可以按抬头.行项目或完全凭证来判断,然后再根据Validation设置的消息类型决定凭证是否允许保存 ...

  8. DataTable TO List<T>

    datatable转list<> public IList<T> GetList<T>(DataTable table){IList<T> list = ...

  9. AX2012 使用HTML自定义popup内样式

    在Class Box下新增方法如下: public client static DialogButton yesNoHTML( str _text, DialogButton _defaultButt ...

  10. 【编程】Python3 使用自定义编码字符表解密Base64数据

    前言 Python提供了"base64"模块用于编码.解码Base64数据.但是并不是所有的Base64数据都会使用默认的字符表进行编码,所以这里对Python下实现自定义编码字符 ...