作为一个彻底的门外汉,始终对编程有好感,逻辑,总是让人如痴如醉,这是题外话。
下面进入正题。
火热的天气配上火热的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 webbrowserimport re import urllibfrom urllib import parsefrom tkinter import *from tkinter import ttkimport tkinter as tkfrom tkinter import scrolledtextfrom tkinter import Menuimport tkinter.messageboximport tkinter as tkfrom tkinter import StringVar, IntVarfrom tkinter import Tk, Checkbutton, Labeldef 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: passdef clear(*args): try: feet.set("") scr.config(state=NORMAL) scr.delete(0.0,tk.END) scr.config(state=DISABLED) feet_entry.focus() except ValueError: passdef 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("", callback)root.bind(" ",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=RadioCallttk.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 = 16scr = 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()