久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

Tkinter列表選擇窗口實戰(zhàn):Listbox事件綁定與聯(lián)動刷新指南 1. 從需求到控件列表選擇窗口的定位與設(shè)計思路1.1 為什么列表選擇在 Tkinter 應用里如此常見做過幾個帶界面的Python工具后你會發(fā)現(xiàn)凡是需要用戶進行挑選操作的場景幾乎都繞不開列表選擇。比如一個批量文件處理工具要選目標目錄一個數(shù)據(jù)整理腳本要選分類標簽一個內(nèi)網(wǎng)運維小系統(tǒng)要切環(huán)境配置第一反應就是用列表把可選項擺出來讓用戶點。Tkinter作為python自帶的GUI庫雖然長得樸素但它的Listbox列表框、Combobox下拉組合框、Spinbox數(shù)值/文本微調(diào)框這些控件恰恰覆蓋了大部分列表選擇的交互需求。不需要額外安裝第三方庫不需要寫復雜的前端代碼就能實現(xiàn)展示可選項、接收用戶選擇、回傳選中值這一完整閉環(huán)。我個人的經(jīng)驗是如果你要做的只是一個內(nèi)部工具、教學演示或者輕量級桌面小應用Tkinter的列表選擇窗口完全夠用而且寫起來非???。從需求確認到能跑的界面半小時以內(nèi)就能搞定。這也是為什么很多開發(fā)者在寫輔助腳本時會順手用Tkinter而非PyQt或者Web前端——省事是最大的優(yōu)勢。1.2 三種列表控件的適用場景選型用錯控件是新手最容易犯的問題。我見過有人為了做一個只允許選一項目錄的功能硬是用了帶復選框的Listbox結(jié)果還要額外處理多選邏輯代碼復雜度直線上升也有人需要在界面上同時展示多個選項卻用了Combobox用戶每次都得點開下拉才能看到全部選項體驗相當別扭。這里先給出我的選型建議Listbox適合選項數(shù)量中等比如5到50個、需要讓用戶一眼看到全部選項的場景。支持單選和多選模式配合滾動條可以承載更多條目。Combobox適合選項數(shù)量較多超過10個、界面空間有限或者默認項很明確的場景。用戶點擊下拉才展開能省一大塊界面面積而且支持輸入過濾需要配合配置。Spinbox適合選項是連續(xù)范圍或有限序列的場景比如調(diào)節(jié)數(shù)字、循環(huán)切換周幾、選擇小時分鐘等。它本質(zhì)上是文本框加兩側(cè)微調(diào)箭頭。舉個我實際做過的例子。之前寫一個日志分析小工具需要讓用戶選擇日志文件的編碼格式可選項就那么五六個UTF-8、GBK、GB2312、ASCII、Unicode、BOM-UTF8。這種一眼能看完的選項我用的是Listbox而另一個功能里需要用戶從幾十個業(yè)務分類里挑一個我用的就是Combobox因為界面放不下那么多行下拉是合理的妥協(xié)。1.3 一個完整列表選擇窗口的組成結(jié)構(gòu)一個規(guī)范的列表選擇窗口不是簡單拖一個控件上去就完了。按我的習慣它至少包含這幾個部分頂部說明區(qū)用Label告訴用戶當前需要選什么。比如請選擇目標分區(qū)。這個小細節(jié)很多人忽略但實際使用中體驗差距很大沒有說明文字的彈窗只能靠用戶猜。列表展示區(qū)這是核心區(qū)域。Listbox放中間右側(cè)或底部配上滾動條保證選項多的時候能滾動瀏覽。交互控制區(qū)單選一般不需要額外操作但雙擊或點擊確定/OK按鈕后要觸發(fā)回調(diào)把選中的值傳出去。很多實現(xiàn)里還需要一個取消按鈕用于中斷操作尤其是在模態(tài)對話框中。狀態(tài)反饋區(qū)當用戶做了選擇后可以用一個Label動態(tài)刷新當前選中項讓用戶確認自己選對了。這個反饋對防止誤操作很有幫助。想清楚結(jié)構(gòu)之后再動手寫代碼比一邊寫一邊想清楚得多。我會先畫一個簡單草圖紙上或腦子里把每個控件的位置和職責分配好再進入編碼。接下來我結(jié)合一個實際Demo把每一步代碼掰開來說明。2. Listbox核心細節(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 # 焦點邊框粗細 ) listbox.pack(filltk.BOTH, expandTrue, padx20, pady20)這組參數(shù)里selectmode是最關(guān)鍵的一個它決定用戶能不能多選。取值有tk.SINGLE單選點哪個選哪個互斥。tk.BROWSE單選但支持鼠標拖拽移動選中項默認模式通常也會被當成單選用。tk.MULTIPLE多選點擊某一項會切換該項的選中狀態(tài)不影響其他項。tk.EXTENDED擴展多選支持Shift連選、Ctrl加選更符合常見的文件選擇習慣。我在業(yè)務里用SINGLE和EXTENDED最多。像選擇一個環(huán)境配置這種強互斥場景用SINGLE像批量選擇要處理的幾個文件類型這種場景用EXTENDED。MULTIPLE的交互其實比較別扭因為用戶容易誤觸除非有特殊需求否則不推薦。activestyle這個參數(shù)很有意思它控制的是當前活動項高亮條的顯示樣式。默認是underline下劃線也可以設(shè)為dotbox給活動項套個虛線框或者設(shè)為none完全隱藏。當你想要列表看起來干凈清爽不顯眼的活動條時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ā)內(nèi)部回調(diào)明顯卡頓第二種方式用*cities解包批量插入一條語句搞定效率好很多。如果數(shù)據(jù)量上了幾千條強烈建議用第二種方式。清空列表用delete(0, tk.END)這個起點參數(shù)0不能漏。我見過有人寫delete(1, tk.END)導致第一項永遠刪不掉排查半天才發(fā)現(xiàn)是從1開始了下標搞錯。還有一個操作是插入到指定位置比如把一項插到最前面listbox.insert(0, 新增城市)以及刪除指定項listbox.delete(2) # 刪除索引為2的項這些操作都要牢記Listbox的索引是從0開始的整數(shù)索引不要跟后面要講的curselection返回值混淆。2.3 單選模式的事件綁定與選中值獲取列表擺好了接下來就是用戶點選之后怎么取值的問題。這里有個坑Listbox本身沒有命令參數(shù)不能像Button那樣直接綁定函數(shù)。很多初學者會嘗試command參數(shù)發(fā)現(xiàn)怎么都觸發(fā)不了原因就在這里。標準做法是給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當前選擇{value}) else: status_label.config(text未選擇任何項) listbox.bind(ListboxSelect, on_select)這段代碼里有三個關(guān)鍵點。第一curselection()返回的是一個元組哪怕只選了一項返回的也是(2,)這種單元素元組。直接拿這個元組當字符串用會出錯必須取selection[0]得到整數(shù)索引。第二拿到整數(shù)索引之后用listbox.get(index)才能得到實際的字符串值。第三這個事件綁定的函數(shù)會接收到event參數(shù)通過event.widget可以拿到觸發(fā)事件的控件引用。如果界面上有多個Listbox可以復用同一個函數(shù)通過event.widget區(qū)分當前是哪個列表這是個很實用的小技巧。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)就能把用戶選中的多個值一次性收集起來。多選模式下有個體驗問題是用戶如果點擊了當前列表中的空白區(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請先做出選擇)這個二次確認邏輯能避免不少無意義的彈窗報錯用戶沒選就直接點確定的情況在實際使用中相當常見。3. 事件處理進階與實際取值邏輯3.1 單擊、雙擊、按鈕觸發(fā)的分工很多人在列表選擇窗口里糾結(jié)一個問題到底用戶點一下就算選完還是要點確定按鈕才生效我的經(jīng)驗是兩者都要支持但職責分開單擊選中實時刷新狀態(tài)反饋區(qū)讓用戶看到當前選的是哪一項。這里不觸發(fā)最終業(yè)務邏輯。雙擊條目視為確認選擇直接執(zhí)行后續(xù)業(yè)務邏輯。適合需要快速操作的場景。點擊確定按鈕讀取當前選中項校驗非空再執(zhí)行業(yè)務邏輯。這是最穩(wěn)妥的路徑也是模態(tài)對話框的標準交互。三種交互方式代碼如下# 單擊僅刷新狀態(tài) listbox.bind(ListboxSelect, on_single_click) # 雙擊確認并執(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當前選中{event.widget.get(idx)}) def on_double_click(event): sel event.widget.curselection() if sel: idx sel[0] status_label.config(textf確認選擇{event.widget.get(idx)}) # 在這里調(diào)用業(yè)務處理函數(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當前選擇{event.widget.get(sel[0])}) listbox.bind(ListboxSelect, update_selection)這種做法代碼更簡潔狀態(tài)反饋區(qū)和列表狀態(tài)天然同步。我推薦在稍復雜的界面里統(tǒng)一用StringVar管理動態(tài)文本因為多個控件可能同時需要感知同一個變化比如狀態(tài)Label和標題欄同時更新用變量比手動同步省心很多。3.3 默認選中項與回顯技巧應用里經(jīng)常遇到這樣一個需求打開窗口時要默認選中上一次保存的選項也就是回顯。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è)置默認選中 listbox.activate(index) # 設(shè)置活動項 listbox.see(index) # 滾動到可見區(qū)域這里有幾個細節(jié)要留意。selection_clear(0, tk.END)作用是先清空狀態(tài)否則二次調(diào)用回顯時會出現(xiàn)多個選中項。activate(index)設(shè)置活動項避免活動條還停在上一次的項上。see(index)會自動滾動列表保證默認選中的那一項在可視區(qū)里。如果默認項在很靠下的位置沒有see調(diào)用用戶打開窗口看到的是列表頂部根本不知道默認選了什么?;仫@完成后記得手動觸發(fā)一次狀態(tài)刷新selected_var.set(f當前選擇{default_text})有些開發(fā)者在回顯后忘記同步狀態(tài)區(qū)域結(jié)果列表里明明有選中項狀態(tài)Label卻還寫著尚未選擇看起來非常奇怪。3.4 通過鍵盤上下鍵控制選擇鼠標點擊當然是最直觀的操作但對高頻使用的工具來說鍵盤操控能明顯提升效率。Listbox本身支持上下方向鍵移動活動項但要讓它觸發(fā)業(yè)務邏輯需要一個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當前選擇{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)系不用擔心控件之間互相擠壓。下面是一個典型的三行布局# 第一行說明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被導出到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默認的灰底白字風格確實樸素得可以但這不代表不能做得好看。通過配置外觀參數(shù)完全可以讓列表窗口看起來像模像樣listbox tk.Listbox( list_frame, bg#FAFAFA, # 背景色干凈的米白 fg#333333, # 字體顏色深灰 selectbackground#5B8DEF, # 選中項背景柔和的藍色 selectforeground#FFFFFF, # 選中項文字白色 highlightthickness1, highlightcolor#B0B0B0, selectborderwidth1, reliefflat, borderwidth2 )reliefflat讓Listbox不再有默認的凹陷邊框配合highlightthickness1和highlightcolor整體觀感更接近現(xiàn)代桌面應用。selectborderwidth1是選中項邊框?qū)挾热绻O(shè)成0選中項背景和列表背景會貼得太緊視覺上有點生硬。字體方面建議統(tǒng)一用font(Microsoft YaHei, 11)或(PingFang SC, 11)按你的目標系統(tǒng)來定。設(shè)置字體的好處不僅僅是好看更重要的是避免中文在某些默認字體下顯示為方框亂碼這個問題在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()則把所有的輸入事件捕獲到當前窗口用戶在關(guān)閉這個對話框之前無法操作底層主窗口這就是標準的模態(tài)行為。窗口居中看起來是小細節(jié)但用戶體驗提升非常明顯。一個彈在屏幕角落的對話框用戶要歪著頭找直接影響專業(yè)感。視覺上把長寬先拿到再計算坐標是我喜歡用的方式。窗口關(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)里。如果不做這個攔截默認行為是直接銷毀窗口資源可能來不及回收。5. 聯(lián)動場景與完整實戰(zhàn)案例5.1 省市區(qū)三級聯(lián)動列表的經(jīng)典設(shè)計列表選擇窗口最有代表性的實戰(zhàn)場景就是省-市-區(qū)三級聯(lián)動。用戶先選省份市列表刷新再選城市區(qū)列表刷新。這種聯(lián)動邏輯在Tkinter里實現(xiàn)起來其實并不復雜核心思路是事件驅(qū)動數(shù)據(jù)刷新。設(shè)計思路維護一個嵌套字典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ù)同步細節(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)動場景里反復驗證過的可以避免絕大多數(shù)由狀態(tài)殘留導致的取值錯亂問題。再看一個細節(jié)當用戶重新選擇同一個省份時例如從廣東省切走又切回來上述邏輯也會一切照常運行不會重復插入數(shù)據(jù)或產(chǎn)生臟數(shù)據(jù)。delete(0, tk.END)在這時發(fā)揮了整表重載的功力這種操作在數(shù)據(jù)量小的時候反而是最穩(wěn)妥的方案遠好過算差值做增量更新的復雜邏輯。5.3 聯(lián)動數(shù)據(jù)源來自外部文件的實踐實際業(yè)務里省市區(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默認GBK環(huán)境下解析中文JSON會報編碼錯誤。這個坑我踩過好多次凡是涉及中文數(shù)據(jù)讀取的場景顯式指定UTF-8編碼是鐵律。5.4 實戰(zhàn)案例環(huán)境參數(shù)快速選擇器我做過一個跨平臺系統(tǒng)部署輔助工具其中一個界面就是環(huán)境參數(shù)快速選擇器。功能是讓運維同事在部署前先選擇目標環(huán)境開發(fā)/測試/生產(chǎn)再選擇該環(huán)境對應的服務器列表。這本質(zhì)上就是多級聯(lián)動但數(shù)據(jù)結(jié)構(gòu)是動態(tài)的每次發(fā)布新機器都從配置文件讀取。它的界面構(gòu)成為頂部環(huán)境類型單選列表開發(fā)環(huán)境、測試環(huán)境、預發(fā)布環(huán)境、生產(chǎn)環(huán)境。中部左側(cè)從配置讀取的服務器列表。中部右側(cè)當前選定服務器上需要部署的服務模塊多選。底部實時配置預覽框和部署按鈕。這里的處理邏輯更貼近業(yè)務服務器列表的加載依賴環(huán)境選擇部署模塊的多選依賴服務器選擇。每次聯(lián)動刷新時需要同步更新預覽框里的配置信息讓用戶在下發(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ū)域一臉茫然。我習慣在開發(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ù)缺失。這種預校驗思路不僅適用于聯(lián)動數(shù)據(jù)凡是界面加載依賴外部配置的場景都建議做一次輕量校驗。6. 常見問題與排查技巧實錄6.1 為什么curselection一直返回空元組這是新手最常見的困惑明明看到Listbox里有選中項但curselection()就是返回()。排查順序一般是這樣的檢查是否用了exportselection。在Linux環(huán)境下如果exportselection沒有設(shè)為False用戶點擊其他控件時選中狀態(tài)會被系統(tǒng)導出到剪貼板選擇區(qū)導致Listbox的選中狀態(tài)丟失。解決辦法設(shè)置exportselectionFalse。檢查事件觸發(fā)時機。如果在ListboxSelect事件綁定的函數(shù)里立即可用但在按鈕回調(diào)里為空說明用戶根本沒選中任何項而不是程序出錯。用狀態(tài)Label顯示當前選擇先確認用戶操作是否真的選中了。檢查是否用了錯誤的綁定事件。比如綁定成了Button-1鼠標左鍵按下而不是ListboxSelect鼠標按下瞬間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è)得太大導致列表區(qū)域占據(jù)過多空間超出窗口范圍。窗口高度不夠時Listbox的可視區(qū)域被裁剪出現(xiàn)只有部分行可見但無法滾動的錯覺。滾動條沒有正確聯(liá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ū)域在窗口大小變化時自適應填充是解決顯示不全的標準配置。6.3 列表項內(nèi)容重復或綁定數(shù)據(jù)未刷新在聯(lián)動場景中重復加載是最常見的bug來源。比如用戶反復切換省份城市列表里的項目越來越多因為每次切換都執(zhí)行了insert而沒有先delete。我建議在聯(lián)動刷新邏輯里養(yǎng)成固定的三段式習慣# 第一步清空 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)不支持的字體或者字體名拼寫錯誤導致Tkinter回退到默認字體而默認字體對中文支持不好。解決辦法用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è)務邏輯里判斷空并給出提示窗口內(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默認值為True設(shè)為False窗口無法正常銷毀回調(diào)中未調(diào)用destroy在關(guān)閉處理中顯式調(diào)用destroy這張表我用了很久每次排查類似問題時掃一眼就能定位方向。建議你也為自己常用的控件整理這樣一張速查表能省下很多重復排查的時間。7. 一次完整的列表選擇窗口實現(xiàn)記錄7.1 目標與需求描述最后分享一個完整的實際案例過程。需求是這樣的某內(nèi)部數(shù)據(jù)管理工具需要從多個數(shù)據(jù)庫環(huán)境中選擇一個進行操作然后選擇該數(shù)據(jù)庫下的可用表最后對選中的表執(zhí)行備份操作。由于目標環(huán)境經(jīng)常變化數(shù)據(jù)源不能寫死必須從配置文件動態(tài)加載。界面要求是左側(cè)顯示數(shù)據(jù)庫環(huán)境列表單選。中間顯示當前環(huán)境下的數(shù)據(jù)表列表單選。右側(cè)顯示當前選中表的元數(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})這段代碼里有幾個細節(jié)值得說明。load_envs里的自動選中窗口啟動后默認選中第一個環(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 運行效果與進一步擴展運行后的界面邏輯是這樣的窗口啟動自動選中第一個環(huán)境并加載它的表列表用戶點擊環(huán)境切換時表列表同步更新用戶點擊表時右側(cè)元數(shù)據(jù)區(qū)域?qū)崟r刷新底部的備份按鈕觸發(fā)的操作會有消息框確認。這個實現(xiàn)已經(jīng)可以嵌入到大部分內(nèi)部工具里。如果要進一步擴展可以加一個搜索過濾框在表列表上方加一個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è)務模塊的耦合度更低。8. 個人實踐經(jīng)驗與效率建議8.1 開發(fā)效率提升的幾條心得先說幾條我在做Tkinter列表選擇窗口時長期沉淀下來的經(jīng)驗。第一不要從空白窗口開始。先搭建一個通用骨架包含Listbox、滾動條、確定取消按鈕、狀態(tài)Label基本可以覆蓋80%的列表選擇場景。剩下的20%在骨架基礎(chǔ)上增刪即可。如果你經(jīng)常寫這類工具把這個骨架存成一個模板文件每次復制改名能省大量重復勞動。第二用配置文件或常量統(tǒng)一管理可選項而不是硬編碼在業(yè)務邏輯里。哪怕一開始只有三五項也建議從配置讀取。實際需求變化非常快今天三五個選項下個月可能就是三五十個硬編碼的結(jié)果就是到處找列表在哪改浪費時間還容易漏。第三保持事件處理函數(shù)職責單一。一個函數(shù)只做一件事update_cities只刷新城市列表update_preview只更新預覽do_backup只觸發(fā)備份。不要在一個函數(shù)里又刷新列表又更新狀態(tài)又調(diào)業(yè)務接口出了問題就很難排查。第四用日志輸出代替print調(diào)試。我習慣在關(guān)鍵節(jié)點加一行注釋和日志調(diào)用比如環(huán)境切換打印一行、表選中打印一行。這樣聯(lián)調(diào)時能快速定位是界面層的問題還是數(shù)據(jù)處理層的問題。8.2 常見反模式與規(guī)避策略有些寫法看著沒毛病實際用起來全蹩腳我列幾個高頻反模式。反模式一用time.sleep模擬等待。比如在按鈕回調(diào)里執(zhí)行業(yè)務邏輯前先sleep一下等界面刷新。這種做法會直接卡死整個Tkinter主循環(huán)界面假死連窗口都拖不動。正確做法是用root.after延時回調(diào)或者干脆不做延時直接執(zhí)行業(yè)務邏輯。反模式二大量使用全局變量傳遞選擇結(jié)果。比如用global selected_env保存用戶選項。單窗口小程序這么寫能跑但一旦窗口函數(shù)被復用全局變量互相覆蓋排查起來非常痛苦。推薦用類封裝狀態(tài)或者用tk.StringVar管理和傳遞。反模式三不校驗數(shù)據(jù)就直接用。從配置讀取數(shù)據(jù)后不檢查None和空列表就插入Listbox結(jié)果異常分支直接崩潰。養(yǎng)成取數(shù)據(jù) - 判斷空 - 刷新界面的習慣能避免很多隱性bug。反模式四只識別鼠標點擊不支持鍵盤。對高頻使用的工具來說純鼠標操作會嚴重影響效率。加上鍵盤方向鍵支持再配合快捷鍵綁定如回車確認、Esc取消體驗提升立竿見影。8.3 有志深入再進一步的方向如果列表選擇窗口的需求再復雜一步比如要支持搜索過濾、樹形結(jié)構(gòu)、多列展示Tkinter自帶的Listbox就不太夠用了。這時有兩個方向可以選用ttk.Treeview代替Listbox它支持多列、樹狀結(jié)構(gòu)、選中樣式自定義幾乎可以覆蓋Listbox所有功能。數(shù)據(jù)表選擇這類需求用Treeview做多列展示會更合適。轉(zhuǎn)向PyQt或PySide。功能更強大渲染更快但包體積和開發(fā)成本也上去了適合正式產(chǎn)品項目。我的建議是分清場景。在內(nèi)置工具、教學示例、自動化腳本里Tkinter的列表選擇窗口足夠應付如果你在開發(fā)面向大量用戶的產(chǎn)品級桌面應用還是盡早考慮組件更豐富的框架避免后續(xù)重構(gòu)。最后說一句我在實際項目里反復驗證過的體會列表選擇窗口最核心的價值不在展示選項這個表象而在于把用戶的意圖清晰、準確地翻譯成程序能理解的數(shù)據(jù)。想清楚這一點UI怎么做都不會跑偏。用好Listbox的選中邏輯、聯(lián)動刷新和狀態(tài)反饋這三個關(guān)鍵點你寫出來的界面就已經(jīng)超過大多數(shù)半路出家的開發(fā)者的水平了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产大学生高潮在线播放| 操操逼视频| 国产在线能看的你懂的| 色播综合| 96精品一区| 在线无码视频| 色综合加勒比四四季| 麻豆熟妇乱妇熟色A片在线看 | 超碰日韩美妻| 婷婷激情五月天小说网| 中文字幕AV片| 八戒午夜福利理论片| 99re9在线| 97Ai亚洲| 97超级久久强资源| 久操免费观看| 日产狠狠干| 性欧美精| 丰满人妻av一区二区三区| 亚洲在高跟鞋自慰久久在色线| 久久久96| 日本午夜福利视频| 人人爱人人乐人人操| 首页亚洲国产高跟丝袜诱惑视频| 东京热,男人的天堂| 口爆吞精在线观看| 伊人视频| 精品人人插人人操| 欧综合网| 国产在线不卡导航| 91欧洲国产成人久久精品网站| 国产按摩一区二区三区| 九九九热| 久久综合女优| 精品中文字幕第一页| 狠狠夜色午夜久久综合在线| 亚洲成人一区二区精品| 蜜臀99久久国产| 精品国产一区二区三区av在线资源| 91n处女在线观看| 玖色AV| 加勒比伊人| 欧美黄页在线| AV和黑人在线播放| 日韩97精| 亚洲色图大香| 亚洲国产一区二区入口| 日日日日做夜夜夜夜无码| 综合久欧洲| 久久东京伊人一本到鬼色| 偷拍亚洲高清图片| 国产亚洲精品玖玖玖在线观看| 久久精品中文字幕女同| 五月综合久久| 日本成人在线不卡一区二区三区| 亚洲色图国产另类| 亚洲一区二区精品福利| 久久超碰com| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 亚洲毛片久久| 欧美性色综合网| 色综合天天| 超碰97综合网| 中文字幕乱碼在线| 黄片免费看黄片免费看| 日日夜夜精品视频| 97射欧美| 国产四虎在线| 91人妻做a观看视频| 亚洲美女 晚间男人天堂 | 韩日男人的天堂| 日本精品无码三级网站| 9久9久| 日本精品88888888| 免费综合亚洲中文| 91强热人妻| 操逼操逼操| 中文字幕AV片| 久久极品伊人| 国产三级日产三级韩国三级| 成人怡红院| 丰满丝袜少妇AV| 红杏大香蕉| 亚洲男人久久综合天堂| 91青青草| 国产AV天美传媒一区二区三区 | 精品人妻中文字幕4399| 欧美性天天| 久久精品视频一区三区小泽玛利亚| 国产成人无码网站在线视频| 欧美自拍偷拍综合图片| 男人的天堂免费| 乱伦a片视频| 东北老熟女| 99re69| 乱老女人一区二区视频| 在线观看一级α片刺激高潮视频| 天天碰久久入| 91精品国产乱码| 伊人综合色网| 亚州伊人色综台| 日韩欧美一级特黄大片| 98人妻精品一区二区色欲| 欧美日日人人天天| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 久久激情亚洲精品无码?V| 熟妇熟女一区二区三区| 国产精品午夜精品| 夜夜嗨绯色| 能看的AV| 亚洲AV乱码专区国产噜噜亚洲| 亚洲精品成人激情在线| 婷婷五月天激情网| 熟女人妇一区二区三区| 18禁免费视频| 超碰免费人妻人人| 久久99干一本高清| 国产伊人精品在线| 黄色区免费观看中文字幕| 黑人在线91| 凹凸视频在线一区二区| 欧美精品99久久久| 国产精品农村妇女| 九九九九免费| 色噜噜婷婷| 日韩亚洲国产视频| 国产美女裸体秘 永久无遮挡| 欧美三级偷拍| 国产精品禁久久久精品| 久久久久幕乱码| 日日做夜狠狠爱欧美黑人| 日日日啊啊啊| 久久激情四射婷婷丁香五月天| 国产精品视频内谢女人| 青青草无码视频| 欧美 传媒 麻豆 日韩 偷拍| 九热大香蕉| 精品无码久久久| 女同在线视频一区| 国产极品999| 97色在线观看| 91精品电影18| 夜夜操91744565| 久久久久久久久久久六六| 天天做天天爽| 日韩精品99999| 国产成人在线观看综合| 99这里都是精品| 久久超碰亚洲人| av最新免费中文字幕| Sekablack无码一区| 九九色色| 蜜桃成人1区2区3区| 野狼激情网| 禁止观看美女黄| 欧美激情亚洲色图| 成人天天爽| 午夜精品久久久久久久99| 91精品操美女| 国产熟女无套内射| 日本成人在线不卡一区二区三区| www.亚洲成人一区| 黄网色一区二区三区四区精品| 国产成人精品亚洲日本| 后入 亚洲 美女 射| 人妻精品4K4K4K4K4| 亚洲限制级| 婷婷三区| 60秒不遮不挡| 老外又粗又长一晚做五次| 欧美色图20p| 亚洲女人91| 97超级欧美| 蜜桃无码AV一区二区| 日日碰狠狠添天天爽超| 日韩精品.久久精品.AV女优.天美传媒| 少妇超碰在线| 亚洲色图加勒比| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 91三级理论片播放器| 强奸a片网| 又大又白奶子| 日本中文字幕一区| 国产三级片在线观看| 尤物黄色在线观看网站| 日韩操人| 伊人丝袜美腿高跟在线观看高清| 啊啊啊久久久视频| 美女黄网| 国产无码一二三区| 伊人影院在线理论播放 | 久久久久久大| 综合情欲网| 日本欧美不卡| 亚洲色诱惑| 免费农村成人少妇人妻Aa一区二区视频 | 91蜜臀在线久久久久| 国产极品久久久| 好屌色综合| 日本熟妇自慰性高潮一区二区三区| 欧美在线啊啊| 免费的黄片wwwwww| 四月丁香婷婷| 天天久久久久久| 国产成人超碰在线| 大香蕉综合| 国产高清亚洲日韩一区| 九九人人操| 操B久久| 久久久久久999| 艹比视频国产精品| 日本欧美色| 女生久久网| 亚洲中文字幕久久人妻| 嗯嗯嗯不要不要免费视频| 日韩成人小视频| 18禁精品网站在线看| 蜜臀国产AV中文字幕| 日韩色女精品| 精品国产一区二区三区四区在线看| 五月婷婷激情综合| 99999国产| 伊人操| 亚洲男人天堂网久久| 激情综合网一盗摄| 色婷婷六月丁香七月婷婷| 亚欧免费观看视频| 韩国嫰模上门援交视频| 亚洲日韩精品久久久久一区壹牛 | 91亚洲黄色网| 国产高清免费不卡av| 高清不卡国产| 韩国一级做a久久久久| 亚洲综合成人网| 九九国产热| 欧美亚洲高清| 久久啊哟| 日产操逼| 怡红院怡春院| 国产老太乱伦一区| 国模限制级电影| 精品一级| 免费视频无码| 亚洲国产丝袜熟女av| 99热官网| 夜夜爽夜夜操| 五月丁香久久| 午夜九九九九九九| 中文字幕诱惑制服人妻丝袜美丝袜美 | 亚洲精品 欧美精品| 最新国内自拍av免费| ss久久| 91精片| 国产成人网站在线观看| 暴力av在线| 三级三久久线久久99久目本WW| www久久精品| 日本Xx性爱| 欧美第二页午夜| 成人网站 免费观看| 欧美特黄视频网站| 午夜丁香| 国产男人又猛又粗又爽| 日本中文字幕一区| 大香蕉黄色一区| 欧美色综合网| 天天综合网一91网| 伊人网青青| 97超碰资源网| 另类小色呦| 亚洲国产97在线精品一区| 亚洲人妻av| 丝袜综合网| 江都AV在线| 精品亚洲一区在线观看| 精品国产乱码久久久兰草影视| 国产一区二区三区久久久精品| 久久同城AV| A片 AV一级在线播放观看免费| 大香蕉92| 91熟女熟妇视频网站| 国产AV天美| 免费观看欧美日韩操逼视频| 欧美三级免费伊人| h4610国产人妻| 综合天天。| 超碰久热| 亚洲一卡二卡在线免费| 九九九九免费高| 亚欧国产无码精品在线| 国产精品com| 91丝袜美腿片| 欧美亚洲性爱一区二区| 亚州操逼图| 青草精品视频一日本久久久久网站| 69人妻精品一区二区绯色| 免费a级毛片av无码久久精品中文字幕| 男人精品天堂一区| 夜夜操2028| 性影在线视频| 97天天摸天天爽| 歐美性天天| 18禁止看精品中文字幕| 鸥美中出| 精品少妇人妻av久久免费| 色www精品视频在线观看| 人妻少妇色综合| av影片在线观看不卡| 九七毛片九九毛片| 青青草啪啪网| 亚洲丝袜B诱惑| 色五月综合网| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 久久久久久一日韩字幕无码| 九九热九九| 97视频在线| 日韩三级在线观看mp4| 婷婷综合网| 伊人热综合| 宗合情欲网| 91逼逼女人91| 97爱综合| 久久99干一本高清| 综合91网| 操碰97| 9ⅰ久久久天天| 亚洲精品国产精品乱码不卡| 五月天色色色| 99操视频| 亚洲91在线播放影院| 啊啊啊操死我| 99国内熟女露脸视频| 欧美 青青草| 久久国产精品91| 九九Av| 午夜欧美女人操逼| 在线播放一级无码视频| 亚洲精品乱码线路中文字幕 | 久久这里只有精品9| 天欧美在线| 国产青视频| 2001天天操| 色综合91| 丝袜综合| 欧美性暴力猛交XXXX| 爱爱动态120秒| 婷婷五月天伊人| 最新国产精品久久精品| 日韩啪啪网| 99爱久久视频频| 日本三级韩三级99久久| AV天天在线观看| 3571色综合一区二区二区| 久热伊人| 五月天婷婷小说| 色婷婷综合网站| AV一起草在线| 欧美玖玖爱免费玖玖| 性色中出| 懂色AV中文| 1区2区3区中文字幕日韩| 啊啊啊啊啊啊好湿好爽视频| 秋霞一区二区三区四区五区六区七区| 91色爽欧美| 久久精品一区| 麻豆精品天美| 91中出视频| 蜜桃久久一区二区| 激情欧美97| 日韩亚洲欧美中文字幕| 国产欧美日本亚洲精品| 日本欧美一区二区三区免费| 九九综合久久| 午夜激情床戏激情| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 久久人| 国产精品美女视频诱惑| 十八禁视频一区二区| 人妻少妇被猛烈进入中| 国产浮力影院第1页| 日本在线不卡v二区| 丁香色色网| 尹人大香蕉视频在线| 看看小穴| 欧美综合97www| 啊啊啊啊啊好大好舒服想要| 色偷偷2020免费视频播放| 国产成人五月天丁香花| 欧美自拍偷拍综合图片| 思思热免费视频观看| 六六久久日韩不卡| 清清草影| 熟女熟妇一区二区三四区| 神马九九| 黄色毛片A片| 日本狠狠干| 女人天堂av在线播放| 一级片视频啪啪| 日本激情免费大片| 亚洲国产欧美日韩人妻日中文| 黑人天8A∨高清网站| 国产乱子伦一区二区三区免看| 黑丝制服中文字幕| 三级日韩一区二区三区| 乱伦系列一区二区| 蜜桃视频精品一区二区| 少妇二级| 日本成人A片网站| 男人的天堂2018东京热啪啪啪| 粉嫩av平台| 欧美草草高清日韩视频| 99精品高潮| 激情综合五| 一区=区三区视频| 日本精品一区二区三| 屁股久久久久久| 日韩国产乱子伦App| 色色国产| 亚洲综合 欧美| 一区二区三区国产在线播放| 亚洲欧美国产其他二区| 久久久久久久久九九久孕交| 国产精品久久久久9999小说| 国产浮力影院第1页| 天天插天天舔舔天天干| 久久久久久中文| 波多野结衣一级视频| 99这里有精品视频| 超碰97资源网亚洲| 久久直播国产| 乱老熟女一区二区三区| 超碰97久久| 日韩精品在线观看网站| 国产地址二三| 精品一级毛片在线观看| 91久久久久久久| 1000午夜黄色| 欧美色涩| 亚洲色婷婷| 欧亚揄拍偷拍精品视频 | 日本东京热久久久电影| 91丨九色丨熟女高潮| 日本加勒比无码专区一二三| 无码人妻一区二区三区色欲aⅴ | 神马久久午夜| 色优久久| 色天堂在线观看| 欧美亚洲首页| 91日产欧美| 中文字幕精品探花视频| 丝袜美腿诱惑亚洲欧美视频在线观看| 亚洲天天精品| 一区二区三区视频在线观看免费| 亚洲熟女乱色一区二区三区久久久| 亚洲学生妹高清av| 一区二区三区 丝袜 高跟 美腿| 久久爱超碰网| 一本色道无码DVD中文字幕| 免费观看有码高清视频| 亚洲人天堂| 99∨VTV| 91综合无码| 亚洲精品视频在线播放| 大香蕉懂9| 免费人成?大片在线播放| 941超碰| 欧美国产一区二区三区麻豆传媒| 亚洲男人综合| 青青草吊丝| 婷婷久久五月综合激情| 亚洲中文字幕有码视频一区二区三区| 亚洲欧洲成人在线电影| 色哟哟的毛片| av黄图片在线观看| 啊啊啊啊啊好大好舒服想要| 日韩无码三级影院| 操曰本熟女| 日本熟妇人妻中出视频| 亚洲美女高潮喷水视频| 99性爱视频| 变态综合色| 国产视频一区二区免费| 日本布卡一区二三区| 婷婷色网| 国产成人91一区二区三区| 大香蕉色网| 密乳AV免费观看| 欧洲精品区| 久久一区二区三区四区五区| 天天流夜夜操| 欧美日韩欧美| 六月丁香啪啪| 青青草久草AV| 99ri在线视频| 青娱乐休闲视频在线观看| 久久內射| 国产精品一区二区 尿失禁| 天天影视91看看| 日韩在线76| 飘花国产午夜精品不卡| 久久久久久九九九九九九| 婷婷五月天影院| 大象AV在线| 97精品综合久久网| 精品人妻一区春色| 天天综合站| 九九热国产| 91久久久亚洲| 亚洲情色一区三区| 欧美激情性爱视频网站| 久草电影网| 9999久久久久| 91人妻精华帖| sewuyueav| 国产视频97| 另类小说五月天| 色色综合网站| 日韩性爱视频在线免费观看| 玖色av| 亚洲熟妇丝袜在线观看| 亚洲日韩美女中文字幕乱| 国产97亚洲| 极品后入免费视频| 女同亚洲欧美一二三区久久电影| 人妻一区视频| 97天天综合| 91老熟女91老女人| 人妻久热在线| 美女被艹尤物视频| 91精品久久久| 久久久久久久久久久久久久久性生活视频| 亚洲美女高潮喷水视频| 国产久久久9999| 欧美v亚洲v日韩v最新在线二区| 97超碰人人模人人拍人人| 久久久精品中文字幕麻豆| 97视频观看| 国产高潮AA片免费看| 久久久精品电影| 日韩图色| 偷拍亚洲视频一区二区三区四区| 色噜噜人妻丝袜AV资源| 日日干日日| 熟妇操花| 脫衣舞一区二区三区| 亚洲综合网91| 国产乱不卡| 久久一本大香蕉 | 亚乱色| 久久av无码| 激情一区二区| 欧美色蜜桃97| 久久激情视频| 偷拍2020| 999九九精品| 91成人在线| 91精品国产综合久久久蜜臀| 天天干天天干天天| 日韩啪啪啪啪啪| 欧美躁死她一区二区| 九热视频| 激激五月| 有码人妻系列| 美欧老女人97| 亚洲天堂日本| 鸥美极品| 国产风韵犹存熟妇三区| 偷拍色图| 亚洲超碰综合网| 伊人伊人LD| 欧美激情色婷婷花野真衣一区二区| 丰满少妇人妻久久久久久| 亚洲熟妇图片| 美女主播色欲91抠b在线播放| 成人在线视频一区| 超碰 国产熟女精品一区| 91激情国产| 国产馆| 亚洲美女AV无码| 国产一区二区成人av在线播放| 日韩在线地址一| 东北丰满熟女国产一区| 亚洲各类熟们中文字幕| 激情五月天色播| 91女网站| 日本中文字幕一区| 91热| 一区AV| 美女午夜福利免费视频| 亚洲日本韩国在线| 嗯啊啊啊轻点视频 | 1000午夜黄色| 春色综合免费| 91视频综合| 大香蕉www.超碰| 3p国产欧美99热| 手机av天堂久久久久| 欧美久久婷婷| 欧美色图校园春色| 国产精品免费1区2区视频| 国产精品一二三在线看| 欧美视频在线第3页| 综合网久久| 东北女人性交| 无码免费在线观看黄色片| 干婷婷综合网| 四季AV综合网址| 日本天堂在线播放| 久久在线观看免费视频| 亚洲国产高清福利视频| 九九超碰综合网| 五月天婷婷综合网| 91在线免费观看处女| 欧美亚洲美少妇一区二区| 婷婷五月天色网| 深夜福利黄片| 国产精品高潮久久AV| 欧美第一页| 伊人超碰97| 国产精品一区二区校花| 亚洲精品色| 国产成人主播| 天天肏天天干| 日本在线播放不卡一区| 97超碰色屌| 日韩无码第3页| 9丨亚洲一区二区在线| 五月丁香狠狠爱| 狠色婷婷久久一区二区三区_| 干B网| 日韩亚洲中文有码视频| 久久超碰久| 日本97久久| 欧美黄色片在线播放| 天美av在线观看| 久久久久久免费电影| 成人免费毛片| 啊啊啊啊啊啊啊国| 中文字幕青青草| 国产网红精品| 久久久久99精品成人片蜜臀| 波多野42部无码喷潮在线观看| 超碰人人乐97| 粉嫩AV一区二区夜夜| 国人欧美精品一区二区| 成人热久久精品| 久久狠狠色噜噜狠狠狠狠97| 婷婷综合在线| 日本精品加勒比海一区| 久久无码电影| 91 综合 色| 人人操人人摸人人看人人插| 欧美少妇一区二区三区| 亚洲日韩美女丝袜美腿人妻视频| 亚欧性爱在线无码| 久久精9| 激情综合久久| 91精品少妇搡搡搡| 伦伦成年午夜免费视频| 最新精品久久蜜桃 | 五码视频在线观看| 亚洲国产综合久久久性感熟妇| 青青青青青手机视频| 五月婷久久| 黑白配性爱AV成| 99re在线视频这里只有精品| 日韩图区| 国产一级特黄大片处女| 欧亚第一综合网| 日韩免费中文字幕视频| 97视频观看| 3PAV乱伦视频| 高清不卡国产| 国内亚洲高清无码| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产精选视频| 激情综合网五月婷婷| 视频在线97| 中文字幕性感少妇av| 超碰97.com| 中文字幕日本久久| 久久精品无码专区| 91爽啪| 国产色产精品在线观看| 亚洲色图加勒比| 中文色综合| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 屁股久久久久久久久| 屁屁影院一区二区三区国产| 欧美综合网站999| 9色在线| 东北毛片| 色老牛| 十八禁视频网站| 天堂性色| 丝袜综合色图| 亚洲少妇综合在线播放| 欧美草草高清日韩视频| 97干日韩| 精品欧美А∨无码黑人大荫蒂| 人妻熟女一区二区| 五月婷婷六月丁香| 97无码视频在线播放| 91成人社区| 噜噜噜无码AV一级一级久久影院| 久久啊啊| 天天看片麻豆| 大香网伊人久久综合| 亚洲伊人成综合成人网| 五月开心久久AV官网| 91狠狠综合久久久| 无码久久国产| 91在线丝袜| 熟女丝袜视频| 51一区二区三区| 欧美激情专区| yy少妇精品久久| 六月天婷婷| 国产精品久久久久久久电影渣男| 久艹99| 久久久艹艹艹| 亚洲五码一区二区三区| 91网站18禁| 一级黄碟在线看| 后入式五六区| 91在线页| 在线视频免费播放一区| 一级二级在线观看| 大香蕉在线SuP| 国产动漫操逼视频| 啊啊啊啊啊啊啊国| 在线无码操| 久久亚洲AV无码白度| 4虎在线视频| 五月天黄色av| 一级性爱aaaa| 伊人五月天婷婷| 97欧美资源| 久久久不卡区一区二区三区久久久| 欧美黄色片AAAAA| .精品人妻一区二区三| 超碰97久| 97在线资源| 人妻插插人妻人| 婷婷综合| 人人操人人摸人| 国产探花日韩援交| 超碰色老头| 久久久精| 欧美999999| 中文字幕在线观看第二页| 裸模AV女优| 在线a v| dy888午夜老子影视达达兔| 97久久久久久久久久| 亚洲欧洲久久天堂| 日韩紧密久久| 91亚州日韩高清| 日本肉体xxxx裸交| 日本午夜操逼| 欧 美 自 拍 偷 拍| 夜夜骑夜夜操| 国产精品一区二区三区四区五区| 中文字幕精品专区搜索结果91| AV丝袜少妇| 99热这里只有精| 欧美精品1区2区3区| 欧美亚洲激情| 清纯唯美第一页| 中出人妻中文字幕91在线| 久久少妇人妻| 97爱爱爱综合| 久久精品小视频| 久草视频分类在线| 尤物国产一区在线观看| 日本免费人成视频播放120秒| 国产偷拍网站| 欧美综合自拍| 免费视频一二三区| 国产成人精品网站| 四虎视频在线观看| 99热精品在线观看| 免费看国产大AB| 91九九九小逼| 99热精品国产| 欧美一区二区三区大综合| 亚洲美乱| 色香阁在线| 国模限制级电影| 日本 成 人 小说 电影 一区二区| 欧美性爱五月天| 日本天天操| 国产www色在线观看| 密臀成人视频久久久| 99最新日韩偷拍视频| 天天综合网~91综合网| 骚女高跟AV在线| 亚洲日韩东京热一区| 久久久久久久六六| 高清不卡 中文 人妻| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美做爰无码A片视频| 91天堂色男人的天堂| 日韩黄色一区二区三区| 亚洲国产激情国产av| 91综合在线| 亚洲AV无码天美传媒一区| 99热超碰| 丰满搜索结果 -第18页- 久久高清无码| 亚州再线| 日本精品久久久久久久| 夜夜嗨一区| 91丝袜| 在线日韩日本亚洲国产| 亚洲成人在线高清| 欧美久久人人网| 国产高潮AA片免费看| 三级三级三级日本99| 久久久99久9| 成人在线永久| 婷婷精品久久av影视| 国产91 丝袜在线播放00-百度| 欧美精品三区| 国产精品无码久久久久2025| 亚洲综合性网址| 97视频新免费| 美女久久久久久久久久久| 神马视频久久久久久| 精人妻一区二区三区| 啊啊啊免费视频| 眼镜人妻101.com| 超碰97人妻自拍| 91视频在线观看18| 少妇一区二区三区高速| 中文字幕性感少妇av| 情侣开房子拍 日韩无码 女的很漂亮| 色999偷自拍拍| 伊人久久亚洲色欲综合网站 | 天天看天天综合成人网| 狠狠躁天天躁日日躁| 91狠狠狠| 精品三级在线专区| 人妻精品一区二区在线| 久操黄色视频| 少妇内射视频| 亚洲无线观看久久| 草莓精品视频| 伊人97色天使| 亚洲国产91精品一区二区久久| 嗯啊抽插大香蕉网页| 啊好爽受不了无码| 精品色色| 日韩无码AB| 欧美中文综合| 亚洲成?V人片在线观看福利| 欧美性特| 伊人96在线| 亚洲黄片免费在线播放| 丁香六月婷婷综合| 狠狠图片青青草| 91成人无码| 精品国产乱码久久久久久口爆网站| 亚洲综合色男人网| 午夜福利一区二区三区四区五区色婷婷| 亚洲天堂久久久久久粉红视频| 国产精品无码论坛| 激情五月天婷婷| 亚洲激情 欧美色图| 欧美另类丝袜熟女| 亚洲国产成人福利在线观看| 欧美|91色综合| 超碰97.com| 一类av片在线看| 嗯嗯嗯啊啊啊在线免费观看| 久久国产精品视频| 国产人妖的免费的视频| 在线观看十八禁| 免费视频观看60秒| 久久久久久久亚洲Av无码| 熟妇人妻一区二区| 久久久久久久91| 色久桃花影院在线观看| 麻豆婷婷成人一二三| 91高潮| 日本中文字幕在线电影| 国产一区二区三区,在线观看观看| 精品九九九九| 高清无码久操视频| 高清国产av无码| 欧美91网站| 国产色综合亚洲色综合吹潮| 404操逼福利视频| 草b在线 | 91色婷婷综合久久中文字幕二区| 二三四区精品| 成人a级高清视频在线观看| 久久久99久9| 欧洲久久一二线| 五月天丁香| 大粗鳼巴久久久久| av一区二区三区 中文| 色妇91| 久久黄色性爱视频| www.高清无码诱惑一区.com | 欧美亚洲高清晰| 操逼视频亚洲| 精品久久艹| 中日韩熟女| 九九九九一级| 又粗又长又大国产不卡| 日本一区二区成人在线| 人妻在线大香蕉| 国产兽交视频在线播放| 殴美日韩m| 精品无码一区二区三区色欲| 超碰久久性爱| 综合久久少妇中文字幕| 夜夜夜久久| 亚洲乱码精品一区二区| 日韩一999精品| 欧美精品久久久久久久丰满| 嫩草 人人网精品| 久久免费99精品久久久久久| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 日韩精品国模| 91动漫操逼视频| 色九色久| 亚洲色图大香| 呦呦一区| 激情综合av| 大香网站| 台湾佬大香蕉| 91狠狠综合久久久久久| 国产精品一二三区18| 中 文字幕一区二区三四 五 区日 日 骚| 激情 欧美 亚洲 小说| 性性欧美| www.人人cao| 91综合网在线| 青青草吊丝| 中文字幕一区二区三区高清| 亚洲AV在线资源| 99精品久久| 人人爱人人乐人人操| 97久久免费| 亚洲日韩成人性爱视频| 一区二区三区不卡视频| 亚洲精品欧美专业| 404操逼福利视频| 亚洲狠| 久久精品老司| 国产精品无码论坛| 色悠久| 爱爱久久| 色区久久| 1769国内精品视频| 久久女女| 宅男午夜在线视频| 多乙久久久久久| 91亚洲欧洲| 色制服丝袜夫妻av一区| 超碰碰碰碰| 国产精品久久久久久高清无码免费看| 久久精品视| 久久亚洲影院一区二区| 女人被男人桶爽视频网站| 东北女人性交| 欧美中文字幕一区 | 亚洲AV色图一区| 97干日韩| 91成人久久| 丁香五月社区| 国产无码久久高清| 97资源欧美| 凹凸视频在线观看伊人| 亚洲资源站| 大乔未久88一区| 免费看毛片操穴| 国产精品嫩草影院免费| 超碰在线一区| 天天天堂影视日韩亚洲91| 中文字暮97| 国产精品视频白浆免费| 国产成人亚洲精品无码最新在线| 女人18精品一区二区三区| 中文字幕视频2区| 久久香蕉影院| 高清无码 国产精品| 成人羞羞视频国产| 亚洲熟女一区二区| 北京美女一区二区| 日韩在线视频1234| 精品超碰国产| 色官网色综合| 激情小说图片亚洲首页| 亚洲无码一区成人免费午夜| 91国精产品| 超碰97玖玖爱| 极品五月天噜噜| 日本免费亚洲欧美| 国产精品黄色三级av| 精品无码久久久久久久杏吧| 天天躁日日躁狠狠狠躁| 啊啊啊啊啊好舒服视频| 色诱中文字幕| 午夜男人天堂| 色色激情五月天| 91操人| 国产精品亚洲无码| 国产精品成久久久久午夜午夜| 91精品导航| 熟女熟妇一区二区三区视频| 欧美久久人妻少妇一区二区| 97一区二区蜜臀| 95精品在线| 69人妻精品一区二区绯色| 怡红院一区二区熟女人妻| 欧美一级国产一级| 国产一二三在线视频五十路| 九九九九九九免费视频| 天天色怡春院| 91性高| 日日橹狠狠爱欧美超碰| 伊人97色天使| 色妹子A V| 久久精品一区二区三区不卡| 日韩操人| 亚洲 另类 丝袜 自拍 动漫| 欧美天天| 午夜在线播放| 精品日日人妻| 久久老熟女| 亚洲女优有码无码高清| 5252色欧美在线男人的天堂| 久草视频在线视频在线视频在线观看| 肉丝无码中文高清| 色97| 欧美人人曰人人操人人射射| 高清不卡 中文 人妻| 亚洲欧洲精品视频发布| 99热超碰| 德国一二三不卡| 男人下部插入女人下部 | 97频视在线| 少妇专区一二三四五| 国产免费久久精品99re韩国| 久久爽爽精品| 日本中文字幕一区| 亚洲国产中文字幕| 蜜臀一二三区| 夜夜高潮夜夜爽夜夜爱爱一区 | 国产精品久久久久久久久久久久久久吹 | 亚洲国产婷婷在线播放| 丁香婷婷色五月| 四虎影院成年人片| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 国产女人与拘做受视频免费| 欧美 日韩 亚洲 春色| 婷婷去俺也去六月色| 久久直播国产| 国产精品久久伊人| 色情综合网| 2001天天操| 午夜欧美神马久久久久| 超碰久久精品| 超碰在线日韩一区| 亚洲欧美97| 美女裸体无遮挡永久免费观看网站| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 欧美亚洲国产自久久| 少妇500双飞99| 成人欧美日超碰| 精品熟妇视频一区二区| 九九九九九精品| 亚洲一卡二卡在线免费| 欧洲亚洲人妻无码中字久久三区四区 | 78超碰| 亚洲一区操| 国产精品探花在线| 97色色网| 亚洲自拍另类丝袜综合| 高清不卡 中文 人妻| 99re视频在线播放青草| 凹凸视频在线一区二区| 草草影院最新网址| 国产成人+综合亚洲+天堂| 九九九午夜| 超碰97欧美日韩| 日韩精品-原创伙伴| 综合国产影视三级| 蜜臀AV网站| 国产日本熟女顶级一区二区三区视频| 欧美情色男人的天堂| 96精品久久久| 国产偷人伦激情在线观看| 欧美日韩国产高清在线一二三区| 丁香六月婷婷久久综合| 亚洲少妇色图自慰直播| 美女黄页网站| 日逼逼免费看| 亚洲无码色| 国产精品丝袜久久亚洲不卡| 人人妻人人爽一区二区三区| 久久性爱精品一区| 欧美日韩91| 91黑丝美女| 一区二区不卡视| 激情视屏国产乱伦强奸| 久久9亚洲| 天美传媒精品久久视频| 成人26uuu| 欧美激情综合色综合啪啪五月| 一区二区三区无卡视频在线观看| 亚洲人综合19| 国产精品成人福利在线| 好爽视频在线观看| 日韩欧美成人午夜福利| 欧美午夜精品久久久久久3D| 亚洲天堂电影网| 久久在线观看免费视频| 亚洲精品视频在线播放| 日本蜜桃| 成·人免费午夜在线观看| 久久草在线综合视频| 夜草欧美| 99久久无码| 五月丁香色综合| 日韩欧美蜜桃精品久久中文字幕久久| 亚洲欧美日韩制服另类| 日本色婷婷| 色偷偷综合91久久噜噜| 色翁荡息又大又硬又粗又爽| 97资源超碰| 三级色影综合网| 国产无码一二三区| 久久久专区| 人妻干天天| 有码人妻系列| 99精品人妻| 伊人久久艹| AV男人天堂网| 日本免费中文字幕在线| 啊啊啊啊啊操我视频| 欧美色性情| 久久九九网| 91热色| 欧美性爱十八禁| 伊人久久蜜月| 26uuu欧美日韩| 欧美熟女激情| 在线午夜成人无码视频| 黑丝内射一区二区三区| 乱人乱色一区二区三区免费| 国产真实野战在线视频| 亚洲男人的天堂在线看| 精品人妻1区| 在免费jIzzjIzz在线视频| 在线午夜成人无码视频| 丁香五月天激情综合| 欧美图片校园春色|