蓝皮阿五

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

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

下面进入正题。

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

  

 

posted on 2019-07-07 17:48  蓝皮阿五  阅读(2069)  评论(0编辑  收藏  举报