国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Tkinter列表選擇窗口實戰(zhàn):Listbox事件綁定與聯(lián)動刷新指南

Tkinter列表選擇窗口實戰(zhàn):Listbox事件綁定與聯(lián)動刷新指南 1. 從需求到控件列表選擇窗口的定位與設(shè)計思路1.1 為什么列表選擇在 Tkinter 應(yīng)用里如此常見做過幾個帶界面的Python工具后你會發(fā)現(xiàn)凡是需要用戶進(jìn)行挑選操作的場景幾乎都繞不開列表選擇。比如一個批量文件處理工具要選目標(biāo)目錄一個數(shù)據(jù)整理腳本要選分類標(biāo)簽一個內(nèi)網(wǎng)運維小系統(tǒng)要切環(huán)境配置第一反應(yīng)就是用列表把可選項擺出來讓用戶點。Tkinter作為python自帶的GUI庫雖然長得樸素但它的Listbox列表框、Combobox下拉組合框、Spinbox數(shù)值/文本微調(diào)框這些控件恰恰覆蓋了大部分列表選擇的交互需求。不需要額外安裝第三方庫不需要寫復(fù)雜的前端代碼就能實現(xiàn)展示可選項、接收用戶選擇、回傳選中值這一完整閉環(huán)。我個人的經(jīng)驗是如果你要做的只是一個內(nèi)部工具、教學(xué)演示或者輕量級桌面小應(yīng)用Tkinter的列表選擇窗口完全夠用而且寫起來非???。從需求確認(rèn)到能跑的界面半小時以內(nèi)就能搞定。這也是為什么很多開發(fā)者在寫輔助腳本時會順手用Tkinter而非PyQt或者Web前端——省事是最大的優(yōu)勢。1.2 三種列表控件的適用場景選型用錯控件是新手最容易犯的問題。我見過有人為了做一個只允許選一項目錄的功能硬是用了帶復(fù)選框的Listbox結(jié)果還要額外處理多選邏輯代碼復(fù)雜度直線上升也有人需要在界面上同時展示多個選項卻用了Combobox用戶每次都得點開下拉才能看到全部選項體驗相當(dāng)別扭。這里先給出我的選型建議Listbox適合選項數(shù)量中等比如5到50個、需要讓用戶一眼看到全部選項的場景。支持單選和多選模式配合滾動條可以承載更多條目。Combobox適合選項數(shù)量較多超過10個、界面空間有限或者默認(rèn)項很明確的場景。用戶點擊下拉才展開能省一大塊界面面積而且支持輸入過濾需要配合配置。Spinbox適合選項是連續(xù)范圍或有限序列的場景比如調(diào)節(jié)數(shù)字、循環(huán)切換周幾、選擇小時分鐘等。它本質(zhì)上是文本框加兩側(cè)微調(diào)箭頭。舉個我實際做過的例子。之前寫一個日志分析小工具需要讓用戶選擇日志文件的編碼格式可選項就那么五六個UTF-8、GBK、GB2312、ASCII、Unicode、BOM-UTF8。這種一眼能看完的選項我用的是Listbox而另一個功能里需要用戶從幾十個業(yè)務(wù)分類里挑一個我用的就是Combobox因為界面放不下那么多行下拉是合理的妥協(xié)。1.3 一個完整列表選擇窗口的組成結(jié)構(gòu)一個規(guī)范的列表選擇窗口不是簡單拖一個控件上去就完了。按我的習(xí)慣它至少包含這幾個部分頂部說明區(qū)用Label告訴用戶當(dāng)前需要選什么。比如請選擇目標(biāo)分區(qū)。這個小細(xì)節(jié)很多人忽略但實際使用中體驗差距很大沒有說明文字的彈窗只能靠用戶猜。列表展示區(qū)這是核心區(qū)域。Listbox放中間右側(cè)或底部配上滾動條保證選項多的時候能滾動瀏覽。交互控制區(qū)單選一般不需要額外操作但雙擊或點擊確定/OK按鈕后要觸發(fā)回調(diào)把選中的值傳出去。很多實現(xiàn)里還需要一個取消按鈕用于中斷操作尤其是在模態(tài)對話框中。狀態(tài)反饋區(qū)當(dāng)用戶做了選擇后可以用一個Label動態(tài)刷新當(dāng)前選中項讓用戶確認(rèn)自己選對了。這個反饋對防止誤操作很有幫助。想清楚結(jié)構(gòu)之后再動手寫代碼比一邊寫一邊想清楚得多。我會先畫一個簡單草圖紙上或腦子里把每個控件的位置和職責(zé)分配好再進(jìn)入編碼。接下來我結(jié)合一個實際Demo把每一步代碼掰開來說明。2. Listbox核心細(xì)節(jié)解析與實操要點2.1 創(chuàng)建Listbox和基礎(chǔ)參數(shù)配置Listbox的創(chuàng)建語法很簡單但參數(shù)里有幾個直接決定交互行為的很多教程只是一筆帶過我在這里按實際經(jīng)驗展開講。import tkinter as tk root tk.Tk() root.title(列表選擇窗口示例) root.geometry(400x300) listbox tk.Listbox( root, selectmodetk.SINGLE, # 選擇模式單選 height8, # 可視行數(shù)超出用滾動條 font(Microsoft YaHei, 11), activestyleunderline, # 活動項樣式下劃線 selectbackground#4A90D9, # 選中項背景色 selectforeground#FFFFFF, # 選中項前景色 highlightthickness1 # 焦點邊框粗細(xì) ) listbox.pack(filltk.BOTH, expandTrue, padx20, pady20)這組參數(shù)里selectmode是最關(guān)鍵的一個它決定用戶能不能多選。取值有tk.SINGLE單選點哪個選哪個互斥。tk.BROWSE單選但支持鼠標(biāo)拖拽移動選中項默認(rèn)模式通常也會被當(dāng)成單選用。tk.MULTIPLE多選點擊某一項會切換該項的選中狀態(tài)不影響其他項。tk.EXTENDED擴展多選支持Shift連選、Ctrl加選更符合常見的文件選擇習(xí)慣。我在業(yè)務(wù)里用SINGLE和EXTENDED最多。像選擇一個環(huán)境配置這種強互斥場景用SINGLE像批量選擇要處理的幾個文件類型這種場景用EXTENDED。MULTIPLE的交互其實比較別扭因為用戶容易誤觸除非有特殊需求否則不推薦。activestyle這個參數(shù)很有意思它控制的是當(dāng)前活動項高亮條的顯示樣式。默認(rèn)是underline下劃線也可以設(shè)為dotbox給活動項套個虛線框或者設(shè)為none完全隱藏。當(dāng)你想要列表看起來干凈清爽不顯眼的活動條時activestylenone是個不錯的選擇。2.2 向列表填充數(shù)據(jù)的正確姿勢向Listbox填入數(shù)據(jù)常用insert方法但有兩種常見寫法效率差別很大。# 方式一逐條插入方便但有點慢 for item in [北京, 上海, 廣州, 深圳, 杭州, 成都, 武漢]: listbox.insert(tk.END, item) # 方式二批量插入先構(gòu)造列表再一次插入 cities [北京, 上海, 廣州, 深圳, 杭州, 成都, 武漢] listbox.insert(tk.END, *cities)第一種方式把insert放在循環(huán)里條目多了會反復(fù)觸發(fā)內(nèi)部回調(diào)明顯卡頓第二種方式用*cities解包批量插入一條語句搞定效率好很多。如果數(shù)據(jù)量上了幾千條強烈建議用第二種方式。清空列表用delete(0, tk.END)這個起點參數(shù)0不能漏。我見過有人寫delete(1, tk.END)導(dǎo)致第一項永遠(yuǎn)刪不掉排查半天才發(fā)現(xiàn)是從1開始了下標(biāo)搞錯。還有一個操作是插入到指定位置比如把一項插到最前面listbox.insert(0, 新增城市)以及刪除指定項listbox.delete(2) # 刪除索引為2的項這些操作都要牢記Listbox的索引是從0開始的整數(shù)索引不要跟后面要講的curselection返回值混淆。2.3 單選模式的事件綁定與選中值獲取列表擺好了接下來就是用戶點選之后怎么取值的問題。這里有個坑Listbox本身沒有命令參數(shù)不能像Button那樣直接綁定函數(shù)。很多初學(xué)者會嘗試command參數(shù)發(fā)現(xiàn)怎么都觸發(fā)不了原因就在這里。標(biāo)準(zhǔn)做法是給Listbox綁定ListboxSelect事件這個事件在用戶選中項發(fā)生變化時觸發(fā)def on_select(event): # 獲取事件來源控件 widget event.widget # 返回選中項的索引元組例如 (2,) selection widget.curselection() if selection: index selection[0] value widget.get(index) status_label.config(textf當(dāng)前選擇{value}) else: status_label.config(text未選擇任何項) listbox.bind(ListboxSelect, on_select)這段代碼里有三個關(guān)鍵點。第一curselection()返回的是一個元組哪怕只選了一項返回的也是(2,)這種單元素元組。直接拿這個元組當(dāng)字符串用會出錯必須取selection[0]得到整數(shù)索引。第二拿到整數(shù)索引之后用listbox.get(index)才能得到實際的字符串值。第三這個事件綁定的函數(shù)會接收到event參數(shù)通過event.widget可以拿到觸發(fā)事件的控件引用。如果界面上有多個Listbox可以復(fù)用同一個函數(shù)通過event.widget區(qū)分當(dāng)前是哪個列表這是個很實用的小技巧。2.4 多選模式下的數(shù)據(jù)提取多選場景下比如用EXTENDED模式讓用戶挑幾個分類取值邏輯稍有不同def get_selected_items(): selected_indices listbox.curselection() # 返回所有選中索引 items [listbox.get(i) for i in selected_indices] return items按這個邏輯寫一個按鈕回調(diào)就能把用戶選中的多個值一次性收集起來。多選模式下有個體驗問題是用戶如果點擊了當(dāng)前列表中的空白區(qū)域curselection()會返回空元組代碼里要判斷一下再處理否則界面上的反饋Label會報錯。def on_confirm(): selected get_selected_items() if selected: status_label.config(textf已選 {len(selected)} 項{, .join(selected)}) else: status_label.config(text請先做出選擇)這個二次確認(rèn)邏輯能避免不少無意義的彈窗報錯用戶沒選就直接點確定的情況在實際使用中相當(dāng)常見。3. 事件處理進(jìn)階與實際取值邏輯3.1 單擊、雙擊、按鈕觸發(fā)的分工很多人在列表選擇窗口里糾結(jié)一個問題到底用戶點一下就算選完還是要點確定按鈕才生效我的經(jīng)驗是兩者都要支持但職責(zé)分開單擊選中實時刷新狀態(tài)反饋區(qū)讓用戶看到當(dāng)前選的是哪一項。這里不觸發(fā)最終業(yè)務(wù)邏輯。雙擊條目視為確認(rèn)選擇直接執(zhí)行后續(xù)業(yè)務(wù)邏輯。適合需要快速操作的場景。點擊確定按鈕讀取當(dāng)前選中項校驗非空再執(zhí)行業(yè)務(wù)邏輯。這是最穩(wěn)妥的路徑也是模態(tài)對話框的標(biāo)準(zhǔn)交互。三種交互方式代碼如下# 單擊僅刷新狀態(tài) listbox.bind(ListboxSelect, on_single_click) # 雙擊確認(rèn)并執(zhí)行 listbox.bind(Double-Button-1, on_double_click) # 確定按鈕 confirm_btn tk.Button(root, text確定, commandon_confirm) confirm_btn.pack() def on_single_click(event): sel event.widget.curselection() if sel: idx sel[0] status_label.config(textf當(dāng)前選中{event.widget.get(idx)}) def on_double_click(event): sel event.widget.curselection() if sel: idx sel[0] status_label.config(textf確認(rèn)選擇{event.widget.get(idx)}) # 在這里調(diào)用業(yè)務(wù)處理函數(shù) handle_selection(event.widget.get(idx)) def on_confirm(): sel listbox.curselection() if not sel: messagebox.showwarning(提示, 請先選擇一個項目) return handle_selection(listbox.get(sel[0]))3.2 用StringVar聯(lián)動動態(tài)刷新選中值Tkinter的StringVar是管理界面動態(tài)文本的好工具它最大的特點是變量的值一變綁定了它的Label的顯示文本會自動更新不需要手動調(diào)用config方法。selected_var tk.StringVar(value尚未選擇) status_label tk.Label(root, textvariableselected_var, font(Microsoft YaHei, 11)) status_label.pack() def update_selection(event): sel event.widget.curselection() if sel: selected_var.set(f當(dāng)前選擇{event.widget.get(sel[0])}) listbox.bind(ListboxSelect, update_selection)這種做法代碼更簡潔狀態(tài)反饋區(qū)和列表狀態(tài)天然同步。我推薦在稍復(fù)雜的界面里統(tǒng)一用StringVar管理動態(tài)文本因為多個控件可能同時需要感知同一個變化比如狀態(tài)Label和標(biāo)題欄同時更新用變量比手動同步省心很多。3.3 默認(rèn)選中項與回顯技巧應(yīng)用里經(jīng)常遇到這樣一個需求打開窗口時要默認(rèn)選中上一次保存的選項也就是回顯。Listbox的selection_set方法可以做到def set_default_selection(listbox, default_text): items listbox.get(0, tk.END) if default_text in items: index items.index(default_text) listbox.selection_clear(0, tk.END) # 先清除所有選中 listbox.selection_set(index) # 再設(shè)置默認(rèn)選中 listbox.activate(index) # 設(shè)置活動項 listbox.see(index) # 滾動到可見區(qū)域這里有幾個細(xì)節(jié)要留意。selection_clear(0, tk.END)作用是先清空狀態(tài)否則二次調(diào)用回顯時會出現(xiàn)多個選中項。activate(index)設(shè)置活動項避免活動條還停在上一次的項上。see(index)會自動滾動列表保證默認(rèn)選中的那一項在可視區(qū)里。如果默認(rèn)項在很靠下的位置沒有see調(diào)用用戶打開窗口看到的是列表頂部根本不知道默認(rèn)選了什么。回顯完成后記得手動觸發(fā)一次狀態(tài)刷新selected_var.set(f當(dāng)前選擇{default_text})有些開發(fā)者在回顯后忘記同步狀態(tài)區(qū)域結(jié)果列表里明明有選中項狀態(tài)Label卻還寫著尚未選擇看起來非常奇怪。3.4 通過鍵盤上下鍵控制選擇鼠標(biāo)點擊當(dāng)然是最直觀的操作但對高頻使用的工具來說鍵盤操控能明顯提升效率。Listbox本身支持上下方向鍵移動活動項但要讓它觸發(fā)業(yè)務(wù)邏輯需要一個key bindingdef on_arrow_key(event): # 延遲一點執(zhí)行確保currselection返回的是移動后的結(jié)果 root.after(10, refresh_from_keyboard) def refresh_from_keyboard(): sel listbox.curselection() if sel: selected_var.set(f當(dāng)前選擇{listbox.get(sel[0])}) listbox.bind(Up, on_arrow_key) listbox.bind(Down, on_arrow_key)注意我用了root.after(10, ...)這是因為鍵盤事件觸發(fā)時Listbox內(nèi)部可能還沒完成選中項更新直接讀取拿到的是舊值。延遲10毫秒再讀就能拿到最新狀態(tài)。這類事件觸發(fā)后再異步刷新的小技巧在處理虛擬事件時經(jīng)常用到。4. 布局與界面優(yōu)化讓列表窗口更像正式產(chǎn)品4.1 pack與grid布局的選型對比布局方面Tkinter提供了pack、grid、place三種方式我建議在列表選擇窗口這種結(jié)構(gòu)明確的界面里用grid它能精確控制行列關(guān)系不用擔(dān)心控件之間互相擠壓。下面是一個典型的三行布局# 第一行說明Label header_label tk.Label(root, text請選擇所屬城市, font(Microsoft YaHei, 12)) header_label.grid(row0, column0, stickyw, padx20, pady(15, 5)) # 第二行Listbox 滾動條 list_frame tk.Frame(root) list_frame.grid(row1, column0, stickynsew, padx20, pady5) scrollbar tk.Scrollbar(list_frame, orientvertical) listbox tk.Listbox( list_frame, selectmodetk.EXTENDED, yscrollcommandscrollbar.set, exportselectionFalse, height8 ) scrollbar.config(commandlistbox.yview) scrollbar.pack(sideright, filly) listbox.pack(sideleft, fillboth, expandTrue) # 第三行狀態(tài)Label Button status_label tk.Label(root, textvariableselected_var, font(Microsoft YaHei, 10)) status_label.grid(row2, column0, stickyw, padx20, pady5) btn_frame tk.Frame(root) btn_frame.grid(row3, column0, pady(5, 15)) cancel_btn tk.Button(btn_frame, text取消, width10, commandroot.destroy) cancel_btn.pack(sideleft, padx5) confirm_btn tk.Button(btn_frame, text確定, width10, commandon_confirm) confirm_btn.pack(sideleft, padx5)關(guān)鍵節(jié)點我拆開說明一下。滾動條和Listbox必須協(xié)同工作設(shè)置yscrollcommandscrollbar.set讓Listbox把滾動狀態(tài)告訴滾動條同時設(shè)置scrollbar.config(commandlistbox.yview)讓滾動條拖動時反過來控制Listbox。這兩條缺一不可只配一條滾動都不會順暢。exportselectionFalse這個參數(shù)很容易被忽略它的作用是禁止Selection被導(dǎo)出到X Window剪貼板。如果不設(shè)為False用戶在同一臺機器上點擊其他輸入框列表的選中狀態(tài)可能會消失。在Linux環(huán)境下開發(fā)尤其要注意。4.2 Listbox與滾動條的綁定的注意事項滾動條使用中還有一個很經(jīng)典的問題滾動條沒有跟Listbox放在同一個父容器里也會失效或者布局錯亂。正確的做法是像上面代碼那樣先創(chuàng)建一個list_frame作為容器滾動條和Listbox都放在這個Frame里用pack的方式讓滾動條在右側(cè)、Listbox填滿剩余空間。如果直接在主窗口上pack滾動條和Listbox窗口尺寸變化時可能出現(xiàn)滾動條被擠到角落或者列表變形的問題。用Frame包一層可伸縮性和穩(wěn)定性都會好很多。另一個經(jīng)驗是Listbox的height參數(shù)不要給太大。比如設(shè)置height8表示固定顯示8行的高度。配合expandTrue窗口拉大時列表會跟著拉長多顯示幾行窗口縮小到最小尺寸時還是能保證8行可見。這個值給到8到12之間比較合適太小了用戶瀏覽不方便太大了又占屏幕空間。4.3 樣式與主題氛圍調(diào)整Tkinter默認(rèn)的灰底白字風(fēng)格確實樸素得可以但這不代表不能做得好看。通過配置外觀參數(shù)完全可以讓列表窗口看起來像模像樣listbox tk.Listbox( list_frame, bg#FAFAFA, # 背景色干凈的米白 fg#333333, # 字體顏色深灰 selectbackground#5B8DEF, # 選中項背景柔和的藍(lán)色 selectforeground#FFFFFF, # 選中項文字白色 highlightthickness1, highlightcolor#B0B0B0, selectborderwidth1, reliefflat, borderwidth2 )reliefflat讓Listbox不再有默認(rèn)的凹陷邊框配合highlightthickness1和highlightcolor整體觀感更接近現(xiàn)代桌面應(yīng)用。selectborderwidth1是選中項邊框?qū)挾热绻O(shè)成0選中項背景和列表背景會貼得太緊視覺上有點生硬。字體方面建議統(tǒng)一用font(Microsoft YaHei, 11)或(PingFang SC, 11)按你的目標(biāo)系統(tǒng)來定。設(shè)置字體的好處不僅僅是好看更重要的是避免中文在某些默認(rèn)字體下顯示為方框亂碼這個問題在Windows以外的平臺上尤為常見。4.4 窗口置頂、模態(tài)與生命周期管理列表選擇窗口一般有兩種用法一種是嵌在主窗口里的常用區(qū)域另一種是作為彈出對話框要求用戶選擇后返回結(jié)果。后者通常需要設(shè)置模態(tài)屬性把窗口置頂并禁止操作主窗口。select_dialog tk.Toplevel(root) select_dialog.title(請選擇項目) select_dialog.geometry(320x280) select_dialog.transient(root) # 設(shè)置父子關(guān)系 select_dialog.grab_set() # 設(shè)置模態(tài)焦點鎖定在本窗口 # 窗口居中 select_dialog.update_idletasks() width select_dialog.winfo_width() height select_dialog.winfo_height() x (select_dialog.winfo_screenwidth() - width) // 2 y (select_dialog.winfo_screenheight() - height) // 2 select_dialog.geometry(f{x}{y})transient(root)告訴窗口系統(tǒng)這個對話框歸屬于主窗口這樣它能顯示在主窗口之上主窗口最小化時它也會跟著隱藏。grab_set()則把所有的輸入事件捕獲到當(dāng)前窗口用戶在關(guān)閉這個對話框之前無法操作底層主窗口這就是標(biāo)準(zhǔn)的模態(tài)行為。窗口居中看起來是小細(xì)節(jié)但用戶體驗提升非常明顯。一個彈在屏幕角落的對話框用戶要歪著頭找直接影響專業(yè)感。視覺上把長寬先拿到再計算坐標(biāo)是我喜歡用的方式。窗口關(guān)閉時的資源回收也值得注意。如果對話框里新開了資源比如連接數(shù)據(jù)庫、打開文件在關(guān)閉事件里要釋放def on_close(): # 清理資源 if hasattr(this, db_conn): this.db_conn.close() select_dialog.destroy() select_dialog.protocol(WM_DELETE_WINDOW, on_close)protocol(WM_DELETE_WINDOW, callback)可以攔截用戶點擊右上角X按鈕的操作把清理邏輯統(tǒng)一放到回調(diào)里。如果不做這個攔截默認(rèn)行為是直接銷毀窗口資源可能來不及回收。5. 聯(lián)動場景與完整實戰(zhàn)案例5.1 省市區(qū)三級聯(lián)動列表的經(jīng)典設(shè)計列表選擇窗口最有代表性的實戰(zhàn)場景就是省-市-區(qū)三級聯(lián)動。用戶先選省份市列表刷新再選城市區(qū)列表刷新。這種聯(lián)動邏輯在Tkinter里實現(xiàn)起來其實并不復(fù)雜核心思路是事件驅(qū)動數(shù)據(jù)刷新。設(shè)計思路維護(hù)一個嵌套字典key是省份value是城市字典城市字典的value是區(qū)列表。data { 廣東省: { 廣州市: [天河區(qū), 越秀區(qū), 海珠區(qū), 白云區(qū)], 深圳市: [南山區(qū), 福田區(qū), 羅湖區(qū), 寶安區(qū)] }, 浙江省: { 杭州市: [西湖區(qū), 拱墅區(qū), 濱江區(qū)], 寧波市: [海曙區(qū), 鄞州區(qū), 江北區(qū)] } }三個Listbox并排排列每個Listbox綁定ListboxSelect事件但各自的回調(diào)函數(shù)不同省份的選中刷新城市列表城市的選中刷新區(qū)列表。5.2 聯(lián)動刷新時的數(shù)據(jù)同步細(xì)節(jié)聯(lián)動刷新里最大的坑在于省市切換時下級列表的選中狀態(tài)要主動清空。如果用戶選了廣東省-廣州市這時候切換省份到浙江省城市列表整體replace成了杭州市、寧波市但舊的城市選中狀態(tài)如果不clear界面會顯示一個奇怪的幽靈選中項而且后續(xù)取值會拿到?jīng)]有任何意義的舊數(shù)據(jù)。正確的刷新邏輯def update_cities(event): sel_province province_listbox.curselection() if not sel_province: return province province_listbox.get(sel_province[0]) cities data.get(province, {}) city_listbox.delete(0, tk.END) city_listbox.insert(tk.END, *cities) district_listbox.delete(0, tk.END) selected_var.set(f已選{province}) def update_districts(event): sel_city city_listbox.curselection() if not sel_city: return city city_listbox.get(sel_city[0]) districts data.get(city, []) district_listbox.delete(0, tk.END) district_listbox.insert(tk.END, *districts)每次省份變化時對城市列表執(zhí)行delete和insert天然就清空了舊選中項。同樣城市變化時清空區(qū)列表。這種刷新即清空的思路是我在多個聯(lián)動場景里反復(fù)驗證過的可以避免絕大多數(shù)由狀態(tài)殘留導(dǎo)致的取值錯亂問題。再看一個細(xì)節(jié)當(dāng)用戶重新選擇同一個省份時例如從廣東省切走又切回來上述邏輯也會一切照常運行不會重復(fù)插入數(shù)據(jù)或產(chǎn)生臟數(shù)據(jù)。delete(0, tk.END)在這時發(fā)揮了整表重載的功力這種操作在數(shù)據(jù)量小的時候反而是最穩(wěn)妥的方案遠(yuǎn)好過算差值做增量更新的復(fù)雜邏輯。5.3 聯(lián)動數(shù)據(jù)源來自外部文件的實踐實際業(yè)務(wù)里省市區(qū)數(shù)據(jù)很少會硬編碼在Python文件里更多是從JSON配置或者數(shù)據(jù)庫讀取。下面是一個從JSON讀取并構(gòu)建聯(lián)動數(shù)據(jù)的示例import json def load_region_data(filepath): with open(filepath, r, encodingutf-8) as f: raw_data json.load(f) # 假定JSON結(jié)構(gòu)為 # [{province: 廣東省, cities: [ # {city: 廣州市, districts: [天河區(qū), 越秀區(qū)]}, # {city: 深圳市, districts: [南山區(qū), 福田區(qū)]} # ]}] result {} for p in raw_data: province p[province] result[province] {} for c in p[cities]: result[province][c[city]] c[districts] return result注意讀取JSON時一定要加上encodingutf-8否則在Windows默認(rèn)GBK環(huán)境下解析中文JSON會報編碼錯誤。這個坑我踩過好多次凡是涉及中文數(shù)據(jù)讀取的場景顯式指定UTF-8編碼是鐵律。5.4 實戰(zhàn)案例環(huán)境參數(shù)快速選擇器我做過一個跨平臺系統(tǒng)部署輔助工具其中一個界面就是環(huán)境參數(shù)快速選擇器。功能是讓運維同事在部署前先選擇目標(biāo)環(huán)境開發(fā)/測試/生產(chǎn)再選擇該環(huán)境對應(yīng)的服務(wù)器列表。這本質(zhì)上就是多級聯(lián)動但數(shù)據(jù)結(jié)構(gòu)是動態(tài)的每次發(fā)布新機器都從配置文件讀取。它的界面構(gòu)成為頂部環(huán)境類型單選列表開發(fā)環(huán)境、測試環(huán)境、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境。中部左側(cè)從配置讀取的服務(wù)器列表。中部右側(cè)當(dāng)前選定服務(wù)器上需要部署的服務(wù)模塊多選。底部實時配置預(yù)覽框和部署按鈕。這里的處理邏輯更貼近業(yè)務(wù)服務(wù)器列表的加載依賴環(huán)境選擇部署模塊的多選依賴服務(wù)器選擇。每次聯(lián)動刷新時需要同步更新預(yù)覽框里的配置信息讓用戶在下發(fā)命令前能核對所有參數(shù)。# 部分邏輯抽象 def refresh_servers(event): env env_listbox.get(env_listbox.curselection()[0]) servers config_loader.load_servers(env) server_listbox.delete(0, tk.END) server_listbox.insert(tk.END, *servers) def refresh_modules(event): server server_listbox.get(server_listbox.curselection()[0]) modules config_loader.load_modules(server) module_listbox.delete(0, tk.END) module_listbox.insert(tk.END, *modules) update_preview()這套設(shè)計的核心思想是數(shù)據(jù)結(jié)構(gòu)保持不變界面只做視圖層的聯(lián)動刷新。數(shù)據(jù)源從JSON換到MySQL或者換成API接口返回刷新邏輯一分錢都不用動只是加載函數(shù)內(nèi)部實現(xiàn)變了。這種解耦如果從一開始就堅持做后面擴展會非常順暢。5.5 數(shù)據(jù)查驗與回填聯(lián)動接口正確性驗證聯(lián)動界面最容易出的問題不是界面代碼而是數(shù)據(jù)本身的完整性和一致性。比如某個省份在配置里漏了城市或者某個城市區(qū)列表是空的用戶選到這里就會看到空白區(qū)域一臉茫然。我習(xí)慣在開發(fā)階段寫一個簡單的數(shù)據(jù)校驗函數(shù)def validate_data(data): report [] for province, cities in data.items(): if not cities: report.append(f警告省份 {province} 無下轄城市) for city, districts in cities.items(): if not districts: report.append(f警告城市 {city} 無下轄區(qū)縣) return report在窗口啟動時先調(diào)用這個函數(shù)把校驗結(jié)果輸出到日志或狀態(tài)欄。寧可提前報個警告也不要等用戶點到了才發(fā)現(xiàn)數(shù)據(jù)缺失。這種預(yù)校驗思路不僅適用于聯(lián)動數(shù)據(jù)凡是界面加載依賴外部配置的場景都建議做一次輕量校驗。6. 常見問題與排查技巧實錄6.1 為什么curselection一直返回空元組這是新手最常見的困惑明明看到Listbox里有選中項但curselection()就是返回()。排查順序一般是這樣的檢查是否用了exportselection。在Linux環(huán)境下如果exportselection沒有設(shè)為False用戶點擊其他控件時選中狀態(tài)會被系統(tǒng)導(dǎo)出到剪貼板選擇區(qū)導(dǎo)致Listbox的選中狀態(tài)丟失。解決辦法設(shè)置exportselectionFalse。檢查事件觸發(fā)時機。如果在ListboxSelect事件綁定的函數(shù)里立即可用但在按鈕回調(diào)里為空說明用戶根本沒選中任何項而不是程序出錯。用狀態(tài)Label顯示當(dāng)前選擇先確認(rèn)用戶操作是否真的選中了。檢查是否用了錯誤的綁定事件。比如綁定成了Button-1鼠標(biāo)左鍵按下而不是ListboxSelect鼠標(biāo)按下瞬間curselection()可能還沒有更新拿到空值是正常的。建議統(tǒng)一使用虛擬事件ListboxSelect。檢查是不是Multiple模式下點擊了空白區(qū)域。這個情況在擴展多選模式下也會出現(xiàn)點擊空白處會清空所有選中。實踐經(jīng)驗是排查這類問題先看事件觸發(fā)順序再看系統(tǒng)剪貼板干擾基本能解決90%的情況。6.2 Listbox內(nèi)容顯示不全或滾動失效如果你發(fā)現(xiàn)列表很長但只有前幾行能看到或者滾動條存在但拖動無效優(yōu)先檢查兩個地方height參數(shù)設(shè)得太大導(dǎo)致列表區(qū)域占據(jù)過多空間超出窗口范圍。窗口高度不夠時Listbox的可視區(qū)域被裁剪出現(xiàn)只有部分行可見但無法滾動的錯覺。滾動條沒有正確聯(lián)動。確認(rèn)yscrollcommand和command兩條綁定都寫全了缺了任何一條滾動條都只會變成裝飾品。還有一種情況是Listbox放在了grid里但沒有設(shè)置stickynsew或者沒有給所在行列配置grid_rowconfigure和grid_columnconfigure。這樣窗口拉伸時Listbox區(qū)域不會跟著拉伸內(nèi)容自然會被截斷。root.grid_rowconfigure(1, weight1) root.grid_columnconfigure(0, weight1)這兩行代碼配合stickynsew讓列表區(qū)域在窗口大小變化時自適應(yīng)填充是解決顯示不全的標(biāo)準(zhǔn)配置。6.3 列表項內(nèi)容重復(fù)或綁定數(shù)據(jù)未刷新在聯(lián)動場景中重復(fù)加載是最常見的bug來源。比如用戶反復(fù)切換省份城市列表里的項目越來越多因為每次切換都執(zhí)行了insert而沒有先delete。我建議在聯(lián)動刷新邏輯里養(yǎng)成固定的三段式習(xí)慣# 第一步清空 listbox.delete(0, tk.END) # 第二步加載 listbox.insert(tk.END, *new_items) # 第三步刷新狀態(tài) selected_var.set()三個步驟順序不能亂更不能漏。我見過有開發(fā)者圖省事把刪除放在條件分支里結(jié)果某條路徑下沒執(zhí)行刪除數(shù)據(jù)就越積越多列表越來越長最后界面卡死。6.4 窗口啟動后列表顯示黑塊或亂碼這個問題多出在字體配置和編碼上。黑塊通常是因為選了系統(tǒng)不支持的字體或者字體名拼寫錯誤導(dǎo)致Tkinter回退到默認(rèn)字體而默認(rèn)字體對中文支持不好。解決辦法用font(Microsoft YaHei, 11)這種明確支持中文的字體名稱??缙脚_開發(fā)時最好寫個函數(shù)根據(jù)操作系統(tǒng)選擇字體import sys def get_font(): if sys.platform win32: return (Microsoft YaHei, 11) elif sys.platform darwin: return (PingFang SC, 11) else: return (Noto Sans CJK SC, 11)亂碼問題除了字體外還可能是數(shù)據(jù)源編碼不對。從文件讀取列表數(shù)據(jù)時沒有以UTF-8解析會出現(xiàn)中文變成?±?o?這類亂碼這屬于數(shù)據(jù)層問題在數(shù)據(jù)加載時就該暴露不要拖到界面層才排查。6.5 常見問題速查表問題現(xiàn)象可能原因解決辦法curselection返回空點擊空白區(qū)域造成取消選中業(yè)務(wù)邏輯里判斷空并給出提示窗口內(nèi)列表只有部分可見height參數(shù)過大或layout權(quán)重缺失減小height值補sticky和probe配置滾動條拖動無效yscrollcommand或command未綁定檢查雙向綁定聯(lián)動后舊選中項殘留未先調(diào)用delete清空刷新前強制delete(0, END)中文顯示為方塊字體不支持中文指定中文字體雙擊不觸發(fā)事件綁定寫成了單擊事件使用Double-Button-1Linux下選中態(tài)丟失exportselection默認(rèn)值為True設(shè)為False窗口無法正常銷毀回調(diào)中未調(diào)用destroy在關(guān)閉處理中顯式調(diào)用destroy這張表我用了很久每次排查類似問題時掃一眼就能定位方向。建議你也為自己常用的控件整理這樣一張速查表能省下很多重復(fù)排查的時間。7. 一次完整的列表選擇窗口實現(xiàn)記錄7.1 目標(biāo)與需求描述最后分享一個完整的實際案例過程。需求是這樣的某內(nèi)部數(shù)據(jù)管理工具需要從多個數(shù)據(jù)庫環(huán)境中選擇一個進(jìn)行操作然后選擇該數(shù)據(jù)庫下的可用表最后對選中的表執(zhí)行備份操作。由于目標(biāo)環(huán)境經(jīng)常變化數(shù)據(jù)源不能寫死必須從配置文件動態(tài)加載。界面要求是左側(cè)顯示數(shù)據(jù)庫環(huán)境列表單選。中間顯示當(dāng)前環(huán)境下的數(shù)據(jù)表列表單選。右側(cè)顯示當(dāng)前選中表的元數(shù)據(jù)信息行數(shù)、大小、備注。底部是執(zhí)行備份和取消兩個按鈕。這個需求非常典型本質(zhì)上是兩級聯(lián)動 選中信息展示。7.2 代碼實現(xiàn)與關(guān)鍵注釋下面是關(guān)鍵代碼邏輯完整的窗口類我封裝成了一個函數(shù)塊輸出到界面上。import tkinter as tk from tkinter import ttk, messagebox import json class DbTableSelector: def __init__(self, root, config_path): self.root root self.root.title(數(shù)據(jù)表備份選擇器) self.root.geometry(680x420) self.config self.load_config(config_path) # 環(huán)境列表 self.env_list tk.Listbox(root, selectmodetk.SINGLE, height10, exportselectionFalse, font(Microsoft YaHei, 10)) self.env_list.grid(row0, column0, rowspan2, stickyns, padx(15, 5), pady15) self.env_list.bind(ListboxSelect, self.on_env_selected) # 數(shù)據(jù)表列表 self.table_list tk.Listbox(root, selectmodetk.SINGLE, height10, exportselectionFalse, font(Microsoft YaHei, 10)) self.table_list.grid(row0, column1, rowspan2, stickyns, padx5, pady15) self.table_list.bind(ListboxSelect, self.on_table_selected) # 元數(shù)據(jù)信息 self.meta_label tk.Label(root, text選中后顯示表信息, justifyleft, anchornw, font(Microsoft YaHei, 10), padx10, pady10, bg#F4F4F4, reliefgroove) self.meta_label.grid(row0, column2, stickynsew, padx5, pady15) # 狀態(tài)欄 self.status_var tk.StringVar(value就緒) self.status_label tk.Label(root, textvariableself.status_var, anchorw, font(Microsoft YaHei, 9)) self.status_label.grid(row2, column0, columnspan2, stickyew, padx15) # 按鈕區(qū)域 self.backup_btn tk.Button(root, text執(zhí)行備份, commandself.do_backup) self.backup_btn.grid(row2, column1, stickye, padx5) self.cancel_btn tk.Button(root, text取消, commandroot.destroy) self.cancel_btn.grid(row2, column2, stickye, padx(5, 15)) root.grid_rowconfigure(0, weight1) root.grid_columnconfigure(2, weight1) self.load_envs() def load_config(self, path): with open(path, r, encodingutf-8) as f: return json.load(f) def load_envs(self): envs list(self.config.get(environments, {}).keys()) self.env_list.delete(0, tk.END) self.env_list.insert(tk.END, *envs) if envs: self.env_list.selection_set(0) self.env_list.activate(0) self.on_env_selected(None) def on_env_selected(self, event): sel self.env_list.curselection() if not sel: return env_name self.env_list.get(sel[0]) tables self.config[environments][env_name].get(tables, []) self.table_list.delete(0, tk.END) self.table_list.insert(tk.END, *tables) self.meta_label.config(textf環(huán)境{env_name}\n表數(shù){len(tables)}\n請選擇具體的表) self.status_var.set(f已選擇環(huán)境{env_name}) def on_table_selected(self, event): sel self.table_list.curselection() if not sel: return table_name self.table_list.get(sel[0]) sel_env self.env_list.get(self.env_list.curselection()[0]) tables self.config[environments][sel_env][tables] meta tables.get(table_name, {}) rows meta.get(rows, 未知) size meta.get(size, 未知) remark meta.get(remark, 無) self.meta_label.config(textf表名{table_name}\n行數(shù){rows}\n大小{size}\n備注{remark}) self.status_var.set(f已選擇表{table_name}) def do_backup(self): env_sel self.env_list.curselection() table_sel self.table_list.curselection() if not env_sel or not table_sel: messagebox.showerror(錯誤, 請先選擇環(huán)境和數(shù)據(jù)表) return env self.env_list.get(env_sel[0]) table self.table_list.get(table_sel[0]) # 實際項目中在這里調(diào)用備份邏輯 messagebox.showinfo(備份, f已觸發(fā)備份環(huán)境 {env}表 {table}) self.status_var.set(f備份命令已下發(fā){env}/{table})這段代碼里有幾個細(xì)節(jié)值得說明。load_envs里的自動選中窗口啟動后默認(rèn)選中第一個環(huán)境并且立即觸發(fā)on_env_selected這樣用戶打開窗口看到的不是空白頁面而是第一個環(huán)境下的表列表。這種起始即有狀態(tài)的設(shè)計對提升體驗非常關(guān)鍵很多界面打開就是一片空白用戶要想半天才知道該點什么。on_env_selected(None)的調(diào)用方式手動觸發(fā)事件回調(diào)時沒有event參數(shù)傳None即可。事件綁定的回調(diào)函數(shù)要能容忍event為None這是一個小的健壯性設(shè)計。meta區(qū)域的實時信息展示選表后立刻從配置中查出表的元數(shù)據(jù)渲染到右側(cè)面板。這里的配置結(jié)構(gòu)是字典嵌套查詢邏輯就是正常的字典訪問不用額外建數(shù)據(jù)庫。7.3 運行效果與進(jìn)一步擴展運行后的界面邏輯是這樣的窗口啟動自動選中第一個環(huán)境并加載它的表列表用戶點擊環(huán)境切換時表列表同步更新用戶點擊表時右側(cè)元數(shù)據(jù)區(qū)域?qū)崟r刷新底部的備份按鈕觸發(fā)的操作會有消息框確認(rèn)。這個實現(xiàn)已經(jīng)可以嵌入到大部分內(nèi)部工具里。如果要進(jìn)一步擴展可以加一個搜索過濾框在表列表上方加一個Entry輸入關(guān)鍵字實時過濾表名。Tkinter里實現(xiàn)這個功能也很簡單核心邏輯是遍歷所有表名把不匹配的項隱藏或delete掉再重新insert。另一個擴展方向是讓選擇結(jié)果能追溯到主窗口??梢栽赿o_backup里把env和table寫入一個全局變量或者通過回調(diào)函數(shù)傳給主窗口的調(diào)用方實現(xiàn)真正的選擇窗口返回值。實際項目中我通常用回調(diào)函數(shù)的方式把選擇結(jié)果作為一個參數(shù)回傳這樣界面模塊和業(yè)務(wù)模塊的耦合度更低。8. 個人實踐經(jīng)驗與效率建議8.1 開發(fā)效率提升的幾條心得先說幾條我在做Tkinter列表選擇窗口時長期沉淀下來的經(jīng)驗。第一不要從空白窗口開始。先搭建一個通用骨架包含Listbox、滾動條、確定取消按鈕、狀態(tài)Label基本可以覆蓋80%的列表選擇場景。剩下的20%在骨架基礎(chǔ)上增刪即可。如果你經(jīng)常寫這類工具把這個骨架存成一個模板文件每次復(fù)制改名能省大量重復(fù)勞動。第二用配置文件或常量統(tǒng)一管理可選項而不是硬編碼在業(yè)務(wù)邏輯里。哪怕一開始只有三五項也建議從配置讀取。實際需求變化非??旖裉烊鍌€選項下個月可能就是三五十個硬編碼的結(jié)果就是到處找列表在哪改浪費時間還容易漏。第三保持事件處理函數(shù)職責(zé)單一。一個函數(shù)只做一件事update_cities只刷新城市列表update_preview只更新預(yù)覽do_backup只觸發(fā)備份。不要在一個函數(shù)里又刷新列表又更新狀態(tài)又調(diào)業(yè)務(wù)接口出了問題就很難排查。第四用日志輸出代替print調(diào)試。我習(xí)慣在關(guān)鍵節(jié)點加一行注釋和日志調(diào)用比如環(huán)境切換打印一行、表選中打印一行。這樣聯(lián)調(diào)時能快速定位是界面層的問題還是數(shù)據(jù)處理層的問題。8.2 常見反模式與規(guī)避策略有些寫法看著沒毛病實際用起來全蹩腳我列幾個高頻反模式。反模式一用time.sleep模擬等待。比如在按鈕回調(diào)里執(zhí)行業(yè)務(wù)邏輯前先sleep一下等界面刷新。這種做法會直接卡死整個Tkinter主循環(huán)界面假死連窗口都拖不動。正確做法是用root.after延時回調(diào)或者干脆不做延時直接執(zhí)行業(yè)務(wù)邏輯。反模式二大量使用全局變量傳遞選擇結(jié)果。比如用global selected_env保存用戶選項。單窗口小程序這么寫能跑但一旦窗口函數(shù)被復(fù)用全局變量互相覆蓋排查起來非常痛苦。推薦用類封裝狀態(tài)或者用tk.StringVar管理和傳遞。反模式三不校驗數(shù)據(jù)就直接用。從配置讀取數(shù)據(jù)后不檢查None和空列表就插入Listbox結(jié)果異常分支直接崩潰。養(yǎng)成取數(shù)據(jù) - 判斷空 - 刷新界面的習(xí)慣能避免很多隱性bug。反模式四只識別鼠標(biāo)點擊不支持鍵盤。對高頻使用的工具來說純鼠標(biāo)操作會嚴(yán)重影響效率。加上鍵盤方向鍵支持再配合快捷鍵綁定如回車確認(rèn)、Esc取消體驗提升立竿見影。8.3 有志深入再進(jìn)一步的方向如果列表選擇窗口的需求再復(fù)雜一步比如要支持搜索過濾、樹形結(jié)構(gòu)、多列展示Tkinter自帶的Listbox就不太夠用了。這時有兩個方向可以選用ttk.Treeview代替Listbox它支持多列、樹狀結(jié)構(gòu)、選中樣式自定義幾乎可以覆蓋Listbox所有功能。數(shù)據(jù)表選擇這類需求用Treeview做多列展示會更合適。轉(zhuǎn)向PyQt或PySide。功能更強大渲染更快但包體積和開發(fā)成本也上去了適合正式產(chǎn)品項目。我的建議是分清場景。在內(nèi)置工具、教學(xué)示例、自動化腳本里Tkinter的列表選擇窗口足夠應(yīng)付如果你在開發(fā)面向大量用戶的產(chǎn)品級桌面應(yīng)用還是盡早考慮組件更豐富的框架避免后續(xù)重構(gòu)。最后說一句我在實際項目里反復(fù)驗證過的體會列表選擇窗口最核心的價值不在展示選項這個表象而在于把用戶的意圖清晰、準(zhǔn)確地翻譯成程序能理解的數(shù)據(jù)。想清楚這一點UI怎么做都不會跑偏。用好Listbox的選中邏輯、聯(lián)動刷新和狀態(tài)反饋這三個關(guān)鍵點你寫出來的界面就已經(jīng)超過大多數(shù)半路出家的開發(fā)者的水平了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久侵犯人妻爽爽爽| 91精品伊人久久久大香线蕉91| 可能人人看人人摸| 99综合自拍| 操一对老熟妇爽上天视频| 国产日韩区| 破苞ⅩXXX性无码动漫无码| 亚91亚洲网| 97伊人网| 伊人五月天| 精品妇操一区二区三区| 亚洲性爱免费电影| 综合av影片| 亚洲天天自拍| 日韩激情啪啪| 大香交| 这里只有精品视频在线观看麻豆| 99re6国产精品99re在线| #NAME?| 国产亚洲禁久一区二区| 九九热九九| 日韩不卡av一二三| 超碰久在线天天做| 久久婷婷影院| 亚洲高清欧美总合| 中文字幕在线高清男人的天堂 | 中文字幕在线免费观看2| 国产伦精品一区二区三区在线观| 亚洲中亚日激情视频| 少妇人妻太紧太深av| 欧美另类色| 伊人麻豆传媒| 亚洲男人天堂2012| 一级性爱啪啪视频| 97在线日韩中文字幕| 欧美亚洲尤物久久| 综合熟妇一区二区三区| 色色五月婷婷| 亚洲影院成人| 综合久欧洲| 伦激情人妻另类人妻| 欧美72网页| 一级二级三级黑人无码| 亚洲综合骚逼| 激情AV| 熟妇女伦乱视频| 97久精品| 欧美大波激情xxxx| 亚洲91网站| 二男一女成人A片| 丰满人妻一区二区中文| 久久国产视频性吧| 成人麻豆av电影网站| 久久久久久91香蕉国产| 亚洲高清无码在线桃色| 国产高清视频无码在线| 欧美一区二区三区成人性生活| 国产熟女乱论| 亚洲狠| 97九色人妻| www.久久制服糖| 亚洲国产中文字幕| 久久黄黄| 日韩国产欧美伦理在线| 97资源站国产精品| 天堂在线一区二区| 自拍丝袜美腿人妻| 日本污ww视频网站| 久久人妻熟女一区二区| 青青色综合| 91人妻尻屄视频| 99999久久精| 伊人青青一区成人视频在线观看区| 人人操人人操人人人操| 精品无码少妇| 天天色怡春院| 99re这里只有精品中心播放| 久久这里是精品| 熟女露脸激情自拍视频| 嗯嗯啊啊操死我| 欧美第一页| 亚洲老司机123专区| 国产九九九九九九九九| 黑人综合网| 欧美日韩亚洲五月天婷婷| 亚洲欧美成人在线| 亚洲精品天堂久久A∨51成人漫| 亚洲色图片区| 日韩精品人妻中文字幕久久久| 精品无码久久久久久国产浪潮| 久久激情四射婷婷丁香五月天| 丰满少妇人妻久久久久久| 欧美日韩日产免费网站看| 久久精品电影在线| 动漫av中文| 亚洲精品天天影视综合网 | 夜夜春夜夜操| 曰本91情色| 99精品无码| 日本操逼二区| 日韩中文字幕视频| 亚洲久久久久| 理论久久婷婷网8| 久久爱超碰网| 超碰色中文| 丁香激情五月天| 欧美性巨大╳╳╳╳╳高跟鞋| 性色A∨91| 在线观看午夜婷婷久久久久清性观看| 97亚洲一区| 亚洲日韩成人性爱视频| 国产原创剧情在线丝袜| 午夜精品五区| 亚洲精美粉嫩嫩泬在线观看 | 91精品人妻一区二区三区蜜桃臀| 婷婷九月| 综合久久欧美| 亚洲最大无码中文字幕网站| 乱抡国产91| 一本色道久久综合精品婷婷| 蜜桃午夜视频一区二区 | 男人的天堂在线有码| 亚洲αv一区二区三区| 高清国产精品福利网站| 色色97爱| 性生活性生大爱77AV国产| 91丝袜美腿网站| 天天肏美女| 婷婷尹人大香蕉免费| 老司机射| 久久久久国产精品喷潮免费观看臀 | 国产一级不卡在线观看| 亚洲密乳AV| 一道α片欧美| 91三级理论片播放器| 自怕偷自怕亚洲精品| 成人免费性爱视视| 懂色aV一区二区天美传媒| 亚洲欧美洲综合| 欧美色图99| 超碰这里有精品| 久久久久国产| 丰满人妻一区二区中文| 熟妇高潮精品一区二区三区下载| 大乔未久88一区| 9999九九九久久久| 超碰综合97在线| 日本最新1区2区3区| 天天综合麻豆视频| 欧美日韩中文字幕人妻| 又粗又长又大国产不卡| 女同女同恋久久级三级| 少妇人妻好深太紧了vr91| 无码精品久久| 一类无码操逼视频| 91久久国外网| 久湿久久| 精品亚洲天堂| 日韩精品字幕| 国产人妖视频一区在线观看| 人人射人人操人人摸| 新婚人妻扶着粗大强行坐下| 97人人操人人摸人人爱| 六月婷激情福利天堂69| 国产精品。| 骚女高跟AV在线| 日本五区不卡| 国产深夜福利| 国产精品一区av在线| av天堂精品久久| 思思热在线cao| 自慰白浆在线观看| 久久久久久久久久久久久久9999| 狠综合网| 欧美91色| 女优大全 - 91n| 88xx成人精品视频| 欧美日韩操逼动图| 天天欧美色| 亚州情色j区| 99日精品欧美国产| 久久欧美1卡2卡3| 欧美 亚洲 91| 乱伦熟女论坛| 久操视频资源站公开| 草草影院在线视频| 天天摸夜夜操视频| 超碰九7| 欧美精品二区视频在线| 无色无码| 中文字幕久久精品一区| 好涩综合| 91麻豆一二三区| 俺去也婷婷| 97干在线看| 色五月天AV| 夜夜做夜夜爽精品视频| 草草草视频在线免费看| 日韩激情中文字幕有码| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 爱欲AV| 欧美与日韩97| 免费AV中文网在线观看| 久久久久9| 中文字幕精品丝袜| 1024精品在线| wwwcaobibi| 高树玛利亚无码流出| 欧美性爱伊人| 久久九七| 天天干天天舔| 丁香六月婷| 999熟女精品| 黄色免费网| 啊视频在线| 人妻人妻天天碰| 色噜噜狠狠色综无码久久合欧美| 青青青国产手线观看视频2| 亚洲AV无码成人精品久久| 啊嗯好大视频在线观看| 本道综合精品| www网站黄| 91色色综合| 五月丁香六月综合缴清无码| 亚洲人在线成线成人| 欧美大片一区二区三区| 婷婷去俺也去六月色| 99婷婷| 狠狠爱AV| 国产高清午夜成人在线观看| 国色天香av| 啊啊啊不要嗯嗯在线观看| 91被操| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲精品久久久久毛片A片拉屎 | 狠狠操天天干| 黑操B| 精品少妇一区二区三区| 嫩草影院在线观看精品| 97国产精品久久久久| 亚洲av无码国产精品字幕| 女优免费一区二区永久| 91精品国产91久久青草| 欧美乱色| 久久久96| 国产高清1234区| 一本久道久久综合狠狠爱一密臀精| 色99视频| 精品国产a∨一区天美传媒| 婷婷激情五月天小说网| 精品二区三四区五电影| 91久操| a啊啊啊啊啊啊啊啊一区二区| 无码乱人伦中文视频| 久久久国产精品亚洲精品| 国产高清无码一区三区二区| 色香网| 日韩不卡a级视频专区| 综合97久久| 黄色电影观看久久9| 色呦色呦色精品| 日韩欧美成人性爱在线| 青青青草伊人精品| 激情综合五| 久久久久99精品成人片蜜臀| 色婷婷成人综合| 无码137片内射在线影院| 人妻在线臀日韩| 成人免费看吃奶视频网站| 99色婷婷中文字幕乱色| 欧美成人一区二区三区在线播放| 久久伊人影院| 久久色一区| 69少妇一区二区| 青青草日韩免费观看高清在线| 日韩欧美中文日韩欧美色| 天天爱综合网| 啪啪91| 国产黄色影片在线观看| 91亚洲狠狠色| 无码99| 日韩高清黄片| 九九久久国产精品怡红院| 成人短视频在线观看| 超碰免费97| 国产1727欧美| 久操操| 国产欧美日本亚洲精品| 亚洲 欧美 综合 91| 99色在线视频| 日韩乱伦AⅤ| 亚洲黄色网址| 狠狠中文字幕| 嫩呦国产一区二区三区AV| 久9久9久9久9久9久9| 亚洲天堂中文字幕无码男同| www.久久最新地址| 一区二区高清视频| 97国产精品久久久久| 99久热| 国产精品无码av嫩草| 国产在线视视频有精品| 色网站导航大全| 日韩特一级久久| 啊啊啊不要好疼视频| 超碰国产精品久| 欲色综合| 欧美精品欧美精品系列| 国产AV天美| 精品久久久久av影院| 欧美黄页| 亚洲一区亚洲天堂| 五月天春色激情网| 九九色色| 久草免费福利在线播放| 少妇综合| 国产国产亚洲一二三久久| 亚洲最大的黄色电影网站。| 夜夜爽33333| 亚欧视频在线| 日本成a人v网站在线观看| 90后后入| 日本中文字幕熟妇| 91l欧美在线| 久久久精品国产亚洲伊人| 亚洲一区二区三区四区视频| 日韩免费av片高清无码| 日日摸日日碰夜夜爽视频| 超碰久久网| 人人污日韩一区二区| 色播五月丁香| 激情久久av一区av二区av| 亚洲精品国产无码高清| 91人妻最真实刺激绿帽| 日本久久女同性恋视频| 午夜超碰| 亚91网| 天天综合网合集91| 四季AV一区二区凹凸精品小说| 五月天综合网| 婷婷丁香久久| 99精品久久久久久久婷婷蜜桃| 99这里只有精品国产| 日本人妻最新在线中| 久久人妻熟女一区二区 | 亚洲国产成人精品久久久国产成人一区二区 | 国产精品交换一区二区| 亚洲高潮少妇| 五月天色色色| 色五月首页| 中文字幕亚洲在线一区| 日本www操操操| 加勒比在线视频一区二区三区 | 九九热精品| 涩涩五月天| 9色在线| 丁香五月天啪啪| 中文字幕性感少妇av| 天天操夜夜嗨| 国产三级电影免费观看| 国产成人精品日本视频| 亚洲女毛多水多21P| 国产69精品久久久久99尤物| 日本www操操操| 天天操天天舔| 五月婷婷啪啪| 色婷婷五月天| 久久久精久久久| 99爱久久视频频| 国产大片精久久久久久| 上床不卡网站| 超碰午夜| 九九久久国产精品怡红院| 人人妻人人爽一区二区三区| 97超碰欧美中文字幕| 91n欧美| 97超碰超碰| 男女啪啪网站免费视频| 国产精品不卡一区二区三区av| 可以免费看黄片的视频| 亚洲AV秘 精品久久老牛影视| 久草视频在线视频在线视频在线观看| 殴美在线AⅤ| 国产女生在线| 天天插天天插| 久久、1234| 日本精品久久久久久久| 后入综合久久| 日本在线观看网址| 国产尤物AV尤物在线观看不卡| 黄aaaaaaaaaaaaaaaaaa色网站| 婷婷综合五月| 欧美狠狠弄| 9 9无尺码天堂网| 精品玖九九久| 国产精品盗摄 偷窥盗摄| 日本免费专区| 亚州伊人色综台| 中 文字幕一区二区三四 五 区日 日 骚| 欧美18禁91| 激情综合网一盗摄| 亚洲国产成人综合碰碰三级经典| α√在线| 国产av青草| 午夜综合在线| 综合久久97| 黄色区免费观看中文字幕| 亚洲色啪| 九久久九精品视频| 另类老少妇| a'v在线资源| 377p欧洲日本亚洲大胆| 久久理论字幕视频| 97天天在线| 1240青青草一区二区三区视频天爱| 日本丝袜人妻内射| 91原创在线观看| av东京热男人的天堂| 91性片| 1024人妻熟女一区二区三区| 91在线视频免费中出| 九久久精品| 91人精品妻入口| 综合色色婷婷| 9精品久久| 人人妻人人玩人人澡人人爽| 亚洲人妻中文高清| 日韩av色图综合| 91狠狠综合网| 欧美色综合影院| 日本不卡二三区| 性色aV一区二区三区噜噜| 加勒比久久综合网高清| 69综合网| 久热精品在线| 天天色播亚洲综合网站| 天天看高清麻豆| 91亚州| 婷婷综合激情| 欧美啪啪天堂| 亚洲国产精品有声| 美女露胸露奶头| 999综合网| 久久曰曰| 女上位精品在线| 亚洲精品毛片在线观看| 免费农村成人少妇人妻Aa一区二区视频| 91亚洲最新在线| 亚洲精品日日夜夜52| 一本一首道人妻少妇免费久久| 欧美色网| 男人的天堂不卡一区二区| 天美传媒精品一区二区三区| 日韩人妻播放| 国产精品视频播放| 曰本人妻人人澡人人夹| 精品九九九九九九九| 日本熟妇浓毛hdsex| 五月激情天| 乱人乱色一区二区三区免费| aaa一级黄片| 亚欧美无遮挡| 超碰人人干| 校园春色美腿丝袜 | 91日韩国产欧美亚洲另类精盘州至城都 | 嗯啊抽插大香蕉网页| 欧美变态激情网| 黄片免费视频2019| 欧美aⅴ99久久黑人专区| 成年人网站在线免费观看| 欧美一区二区亚洲天堂| 熟妇色99| 久久久久13| 97综合国产| 日产狠狠干| 农村女一级毛卡片| 伊人影院中文字幕| 性色AV蜜色av色欲av| 一区二区精品更新提醒| 日韩免费三级黄片电影| 亚洲精品国产av天美传媒| 大学生口爆吞精| 亚洲美女30b| 国产69精品久久久久99尤物| 欧美激情一| 国产高潮AA片免费看| 久久精品区| 国产一区二区三区中文字幕| 久久国产精品一级二级三级| 看日韩美女二区三区免费操逼视频| 啊v在线观看视频| 观看免费区二区三区二| 俄罗斯一区二区视频在线观看| oumeizonghese,www| 人人操人人搞人人草| 欧美性少妇| 91大胆欧美| 另类图片综合| 综合av影片| 99re国产中文字幕| 中文字幕国产在线天堂| 手机久操欧美综合色码| 少妇淫妇久久久久久久| 国产性感在线观看| 久久久麻豆精品| 久久精品国产亚洲粉嫩| 欧美日韩淫加| 色婷婷香蕉| 久久久久9| 黄站在线免费观看| 国产超碰国产97| 3PAV乱伦视频| 91 国产丝袜在线播放-百度| 成人婷婷丁香| 久久 国产 无码| 哑洲在线| 亚洲综合另类欧美久久久| 精品人体无圣光凹凸| 亚洲欧洲激情| 人人操天天爽| 秋霞欧美性爰视频| 成人免费性爱视视| 密臀国产在线| 欧州激情视频在线一区二区| 欧美国产日韩清纯唯美| 国产精品人妻熟女aⅴ| 激情综合 婷婷五月 红杏| 欧美综合第一| 综合婷婷| av在线播放国产一区| 亚洲a色| 久操网在线| av天天在线观看| 天天看天天在线精品| 蜜臀久久99精品久久久久久酒店 | 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 91精品婷婷国产综合久久| 亚洲伊人久久精品狠狠在线| a在线视频免费观看| 性饥渴少妇av无码毛片| 97视频在线观看免费高清| 欧美激情亚洲情色| 亚洲网自拍| 日本日皮视频逼| 一类av片在线看| 97精| 亚洲色电影在线| 肉丝中文无码高清| 欧美91网站| 91天美传媒精品| 婷婷亚洲综合| 免费看A片毛毛片在线播| 欧美伊人久久综合网| 操碰97| 搡老女人老91二区| 亚州欧美在线| 国内精品久9| 国产后入内射| 天天操天天7| 99色婷婷中文字幕乱色| 超碰国产情侣自拍网| 久久草草欧美精品| 五月天开心网| 夂久色| 九九RE视频在线精品| 国产亚洲精品美女久久久m| 一级@啪啪视频| 日本韩高清无砖码22o| 欧美色图色综合| 久久视频少妇美女| 9999九九九久久久| 色偷综合| 欧美色图片欧美色图| 91美女高潮| 蜜臀在线看片| 狠久久| 色天天野狼综合社区| 欧美黑人168页欧美黑人167| 久久精品无码熟妇一区二区三区视频导航| 97超碰国产亚洲精品| 国产精品大屁股999| 欧美性视频二区三区| 91天美传媒精品| 亚洲色性情三级| 超碰夫妻97| 九九九九九九九九九五码| 精品免费国产二区三区 | 十八禁网站在线| 国产欧美日韩女同性恋ww喷水精品 | 91女日逼| 韩国三级色呦呦| 日本一区二区中文字幕久久| 日本孕妇一区二区视频操逼免费看| 久久久精精精| 亚洲男人天堂网| 成人午夜高潮av猛片| 飘花国产午夜精品不卡| 看免费一级在线播放毛片| 男女做爰猛烈动高潮A片免费应用| 欧美性爱精品七区| 免费亚洲黄色视频在线观看| 深田咏美亚洲精品福利社| 99色热| 国模精品一区二区三区苹果色戒| 一区二区偷拍拍视频| 97爱欧美| 天天操天天日天天干| 在线观看啊啊啊啊啊| 91视频在线观看18| 欧美日韩性爱电影在线| 亚洲成人无码影院| 99在线免费视频| 按摩中文字幕| 中文字幕精品专区搜索结果91| 欧美97免费| 91亚州| 日韩无码a片| 中文字幕在线高清男人的天堂| 久久99黄色卞西瓜| 中文字幕超碰CAO| 亚洲性感丝袜诱惑在线观看| 男人天堂2030| 国产大陆天天艹| www.99色| 成人精品视频| 午夜一区| 免费观看国产小粉嫩喷水精品午| 91精品大奶人妻| 厕所偷拍在线| 婷婷九月丁香| 蜜臀无码视频在线观看| 亚洲三区视频| 99超碰色| 日本高清一本二本免费不卡| 国产中出内射一区二区| 色呦呦呦在线观看视频| 综合色色网| 亚洲综合码| 欧美少妇高潮| 欧洲综合无码| 五月激情影院| 激情小说亚洲图片| 超碰色综合| 黄色性爱网网| 午夜性| 欧美se综合| 黄色片A级一区二区三区| 91九色精品熟女内射| 夜夜国产一区| 97超碰色色| 伊人网综合在线视频| 91校园春色长篇| 久久久久深夜无码| 久久久久久久伊人精品| 成人情色一区二区| 亚洲激情深爱文学小说网站| 亚洲色图尤物视频| 狠狠综合网| 试看60秒| 伊人精品久久网站| 日韩美一区| 亚春色色| 黄色av片三级三级三级免费看| 91扒丝袜综合在线| 99999亚洲| 国产热RE99久久6国产精品首| 欧洲精品人妻| 国内偷自视频区视频综合| 男人天堂.AB| 天天干夜夜鈤| 六月激情婷婷| 蜜臀一二三区| 久久国内| 97超碰中文| 日本一级特级毛片视频| 人人爱人人操人人性| 操一区| 日韩日本欧美在线观看| 丁香五月天婷婷姐| 人人妻人人爱人人玩| 91啪啪视频| 日日爽熟女| 男女真人网18| 久久久久久久久国产| 人妻人人做人人澡人人爽欧美一区| 久操操| 操B视频日韩无码| 国产免费大片| 麻豆天美91| 爽爽淫人网| 91操熟女视频| 色99在线| 超碰天天去日穴| 五月色网| 97网色| 青青草天天亲夜夜操网| 91丝袜美腿片| 久久久国产亚洲精品系列| 精品久久久不卡一区二区| 国产对白刺激视频| 亚洲 综合 第一页| 91欧洲入口| 亚洲最大无码中文字幕网站| 美女十八禁| 开心激情婷婷| 久久精品| 日本不卡二三区| 在线国产福利网址导航| 综合天天网| 欧美视频边做饭边橾| 成人区人妻精品一| 婷婷六月天| 91视频精品| 在线一区| 超碰人人干| 美女久久久| 啊啊啊97视频| 在线观看日韩av不卡| 夜夜夜夜久久久久| 午夜情侣自拍网站| 一级性爱视频免费在线| 亚洲欧美日韩国产丝袜自拍中文| 午夜欧美女人操逼| 色妇综合网| 丁香五月综合| 人人操人人爽人人操人人| 青青草乱入乱欲视频在线观看| 美女国产一区二区久久 | 欧美后入式| 99爱视频| 日本人妻最新在线中| 97在线观看免费视频l| 天天色综亚洲91污| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 国产第25页在线观看| 熟妇女伦乱视频| 亚欧中文字幕在线视频| 日韩性爱电影一区| 天美91| 亚洲清纯唯美| 99国产人成精品| 视频国产欧美在线播放| 欧美第二页午夜| 丰满人妻-区二区三区免费| 欧美日韩插逼视频| 欧美黑人168页欧美黑人167| 天天操av懂色| 欧美大香蕉专区网| 久久久久九九九九| 蜜桃精品视频一区二区三区| 中文字幕老熟妇黄色视频| 无码精品久久久天天影视| 一区二区视频在看| 亚洲91网站| 大鸡巴久久久| 91狼人| 欧美亚洲第一页| 国产精品乱码久久久| 91爱做| 91精品国产91久久青草| 在线无码操| 人人操人人精品影片| 超AV色女| 二区熟妇韩日| 亚州色站 日韩电影| 大香蕉伊在线久草麻豆天堂故事| 色女综合| 超碰这里只有精品| 91影视亚洲| 亚春色色| 欧美懂色综合网| 91这里只有精品| 2021国产成人精品久久| 亚洲成人ab| 99999re| 91精品老女人| 囯产精品久久久久久久久久梁医生| 亚洲 无码 偷拍| 少妇一区二区三区高速| 成人五月天丁香激情综合| 91中文字幕| 中国一级操逼视频| 玖玖爱免费观看视频| 久久综合激情| 超碰人人超在线观看| 欧美性爱五月天| 伊人久久国产免费观看视频| 人人搡人人肉久久精品| 九九九九亚洲| 免费看片黄| 久久精品高清AV| 天天爽天天| 欧美久久婷婷| 蜜臀99久久精品久久久久久| 高清国产精品福利网站| 大香蕉久| 久久精品小视频| 操B久久| 欧洲站一级二级三级h| 性色aV一区二区三区噜噜| 色哟哟AⅤ| 免费看日产一区二区三区| 青青草吊丝| 999熟女精品| 欧美天天综合网| 亚洲无码?第一页| 国产丝袜视频| 91精品免费| 色欧洲| 亚洲成人一区二区精品| 欧美1727免费观看视频| 精品999日本| 久久久久久久97| 韩国成人精品久久久免费看| 91蜜臀熟女| 色香综合天天影视综合 | 超碰97资源大奶| 东京热伊久| 密乳AV免费观看| 草草影院在线视频| 欧亚 另类 久| 国产成人亚洲精品无码古代早漏男| 丁香婷婷色五月| 成熟熟女国产精品一区二区| 91一区二区三区蜜桃| 精品久久99| 亚洲区限制级| 成 人 A V免费视频在线观看| 综合一区中亚洲国产成人综合精品 | 亚洲色图加勒比| 无码人妻一区二区三区四区老鸭窝| 欧美精品一区二区少妇免费A片| 亚洲综合另类| 色69大色97香蕉| 久久av一级av少妇av高潮 | 97精品视频网站| 国产丝袜欧美在线视频| 91xingse| 91网站18禁| 成片免费播放| AV天堂因数| 欧亚免费视频| 91老熟女91老女人| 国产综合日韩伦理| 久草精品热视| 97久久综合网| 激情久久av一区av二区av| 综合色久欲| av网站国产主播在线| 五月久久HDAV| 尤物视频偷拍免费| caoni国产亚洲av| 91日产欧美| 欧美精品一区二区少妇免费A片| 国产婷婷综合在线观看| 日韩AV电影网站| 欧美天天综合网| 成人影 天天操 亚洲| 久久啊啊| 男人兔费天堂| 97在线视频免费看| 密桃99999| 久久久久九九九| 九九人人操| 粉嫩AV一区二区夜夜| 九九久久精品| WWW.操逼.COM| 午夜天堂精品久久| 久久黄片国产一区二区| 九九九九九精品十六| 操逼国产免费| 成人一级二级| 伊人网av| 日本加勒比无码专区| 91是天天| 日韩 欧美 视频 在线 一区| 无码九九| 一区二区三区激情在线观看| 蜜臀久久99精品久久久久久婷婷| 91N欧美| 18禁在线视频| 免费精品AB| 色欧美天天| 久久中文字幕不卡人妻| 日日夜夜模| 99久久久无码国产精品性男| 最新制服中文第一页| 国产精品交换一区二区| 凹凸视频在线一区二区| 国产久久日| 亚洲精品第一| 搡老女人老91二区| 超碰97网址| 精品欧美А∨无码黑人大荫蒂| 97超碰天天| AV无码久久久精品| 一本色道久久综合亚洲二区三区| 2010男人的天堂| 国产品精品自在在线午夜免费 | 啊啊啊啊好疼| 成人热久久精品| 高清在线偷拍自拍视频| a'v在线资源| 极品一区二区三区免费| 91女人的网站| 懂色AV蜜臀无码精品APP | 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 亚洲小电影免费涩涩成人在线高清| 麻豆区久久久久亚| 97久久精品国产| 一二三四区电影| 亚洲天堂另类小说男人| 欧洲熟妇xxXx欧美老妇裸体| 免费a级毛片av无码久久精品中文字幕| 久久精品日韩专区免费观看| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 天天干嫩逼网| 亚洲天堂美臀在线| 日本一区二区电影网站| 5278欧美一区二区三区| 91在线超高颜值国产| 国产97在线 | 亚洲| 亚欧洲一区二区视频| 香蕉在线一区二区三区| 欧美性爱一级操| 亚洲人成网站7777| 精人妻一区二区三区| 夜夜 中文视频rt| 天天色悠悠激情| 男人的天堂亚洲| 91呆哥人妻| 国产91乱伦| av绯色| 2019精品国产无码成人| 92久久| 亚洲,欧美,综合网| 久久精品国产久精国产| 久久亚洲天天做| 91欧美长吊| 国产最新AV| 91黑丝露脚| 99这里只有精品| 亚洲成人网站在线观看| 国产亚洲色婷婷久久99精品91| 日韩欧美大力操| 国产精品嫩草影院午夜两性 | 久久综合18p| 天无日色综合| 欧美精品另类人妖xxxx| 日韩一级二级| 婷婷综合视频| Julia在线播放亚洲久久| 人妻AV在线| 欧美日韩国产黄色片| 家庭乱伦性爱av| 久久只有精品| 色色97爱| 91狠狠综| 大学生美女口爆| 一个色导综合| 很黄很色的视频在线观看| 国产精品视频自拍在线| 亚洲精品人妻在线| 日本一区二区做爱的视频| 国产 亚洲 丝袜 制服| 国产三级中文有码在线视频| 97中文字幕一区| 欧美第一页| 97色欧洲| 国语av狠狠色丁香婷婷综合激情| 丰满人妻一区二区三区| 伊人热综合| 日韩乱中文 | 开心五月婷婷| 97色冈| 超碰 av 女人天堂| 日本精品久久久久久久| 久久久精品久久| 久久成人东京热人妻| 日比av无码| 粉嫩av平台| 美國A片| 91在线色综合| 色欲人妻一区二区在线| 久久超碰av在线| 97欧美视频| 思思热久久成人| 国产精品老师| 美女人妻色网站| 激情四射五月天| 东北熟女91| 久久无码成人| 国产欧美日韩一区二区三区| 激情五月天社区| 国产av高清版| 精品女同一区| TS人妖另类精品视频系列| 操高情无码| www.狠狠| 性性欧美| 亚洲国产丝袜熟女av| 亚洲制服aⅴ中文字幕| 色噜噜婷婷| 97精品97久久| 九九碰九九爱97超| 一起草精品人妻| 欧洲射精91| 熟妇人妻一二三区免费| 2018天天干在线视频| 亚洲 日本 一 二 三| 热热色色综合| 蜜桃午夜视频一区二区| 国产精品福利资源在线尤物| 久久99视频| 欧美国产有色电影| 欧美不卡五十路| 日韩一级欧美一级在线观看| 婷婷三区| 99热这里只有精品18| 亚洲AV秘 精品久久老牛影视| 99久久无色码| 亚洲综合色图欧美| 先锋激情∨在线视频播放| Av色五月| 日韩精品一区,二区 九九...老司机| 国产精品ww久久| 亚洲综合激情五月久久| 91欧美综合在线| 在线有码中文字幕| 日本高清电影欧美色图| 欧美伦乱爱| 91久久久亚洲| 爱爱动态120秒| 97亚洲色图| 欧美午夜一区二区三区| 91成人国产综合久久精品蜜月| 青娱乐啪啪视频| 国产免费一区在线观看| 黄色一区三区| 精品无码不卡视频| 天天舔九色婷婷| 国产欧美日韩在线观看麻豆传媒公司 | 求求你操操我| 色色九区| 天天影视网综合少妇| 美女好片色日本| 大伊香蕉在线视频免费| 天堂射| 男人的天堂 在线一区| 91中文在线| 欧美自拍网| 日本免费一级AAA大片器| 久久伊人网视频一区二区三区| 夜夜嗨一区| 中字乱伦AV| 亚洲少妇激情一区二区三区| av天堂手机版追回| 懂色av中文字幕一区二区三区天美| 十八岁啪啪视频免费看| 色综合99999| 手机在线视频国内精品| 日本精品九九九| 久久久久久日韩| 天天干人妻| 九月丁香综合网| 久都青青视频| 久综合国内精品自在自线| 老汉网| 黄片免费看的| 941超碰| 丁香五月婷婷基地| 97综合久久| 中文字幕在线高清男人的天堂| 天美麻豆一区二区三区| 欧美成人精品A片免费一区99| 好吊色综合| 国产天天骚| 天堂俺去俺来也www久久婷婷| 小草av不卡亚洲二区 | 国产在线精品电影观看| 人人操人人干网页| 九99久久| 亚洲国男人的天堂| 青青青青操国内视频在线| 91女神在线视频| 国产野战露脸在线播放| 大茄子熟女AV导航| 96AV精品| 丰满少妇乱子伦精品无| 国语精品对白| 亚洲精品色| 亚洲第一黄色av网站| 人妻久久| 麻豆天美传媒在线视频天堂| 欧美性爱日韩高清| 亚洲骚男同com| 国模一区二区三区| 精品亚洲黄色片 国产精品导航一区二区| 蜜桃狠狠色伊人亚洲综合 | 男人的天堂色偷偷青青草视频婷婷网| 艹精品| 青青草一区二区高清无码视频| 800zy一区二区| 国产AV毛片| 久久久久久久97| 熟女网站最新| 蜜臀久久99精品久久久久久久久| 涩综合导航| 嗯嗯不要视频| 精品无码人妻一区二区免费蜜桃| 国产成人精品日本亚洲语言| 色牛aV| 91美女高潮| 久偷拍| 久久人妻精品| 亚洲 欧美 手机在线观看| 亚洲国产另类在线中文| 欧美综色欧| 超碰99热中文字幕| 美女诱惑久久| 骚熟女吞| 亚洲色性情三级| 色丁香五月婷婷| 亚洲无码一区二区三区三州| 在线播放成人高清免费视频| 亚洲资源吧| 国产精品熟妇一区二区三| 3P乱轮视频| 一本色道久久天天射天天干| 超碰97男女| 全国男人天堂网| 啊啊啊啊啊啊啊啊要喷了| 九九亚洲精品| 日韩精品三区四区| 国产美女高潮叫床视频| 亚洲AV成人无码一二三久久| 免费A片三p视频| 欧美一二级| 97色涩| 成人久久无码www| 欧美性暴力猛交XXXX| 爱爱动态120秒| 95精品在线| 操一区| 中日亚韩免费视频| 免费观看成人www精品视频| 色香综合| 性交一区二区在线播放| 亚洲高清内射| 91色女| 久久一区二区加油站| 91在线免费观看处女| AV一二区| 午夜久久一区二区无码中出| 91啪9色| 欧美精品成人亚洲| 色综合尤物| 色色色色网站| 五月丁香影视| 久久综合五月天|