博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之tk学习,闲鱼搜索-小记
阅读量:4945 次
发布时间:2019-06-11

本文共 14628 字,大约阅读时间需要 48 分钟。

作为一个彻底的门外汉,始终对编程有好感,逻辑,总是让人如痴如醉,这是题外话。

下面进入正题。

火热的天气配上火热的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()

  

 

posted on
2019-07-07 17:48 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lanpiawu/p/11147021.html

你可能感兴趣的文章
jmeter之_MD5函数与请求参数化
查看>>
samsung-smart app 开发
查看>>
多项式求ln,求exp,开方,快速幂 学习总结
查看>>
Linux下批量替换文件内容方法
查看>>
C++11带来的优雅语法
查看>>
WinForm无边框窗体依据任务栏位置最大化
查看>>
udp案例
查看>>
浅谈sql中的in与not in,exists与not exists的区别
查看>>
hdu 2018 母牛的故事 动态规划入门题
查看>>
22:LaunchMode应用场景
查看>>
bootstrap-table简单使用
查看>>
数组定义已经自动初始化
查看>>
List集合、泛型、装箱拆箱
查看>>
Dubbo知识点
查看>>
String类
查看>>
创建框架结构的页面
查看>>
Jquery实现遮罩层,就是弹出DIV周围都灰色不能操作
查看>>
Log4Net组件的应用详解
查看>>
跨域问题
查看>>
面试题33 把数组排成最小的数
查看>>