色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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擴(kuò)展多選支持Shift連選、Ctrl加選更符合常見的文件選擇習(xí)慣。我在業(yè)務(wù)里用SINGLE和EXTENDED最多。像選擇一個環(huán)境配置這種強(qiáng)互斥場景用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ù)量上了幾千條強(qiáng)烈建議用第二種方式。清空列表用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用戶在同一臺機(jī)器上點擊其他輸入框列表的選中狀態(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ā)布新機(jī)器都從配置文件讀取。它的界面構(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)變了。這種解耦如果從一開始就堅持做后面擴(kuò)展會非常順暢。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ā)時機(jī)。如果在ListboxSelect事件綁定的函數(shù)里立即可用但在按鈕回調(diào)里為空說明用戶根本沒選中任何項而不是程序出錯。用狀態(tài)Label顯示當(dāng)前選擇先確認(rèn)用戶操作是否真的選中了。檢查是否用了錯誤的綁定事件。比如綁定成了Button-1鼠標(biāo)左鍵按下而不是ListboxSelect鼠標(biāo)按下瞬間curselection()可能還沒有更新拿到空值是正常的。建議統(tǒng)一使用虛擬事件ListboxSelect。檢查是不是Multiple模式下點擊了空白區(qū)域。這個情況在擴(kuò)展多選模式下也會出現(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值補(bǔ)sticky和probe配置滾動條拖動無效yscrollcommand或command未綁定檢查雙向綁定聯(lián)動后舊選中項殘留未先調(diào)用delete清空刷新前強(qiáng)制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)一步擴(kuò)展運行后的界面邏輯是這樣的窗口啟動自動選中第一個環(huán)境并加載它的表列表用戶點擊環(huán)境切換時表列表同步更新用戶點擊表時右側(cè)元數(shù)據(jù)區(qū)域?qū)崟r刷新底部的備份按鈕觸發(fā)的操作會有消息框確認(rèn)。這個實現(xiàn)已經(jīng)可以嵌入到大部分內(nèi)部工具里。如果要進(jìn)一步擴(kuò)展可以加一個搜索過濾框在表列表上方加一個Entry輸入關(guān)鍵字實時過濾表名。Tkinter里實現(xiàn)這個功能也很簡單核心邏輯是遍歷所有表名把不匹配的項隱藏或delete掉再重新insert。另一個擴(kuò)展方向是讓選擇結(jié)果能追溯到主窗口。可以在do_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。功能更強(qiáng)大渲染更快但包體積和開發(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
返回資訊列表
天天综合精品| 99精彩视频| 国产精品黑人一区二区三区| 综合 亚洲 欧美| 啊啊啊啊网站| 亚洲图片激情综合另类| 国产中文字幕曰本毛片| 五月婷婷色| 91色黑人少妇| 欧美色图在线视频少妇| 97中文字幕九区| 91综合色噜噜| 亚洲激情网一二三四区| 亚洲伊人久久综合97| 91久久久久| 婷婷91| 亚洲色久| 粉嫩av一区二区三区天美传媒| A片A5445444| 快灬快灬 一下爽蜜桃在线观看 | 91爱看| 玖草在线视频| 人妻少妇久久中文字幕一区二区 麻豆| 九九九久久久| 久久AV无码网址| 久久国产精品,久久国产| 无码九九| 中国女人内射6XXXXX| 久久怡红院| 视频在线观看青青99国产| 国产强奸AV在线| 这里只有精品视频| 人人九九精| 日韩A优精品在线观看| 日本女厕偷拍| 日韩性爱一级片| 国产精品白虎| 看日韩黄片| 欧洲中文字幕| 免费一级性爱久久| 91激情网| 日va操| 尤物av网站| 丁香五月婷婷啪啪| 欧美色色人| 亚洲国内精品成人不卡| 久久av一级av少妇av高潮| 精品国产乱码久久久| 99精品久久| 99色婷婷中文字幕乱色| 98精品国产乱码久久久久久| 日日日色色色色色| 男人久久精品| 免费看片黄| AV天天在线观看| 99re视频在线播放青草| 久久婷婷热| 女生久久网| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 天天天天操| 国内一级精品| 91美女视频在线| 国产成年免费大片黄在线观看| 亚洲少妇激情视频| 亚洲乱熟女一区二区三区大香蕉| 欧中美三级一区二区三区| 男人亚洲91首页在线| 色在线综合| 天美传媒精品久久视频| 三级片大波波| 97人人草| 91成人久久 | 亚洲一区日韩| 色在线69堂| 日本狂喷奶水在线播放212| 久久久久久亚洲中文| 欧洲精品区| 麻豆久久久久久久久丝袜| 99热综合| 九九热精品在线| 亚洲熟女乱熟乱熟妇综合网二区| 中文字幕一区二区三区字幕| 天天日日日射| 观看免费区二区三区二| 97啪啪| 欧美强奸乱| 亚洲精品久| 久久久婷婷婷| h无码动漫在线观看| 国产熟女无套内射| 国产乱码久久久| oumeisetu综合| 日本岛国黄色网址| 偷窥自拍A片| 亚洲国产一区二区日韩专区| av毛片aaaaa免费看| 超碰91在线| 亚洲人综合19| 中文字幕乱亚洲美女精品一区| 俺也射| 桃色人妻在线视频| 亚洲色图 综合| 啊啊啊啊啊在线视频| 久热伊人99re| 乱日视频| 中文有码第五页| a网站免费观看| 日韩一级欧美一级国产一级台湾| 无码人妻一区二区三区免费九色| 久久久555| 久久啊啊啊| 91美女视频直播| 天天综合站| 一卡二卡三卡| 欧美综合综合| 精品人妻一区二区三区在线视频不卡| 精精品人妻一区二区三区| 夜夜性| 国产熟女无套内射| 热99这里有精品综合久久| 久久97精品久久久久久久不卡| 大香蕉日韩| 人妻三级在线中文字幕| 日本不卡高清视频| 伊人综合色网| 狠狠2050在线观看| 日日爱99| 亚洲国产91精品一区二区久久| 久久久久人妻二区精品叶可怜| 麻豆视频国产一区二区| 日韩不卡毛片Av免费高清| 国产美女mm131爽爽爽爽| 国产女生在线| 婷婷四五区| 青春草A| 青青草中日韩在线| 伊人骚琪琪亚洲天堂网站| 国产强奸无码乱伦| 免费一级毛片在线视频观看| 乱日视频| 婷婷九月国产| 欧美色图电影| 少妇高潮特黄A片| 丰满的三级少妇欧美久久久| 久久视网78| 欧美色道啊| 九九九热| 欧美视频中文字幕区| 欧美78p| 美日韩在线不卡人妻| 久久亚洲一区女同性恋中文字幕| 日韩 国产 欧美自拍| 国产日韩手机视频在线| 欧美成人性爱视频大全| 欧美有码亚洲中文字幕一区二区三区四区| 美女91av| 日本精品一级二级三级| 久热这里| 久久久一区二区| 91五十路| 日本亚洲熟女视频| 屌色在线97视频| 精品大全99999| 久久夜夜| 日本精品成人无码| 欧美丝袜亚洲| 国产A v无码专区| 91 在线亚洲| 亚洲欧美天| 四虎国产精品永久在线囯在线| 看日韩操逼| 欧美日韩亚洲高清不卡一区二区三区| 中文字幕一区二区三区四五区| 欧美色图欧美| 久久婷婷一区二| 亚洲少妇免费视频\| 色y情视频免费看| 中文字幕片| 欧美亚洲首页| 操人无码| 中文字幕福利视频一区二区三区在线观看| 亚洲精品影视老司机| 日韩美女久久一区二区三区| 伦理第一页| 国产福利影视| 91蜜桃传媒精品久久久一区二区| 国产成人免费观看在线视频 | 久久久噜噜噜久久久| 久久精品国产97欧美精品亚洲 | 精品国产乱码久久久久久久久久毛片| 免费在线黄片视频| 91美女国产在线| 日本日逼高清| 呦女网站| 久精品无码av一区二免费国产在线观看| 69综合网| 国模无码人体一区二区三| 麻豆天美国美国产| 少妇久久久| 射 色综合| 欧美日韩国产一区二区小黄片大全| 国产欧美精选自拍一区| 欧美性爱网97| 色色色99| 大香蕉伊人75| 一区二区三区在线资源| 国产精品人妻免费精品| 欧美黄色图片| 五月丁香社区婷婷日韩欧美精品影院 | 国产区日韩区在线观看| 97色97好| 色婷婷久久| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 天天日美女的B| 欧美不卡二区| 97人人夜| 久久一区无码| 伦激情人妻另类人妻| 久久久久久中文版| 精品亚洲黄色片 国产精品导航一区二区| 色大香蕉97N| 国产精选三级在线观看| 日本欧美不卡| 99热在线不卡| 亚洲一区中文字幕一区| 国产无码精品成人| 免费99精品国产自在在线| 色官网在线| 国产精品乱码久久| 粉嫩AV输入| 91九色首页| 成·人免费午夜在线观看| 大香蕉综合久久| 一区二区娱乐网站| 伊人网免费视频| 欧美极品色| 激情99| 无码一区二区精品视频久久久春药 | 三级特黄60分钟播放| 操淫穴亚洲五月丁香| 一级免费精品| 久久亚洲AV成人精品无码| 91天堂丝袜美腿| 色婷婷aV一区二区三区麻豆综合| 日本激情免费大片| 精品人妻一区二区三区四区不卡在| 九月AV| 白嫩国模丰满一二三区| 亚洲无 码A片在线观看麻豆| 亚洲日本大香蕉1| 蜜色网色哟哟| 欧美性爱精品一区二区| 天天夜躁日日躁狠狠2002| 日本性一区| 四虎AV无码| 免费综合亚洲中文| 亚洲精品国产无码高清| 搡老熟女免费视频| TS人妖另类精品视频系列| 中文欧丝袜诱惑| 77777亚洲蜜臀精品久久综合蜜臀| 国产黄色 A 片免费看| 九七超碰| 97欧美综合网| 国产精品3| 99re9这里只有精品| 亚洲天堂99| 国产精品视频麻豆入口| 三男一女不戴套的A片| 蜜臀Av一区二区三区| 精品九九淫乱男| 久久久久久久久九九久孕交| 亚洲综合春色| 99国产精品人妻人伦| 精品国产久热在线观看| 国产精品69人妻无码久久久| 日韩亚洲国产视频| 亚洲色 国产 欧美 日韩| 亚洲春色一区二区三区| 男人的天堂2019| 国产AV中文| 久久久久深夜无码| 9999久久久久| 久久高清无码夜夜操| 99re69综合| 东京太热久久久| 青青草视频久久| 亚洲第一页色| 国产欧美日韩在线观看麻豆传媒公司| 六月婷婷五月丁香| 色综合美国| 亚洲丝袜色| 97人人干| 久久欧美按摩999| 玖色AV| 荡小穴在线观看| 天综合网| 欧美亚洲20p| 青青草视频在线观看一区二区| 艳美熟妇先锋一二三区| 搡老女人老妇女老妇老熟女怎么读| 五月天激情小说| 偷拍 精品另类 凸凹了四区| 久久曰曰| 欧美日韩天堂| 国外91| 干妹子| 中文有码9| 色吊丝 日日骚 清纯唯美| 日本高清有码网址视频| 色99视频| yazhousetuoumei| 密臀AV在线| 91碰碰| 伊人九九九| 9999久久久| 亚洲精品成人动漫在线| 日韩人妻 中文字幕| 强奸乱伦αv片| 五月丁香色色网| 国产怡红院| 日韩精品电影| 欧美se综合| 久久欲| 偷拍自拍在线视频观看| 屌逼麻豆| 欧美天堂第二区| 中文字幕一区二区无码成人| PMv在线观看| 在线免费观看日韩一区| 久久九色| 欧美日韩亚洲五月天婷婷| 素人伊尹大香蕉免费下载视频| 亚洲文学偷乱拍啪啪啪啪| 国产老太乱伦一区| 亚洲精品97| 看免费一级在线播放毛片| 欧美 亚洲| 乱码人妻一区二区三区| 91女色| 一级AV性爱| www.zbzhongsen.com| www.av不卡中文字幕| 91超碰碰在线| 日本精品一级二级三级| 亚洲三区视频| 在线毛片片免费观看| 伊人影院综合是一个与深夜成人在线| 久久黄黄| 午夜视频久久久| 青娱乐二区免费| 少妇滛荡视频| 福利一级版子| 十八禁啪啪视频| 猛猛干| 91女在线观看| 国偷自 一区| 日本影视久久免费| 久久色情| 超碰午夜| 八戒无码国产午夜福利| 欧美78p| 日本2020一区二区| 久久亚洲AV成人精品无码| 欧洲综合视频| 欧美亚洲今日在线| 婷婷色在线| 人妻少妇久久| 99久久精品无码一区二区| 日韩人妻网站| 天天做天天爱夜夜爽毛片试看| 丁香婷婷大香蕉| 国产诱惑| 日韩欧美俄罗斯A片| 欧美 传媒 麻豆 日韩 偷拍| 日本韩国国产精品一区| 免费看污网站| 国产资源中文字幕在线| 旡码电影特区| 欧美性xxxxx狂欢| 国产原创自拍| 中文字幕在线免费观看| 色色无码| 国产97视频| 国产999精品久久久久久| 大逼色网站| 精品亚州18| 农村女一级毛卡片| 欧美在线官网| 欧美极品美女aaaaaa级黄片| 久久免费看高潮毛片韩国| 久操视频在线观看| 欲色影视综合吧| 亚洲黄片免费在线播放| 97超久碰| 日韩欧美成人综合在线| 国产精品午夜福利视频| 嫖老熟女A片一二三区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 欧美人与动性人交a| 久久手机视直播| 精品国产av一区二区三区四区入口| 日本不卡高清免v欧美日韩在线观看| 欲香欲色| 天天天天天天天天综合| 日本Xx性爱| 午夜操一视频一区| 丝袜制服字幕在线| 日韩性爱人人爱人人操| 日本幼女18+| 亚洲国产欧美日韩人妻日中文| 色姑娘综合网| 久久久久9| 国产亚州高清国产拍精| 亚洲熟女综合一区二区| 怡红院怡春院| 人人操人人摸人| 嗯嗯不要视频| 丁香婷婷激情五月天无毒不卡| 国产成年免费大片黄在线观看| 中文日韩欧美熟| 丁香五月天堂网| 国产精品久久久吖| 爱丝福利| julia在线观看久久| 日韩欧美tv一区二区在线观看| 中文字幕国产| 青青草日本中文字幕| www…国产操逼| 乱伦熟女论坛| 9九九国产| 好淫网一二三视区| 大香蕉一线视频| 起碰97| 精彩久久中文| 一区麻豆 高清中文字幕| 精品国产乱码久久久久久口爆网站| 青娱乐黄色录像| 330Dv国产女人终合视频极品人与兽| 国产精品亚洲一区二区三区四区| 国产极品粉嫩馒头一线天av| 久久久亚洲精品中文字幕人妻| 久久蜜桃综合网| 五月丁香激情综合网| 国产精品蜜臀久久久久无码AV| 亚洲天天自拍| 欧美亚洲激情一二三| 另类图片五月| 日韩AV熟女乱伦| 2024黄色视频| 性爱网站一区二区| 国产亚洲99久久精品| 亚洲AV成人无码一二三久久| 青青草好吊色| 成人情色综合网| 日本男人插女人的逼黄色| 亚洲最大91网| 国产欧美伊人| 中文字幕精品一区二区精品| 亚欧高清v| 四虎国产精品永久地址入口| 一区AV| 欧美东京热青青草| 超碰人人干天天射| 九九五月天| 操91| 欧美一区二区三区成人性生活| 日韩人妻网站| 国产精品在线免费| 搡老熟女老女人老熟妇免费视频| 免费自拍三级综合| 欧美十八禁视频| 久久只有精品| 日产操逼| 最新日本中文字幕| 天天日天天操天天射河南省| 97这里只有精品| 麻豆成人影音在线| 91老司机在线| 激情综合网激情综合| 日本天天干天天操一区| 国产日韩久久| 91少妇| J?P?NESEHD熟女熟妇伦| 日韩欧美大片免费高清啪啪| A级片日韩欧美国产欧美视频精选观看| 中日高清无码操逼视频| 国产中文字幕曰本毛片| 久草免费在线一区二区| 嗯嗯,好大,好爽,好骚| 射久久| 精品久久久久黄少妇| 天天摸天天插天天日| 91美女中出| 乱人伦 国语对白:视频直接看| 久久xx| 亚洲五月丁香花狠狠干一区二区三区 | 亚洲国产精品成人综合| 操逼逼一区视频| 亚欧性爱无码| 亚洲系列第一页| 围产精品一区二区三区视频播放| 无码自拍SM| 天天日天天舔| 欧美最婬乱婬爆婬性视频| 97干色天堂| 日韩资源网| 男人天堂久久精品不卡| 我想要 啊 啊 啊| 草草电影院| 亚洲字幕一区二区| 亚洲成av人片色午夜乱码| 天天流夜夜操| 97色涩| 4tube欧美女厕所| 91五十路| 国产福利在线视频网站| 色九九综合| 久久久久久久久久久久久久久性生活视频 | 亚洲资源站| 强奸乱伦 亚洲一区| 成人性爱美曰韩| 久久性爱视频| ai欧美亚洲小说| 中文字幕一区二区无码成人| 亚洲国产精品无码AV久久久| 3p国产色噜噜一区| 99青草| 九99久久| yaouchengrenav| 爱我干综合| 国产精品自拍xxxx| 99色婷婷| 秋霞一区二区三区四区五区六区七区| 3PAV乱伦视频| 九九九九九九九精品视频| 夜夜爽妓女| 中文字幕二区| 亚洲电影中字一区二区| 99热啪啪| jiujiujiujingpin| 欧美中文字幕精品人妻| 欧美色性爱| 精品一区二区三区蜜桃臀赵总 | 婷婷六月色| 欧美gv在线观看| 97国产成人精品免费视频| 伊人成人情色综合| 国产乱子伦久久精品综合一区二区三| 911粉嫩人妻| 亚洲激情色片| 亚欧无码线免费观看视频| www.色操逼| 色综合99999| 18禁止看精品中文字幕| 亚洲成人碰碰| 十八禁黄色| 欧美日韩性爱操大逼| 熟妇一区二区三区| 探花视频免费观看国产专区| 玖色AV| 亚洲资源吧| 欧美黄片欧美黄片xxx| 啊啊啊啊二区好大| 久久av无码| 抽插爽| 狠狠操狠狠操操| 婷婷五月天影院| 我爱操| 亚洲成人性爱在线观看| 日韩美女高潮喷水视频| 91深夜夜| 九九九九九用不成了| 日本在线观看网址| 精品一区96| 亚洲精品久久久久毛片A片拉屎 | 午夜男女爽爽爽在线视频| 骚人妻少妇视频| 亚洲熟女性高潮久久久| 亚洲欧美一区二区不卡视频播放 | 婷婷10月天青娱乐| 欧美一级色| julia国产在线| 国产精品99久久久www| 国产精品一级二级在线| 青青操轻轻| 久久久九| 啪啪啪东京| 色蜜AV| 91制服丝袜中文字幕| 蜜臀久久99精品久久久久久酒店| 91啪啪视频| 另类 日韩 熟女| 99久热精品99re6热| 欧美大香蕉同搞| 在线观看午夜婷婷久久久久清性观看| 福利视频一区二区微拍| 91熟女视频网| 操狠狠| 在线a亚洲视频播放在线| 国产在线不卡导航| 国产日韩区| 碰人碰碰人人开房人肉| 国产毛片精品一区二区色欲黄A片| 丰满人妻-区二区三区免费看| 人妻熟女午夜精品在线| 尤物视频偷拍免费| 日韩欧美国产高清视频| 超碰在线成人电影| 无码精品久久| 久久视频,这里只有精品| 国产亚洲色婷婷久久99精品91葵花宝典 | 激情综合亚洲| 97在线视频免费| 啊啊啊好舒服好爽啊啊啊视频| 黄页大片在线观看| 亚洲 无码 偷拍| 欧洲小说色图视频另类| 日本韩欧美在线播放a| 97免费在线观看视频| 亚洲情色在线| 久久久婷婷婷| 中文字幕一区二区日韩网| 蜜臀在线网站| 91嫩草欧美| 丁香五月成人| 吖在线不卡一区二区国产剧情 | 黄色性爱网网| 91操操操操| 哑洲在线| 丁香婷婷激情五月天无毒不卡 | 黄片www视频免费| 十八禁电影伊人网| 96AV久久久| 丁香六月啪啪| 激情视屏国产乱伦强奸| 欧美操人视频| 久久国产精品m码| 国产女人和拘做爰视频 | 久久不卡一区二区 | 国内毛片国产欧美拍| 激情婷婷黑人91| 黄呦呦在线| 久久精精区一区二区一蜜桃一区二区| 啪一啪免费视频| 18禁止看精品中文字幕| 色臀AV| 97国产综合欧美| 国产精品色哟哟| 看日韩美女二区三区免费操逼视频 | 九区国产| 亚洲黄日韩无码专区| caorenqi shipin| 欧日a| 久久久久久电影| 国语av狠狠色丁香婷婷综合激情| 亚洲图片欧美偷拍| 亚洲美腿丝袜香蕉影视欧美成人| 欧美亚洲高清不卡| 欧亚久久偷拍视频| 91女人的网站| 91 亚洲 欧洲| 久久精品国产精品亚洲艾通辽熟妇 | 中文字幕在线免费观看 | 情色五月天久久久| 偷拍 亚洲| 天天日天天插| 污啪啪啪视频| 丁香五月激情综合| 日韩一级二级三级| 久久久久久久78| 亚洲日韩肥臀视频在线观看| 97色在线| 婷婷在线视频| 欧美日韩国产在线| 婷婷尹人大香蕉免费| 99视频内射三四| 大香蕉520| 丁香五月影院| 亚洲 欧美 91| 久久久9品一区二区三区| 高潮内射在线| 欧美综合色站| 天天舔九色婷婷| 日日黄色三级网站| 91男人天堂网| 999色欧美中文字幕| 一二三区视频在线观看| 人妻少妇精品视频一区二区三区| 女生久久网| 欧美成人一级麻豆| 国产JDAV无码视频在线观看| 收看日本人日bb| AV不卡在线| 精品亚洲国产成人AV制服丝袜| 第一高清av中文字幕| 99九九精品| 性色一线| 欧美精品双插| 人人摸人人舔一区二区| 人妻少妇无码| 亚洲图片第一页| 强奸乱伦AV一天堂网| 欧美日本中字另类在线| 无套内射性感少妇视频| 五月丁香久久| 中文97国产| 四虎影视永久在线观看精品免费网站| 99草精| 久久久少妇| 午夜激情成人在线观看| 亚洲最大网站av| 超碰79人人乐| 青青草色插素人| 日韩有码回春沙龙第一页| 欧美色图第一页| 国产一级内射无挡观看| 久热9| 欧美 综合| 9久9久| 襙一襙| 国产一级做a爰大片免费久久| 狂操嫩妻视频一区二区三区| 久久神马影院| 91亚洲影视| 亚州人妻| 亚洲情色 无码专区| 欧美午夜熟妇黑人精品91| 日韩激情无码影院| 搡老女人老熟女91| 中国少妇XXXX做受| 人妻少妇一区二区| 久草草一二三四区久久| 超碰美国| 91人妻素女| 久久久久久大| 亚洲欧美综合图片| 久操com| 97超碰国产精品| 欧美激情黑人| 国产兽交视频在线播放| 人人爱操| 内射中国少妇高清视频免费视频| 无码天堂| 97av在线视频| 欧美在线中M| 日产操逼| 亚州精人品大香蕉| 亚洲另类色综合网站| 在线无码视频| 亚洲不卡不卡中文字幕不卡| 无码粉嫩白虎一线天b区| 约操熟妇| 久久国产对白激情浪潮| 国产精品剧情| 亚洲色啪| 欧美啪啪天堂| 中文字幕亚洲热播人妻| 欧美天天综| 91精品国产91综合久久蜜臀| 人人爱操| 亚洲丨在线| 婷婷中文网| 亚av顶级裸体一区二区三区四区五区 | 国产精品干干干| 色诱中文字幕| 美女被啪到深处抽搐视频| 狠狠操狠狠| 高颜值美女口爆高潮浪叫| 国产av美女被艹的乱叫| 国产精品一级二级在线| 久久av成人无码免费| 中文字幕女同在线| 午夜福利av电影在线| 欧美熟妇操操视频| 欧美的性爱网站免费| 好看的91视频| 久久透逼视频| 久久天天躁日日躁狠狠躁 | 九久久九九久视频| 蜜乳av首页| 久久久999国产| 丁香六月啪| 天天欧美| 亚洲欧美大| 久久久久九九九| 综合色图区| 中文字幕欧美丝袜07资源| 成人综合色网| jazzjazz国产精品麻豆| 欧美综合第一| 免费1级a做爰片观看| 超碰综合色| 新婚人妻扶着粗大强行坐下| 国产精品乱码久久久、久久| 日美免费黄片| 97在线视频观看免费| 婷婷伊人綜合中文字幕| 五十路一区无码| 嫩草 人人网精品| 午夜操逼不卡| 加勒比综合a∨| 在线国产探花| 国产熟妇 码视频户外直播| 91+欧美| 强奸乱伦Av网| JuliaAnnXXX888| 中文字幕91综合| 亚洲国产欧美另类自拍| 啊啊啊啊,啊啊好多水| 丁香激情五月天| 中日韩免费看男女操逼大全| 亚洲色图欧美另类在线| 国产精品久久久久综合| 亚州一区二区| 97色妞| 青青草天天亲夜夜操网| 久久久久国产精品久久久| 九九九久千久久激情蜜桃在线看| 亚洲国产欧美一区二区潘金莲| 天堂综合| 久久久工口| 亚洲精品国产专区在线观看| 亚洲成人AB| av在线浏览| 日本女优在线视频福利| 91欧美综合| 亚洲成人妻日韩在线| 97操操| 都市久久精品激情亚洲| 欧美性第1页| 亚洲第一页欧美| 思思热免费视频观看| 97超碰超碰| 91欧美丝袜| 亚洲不卡av在线| 亚洲免费人妻在| 欧美gv在线观看| 唯美清纯 妖精视频| av72网| 丰满少妇一区二区三区专区| 亚洲精品aa久久伊人| 欧美Ⅴ性爱| 欧美高清91| 男人把坤坤插入女人的下体| 欧美日韩色图片| 人人操人人摸人| 大香蕉免费3| 老妇女91| 四虎884| 97看操| 美国美女AV在线| 国产日本久久免费精品| 黑人美精品 A片| 蜜臀久久99精品久久久| 大茄子熟女AV导航| 强奸熟女一区二区三区| 国产精品乱人伊人网| 任你爽视频| 亚洲无码久久久久久久| 国产精品一区av在线| 日韩肏逼视频| 一区二区影视| 91国产丝袜白虎| 精品中文一区二区| 欧美变态激情网| 日本一区99| 色呦呦、国产精品| 欧美在线官网| 激情五月天色播| 九九性爱网| 无遮挡h肉动漫在线观看| 人人操人人插人www| 欧美Aⅴ| 大屁股人妻女教师撅着屁股| 嗯嗯啊好爽| 亚洲Av诱惑| 国内精品99999| 亚洲风情综合网| 久超碰这里只有精品| 91久久国外网| 亚洲涩图欧美| 十八禁电影伊人网| 日韩色图 一区二区| 91人妻久久久久久久久久久久久| 久久伦理视频久久大香蕉视频| 丝袜综合| 性性欧美| 91欧美性| 黄色片G G G| 人妻激情在线视频| 人妻少妇久久| 国产精品一区在线播放| 久久黄黄黄| 97在线免费看视频| 精品人妻一区二区三区在| 久久久中文| 97精品一区二区视频| 天天看精品动漫视频一区| 999久久久免费精品国产牛牛| 日本羞羞的视频在线播放| 亚洲无码超碰免费| 人人操人人插人www| 国产综合网站在线播放 | 殴美在线AⅤ| 白嫩国模丰满一二三区| www.超碰在线| 精品久久青青草| 亚洲男人天堂网久久| 久久亚洲人妻| 综合性视频99| 97免费视频在线| 日韩欧美大片免费高清啪啪| 特级特黄一级毛片免费| 美國A片| 人妻少妇色综合| 欧美人妻二区三区| 婷婷15月天青娱乐| 中文字幕欧洲有码| 五月天激情小说网| 天天日老熟妇| 神马久久网| 欧美日韩精品久久久久东北老熟妇| 综合自拍| 狠狠久久手机视频精品| 欧美少妇性爱网站| 激情综合色| 快点操死我| 欧美日本不卡| 色就色综合| 精品久久久久久中文字幕三区| 综合操逼| 成人夜夜爽| 欧美色性爱| 99久久婷婷国产综合| 97超碰国产精品| 香港日本韩国人妇99www.wccm20| 东京热AV男人的天堂| 久久华人网| 四季av一区二区凹凸精品小说| 综合色好色| 亚洲天堂AV在线播放| 综合五月天| 亚洲熟女乱综合一区二区三区| www.91视频网| 亚洲精品国产专区在线观看| 色婷婷影视| 人妻内射一区二区在线视频| 欧美色图20p| 国产亚洲日本精品在线| 日韩熟女精品无码专区一区二区| 激情情色五月天| 成人蜜乳小视频网站| 思思在线免费视频| 啊啊啊好湿久久| 啊啊啊慢点| 岛国毛片手机在线观看| 久久精品视频久久久| 久久久久久中文| 久久黄色性爱视频| 久久国色天香香蕉| 麻豆熟妇乱妇熟色A片在线看 | 9999伦理视频| 欧美 色 亚洲| 国产精品激情久久久久久久| 爱干爱射网啊啊啊| 91久久婷婷| 日韩精品在线观看网站| 欧美日韩亚洲高清不卡一区二区三区| 一二三区精品视频| 国产一区二区欧美日本| 精品一区二区三区四区女| 精品黄色电影| 婷婷五月成人| 四虎免费在线播放| 国产激情av女片自拍| 五十路二区在线| 天天射天天操天天干天天吃2018| 亚洲 日本 一 二 三| 综合熟妇一区二区三区| 91爆操视频| 久草综合视频| 婷婷丁香九月| 久久伊人青青草| 男女做爰猛烈动高潮A片免费应用| 大香蕉123| 欧美色性情| 尤物一级在线免费观看| 91色碰| 天天综合网网欲色| 人妻激情偷乱视频一区二区三区 | 婷色五月天| 99AV| 99久热| 易易A毛视频| 九九色色| 日韩欧美传媒一区国产| 久草网站免费在线观看| 欧美日不卡| 国产精品视屏| 亚洲色图久久成人| 午夜超碰| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 日韩大香蕉精品在线视频| av无线看| 亚洲国产亚洲天堂| 抽插无码高清一区| 欧美肥臀在线| 99色在线视频| 另类图片天天影视| 天天干2019| 亚洲码在线中文在线观看| 国产极品久久久| 老司机深夜影院18未满| 玖玖大干人妻| 亚洲丝袜色| 国产精品高潮呻吟av久久4虎| 国产天天看| 一区二区三区免费岛国片| 欧美偷| 97午夜剧场日韩| 国产一区二区成人av在线播放| 人妻 欧美 中文| 亚洲一区二区中文字幕| 国产乱伦一二三区| 亚洲综合校园春色| 日本一区二区成人在线| 九九九九九九九九九九九蜜桃| 9999免费精彩视频| 国产999精品久久久| 黄色AV影视| 強姦亂倫a| 99re综合伊人| 久久亚洲影院一区二区| 国精综合一二三区影视| 思思视频免费看网站| 91激情网| 色播综合| av三级电影在线播放| 中文字幕十五区| 一区二区三区机械有限公司| 一区二区高清视频| 久草在| 久久99综合| 蜜乳成人AV| 日本操逼二区| 三四中文字幕| 伊人久久久日韩一区| 九九99精品视频在线观看| 一级做a爰片性色毛片久久| 玖玖爱伊人玖玖爱| 久久欧美按摩999| 亚洲国产尤物yw在线观看| 999国产精品999久久久久久| av情色影音| 青娱乐日韩无码| 在线观看不卡一区二区三区| 亚洲另类色综合网站| 特级大荫道BBwBBwBBW| 日本国产欧美高清在线| 百度百度日本操逼| 夜夜嗨一区二区三区三州加勒比| 亚洲免费精品一区| 亚洲一区日韩| 福利社区午夜一区二区| 91人人操| 国产精品97超碰| 欧美曰韩国产精品| 丁香五月综合| 日韩A优精品在线观看| 日韩欧美性爱电影在线观看| 女人18精品一区二区三区| 天天弄欧美| 骚货| 一区二区三区视频| 日本性爰一道本| 亚洲av青草久久一区二区| 91成人亚洲色图| 成人欧美日超碰| 91色爽欧美| 欧美嫩性色| 99爱精品| 人人扣人人操| 操逼操逼视频操逼| 性爱网站一区二区| 亚洲国产精品无石码久久 | 在线a v| 日韩强奸av| 成人怡红院| 精品女同一区二区三区| 99在线啪| 久久久久国产| 欧美情色贴图| 97se综合网| 青青草吊丝| 中文字幕一区二区三区人妻少妇在线| 五月天激情婷婷| 欧美日韩99| 十八禁视频网站| 无码抄逼网| 精品国产精品一区二区| 亚洲 欧美 手机在线观看| 3d成人精品一区二区| 免费看黄视频亚洲网站| 秋霞一级A片黄色视频| 秋霞一级鲁丝片A片| 香蕉一区二区三区在线视频| 久久,精品一二三| 色九月| 色婷婷网| 久久久97| 婷婷五月天影院| 自拍鲍鱼一区在线高清观看免费| 国产福利av精彩对白| 久久久久亚洲Aⅴ无码| 天堂中文日本在线观看| 欧美顶级黄色大片免费| 美國A片| 天天色播亚洲综合网站| 亚洲欧美国产其他二区| 欧美一级黄片免费播放| 日本污ww视频网站| 东京热免费视频| 精品一区二区三区蜜桃臀赵总 | 亚洲另类小说卡通动漫| 夜夜草天天| 香伊人在线| 日韩欧美成人性爱在线| 人妻 中文 日韩| 在线人人人人人人精品超 | 亚洲国产尤物yw在线观看| av网站在线观看了| 亚洲成人美女无吗| 日韩在线观看中文字幕视频| 99久热| 一个人在线看的黄色电影网站| 亚州乱码中文字幕综合久久久| 亚洲 欧美 另类 日韩 人妻一区| 九九热在线精品视频| 久久久久久九九九九九九| 啊啊啊啊免费视频| 一区在线精品中文字幕| 人人干黄色| 乱欲一区二区| 91操操| 亚洲 无码 偷拍| 日本性爱不卡视频| 综合欧美亚洲| 91久久国外网| 9超碰免费| 久久超碰爱| 欧美成人性爱视频大全| PMv在线观看| 97超碰美女| 亚洲综合有码| 99蜜桃臀久久久欧美精品网站| 97视频在线观看高清资源| 色爱亚洲| 色姑娘综合网|