python之tk學習,閑魚搜索-小記


(如想轉載,請聯系博主或貼上本博地址)

編程,邏輯,總是讓人如痴如醉。

下面進入正題。

火熱的天氣配上火熱的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()

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM