精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基礎使用:編寫Linux 桌面腳本

系統 Linux
本系列文章探究了如何使用 Python 來為 GNOME 桌面、screenlet 框架和 Nautilus 創建腳本,進而提供高生產率環境。桌面上的腳本啟用拖放功能,可快速訪問您經常使用的信息和服務。本期我們將了解如何使用 screenlet 小部件工具包構建桌面應用程序。

 本系列文章探究了如何使用 Python 來為 GNOME 桌面、screenlet 框架和 Nautilus 創建腳本,進而提供高生產率環境。桌面上的腳本啟用拖放功能,可快速訪問您經常使用的信息和服務。本期我們將了解如何使用 screenlet 小部件工具包構建桌面應用程序。

為 Linux 桌面開發應用程序通常需要一些類型的圖形用戶界面(Graphical User Interface,GUI)框架作為構建基礎。選項包括針對 GNOME 桌面的 GTK+,和針對 K 桌面環境(K Desktop Environment,KDE)的 Qt。這兩個平臺提供了開發人員構建 GUI 應用程序所需的一切,包括庫和布局工具以便創建用戶看到的窗口。本文向您展示如何基于 screenlet 小部件工具包構建桌面生產率應用程序。

一些現有的應用程序將歸為桌面生產率類別,包括 GNOME Do 和 Tomboy。這些應用程序通常允許用戶直接從桌面與它們進行交互,方法為通過特定的鍵組合或從另一個應用程序(如 Mozilla Firefox)進行拖放。Tomboy 用作桌面筆記工具,支持從其他窗口拖放文本。

Screenlet 入門

您需要安裝一些程序以便開始開發 screenlet。首先,使用 Ubuntu 軟件中心或命令行安裝 screenlets 包。在 Ubuntu 軟件中心內,在 Search框中鍵入 screenlets。您應該看到主要程序包和文檔的獨立安裝包兩個選項。

Python 和 Ubuntu您可使用 Python 對 screenlet 編程。Ubuntu 10.04 的基本安裝已包含了 Python 2.6,因為許多實用程序都依賴它。您可能需要其他庫,具體取決于您的應用程序要求。對于本文,我在 Ubuntu 10.04 上安裝并測試了一切。下一步,從 screenlets.org 站點下載測試 screenlet 源代碼。測試 screenlet 位于 src/share/screenlets/Test 文件夾并使用 Cairo 和 GTK,這些也是需要您安裝的。測試程序的整個源代碼位于 TestScreenlet.py 文件中。在您最喜愛的編輯器中打開此文件來查看 screenlet 的基礎結構。

Python 高度面向對象,因此使用 class關鍵字來定義對象。在本示例中,該類被命名為 TestScreenlet并具有一些已定義的方法。在 TestScreenlet.py 中,請注意下面代碼中的第 42 行:

def __init__(self, **keyword_args):

Python 使用前后雙下劃線(__)符號,通過預定義行為識別系統函數。在本例中,__init__函數針對類的構造函數的所有的意圖和目的,且包含將要在創建對象的新實例時執行的任何數量的初始化步驟。按照慣例,每個類方法的第一個參數都是對該類的當前實例的引用,并命名為 self。通過此行為,可以方便地使用 self來引用它所在的實例的方法和屬性:

self.theme_name = "default"

Screenlet 框架定義了一些命名慣例和標準,在 screenlets.org 中的開發人員頁面有概述。還有 screenlet 包的源代碼以及應用程序編程接口(Application Programming Interface,API)文檔的鏈接。查看代碼還使您可以深入了解每一個函數可以通過調用參數做什么以及返回什么。

編寫簡單的 screenlet

Screenlet 的基本組成部分包括圖標文件、源代碼文件和主題文件夾。主題文件夾包含不同主題的附加文件夾。您將在 screenlets.org 上發現樣例模板和幫助您入門所需的文件和文件夾。

對于第一個示例來說,使用已提供的模板來創建基本的 “Hello World” 應用程序。此基本應用程序的代碼如清單 1 所示。

清單 1. Hello World screenlet 的 Python 代碼

#!/usr/bin/env python

import screenlets

class HelloWorldScreenlet(screenlets.Screenlet):

__name__ = 'HelloWorld'

__version__ = '0.1'

__author__ = 'John Doe'

__desc__ = 'Simple Hello World Screenlet'

def __init__(self, **kwargs):

# Customize the width and height.

screenlets.Screenlet.__init__(self, width=180, height=50, **kwargs)

def on_draw(self, ctx):

# Change the color to white and fill the screenlet.

ctx.set_source_rgb(255, 255, 255)

self.draw_rectangle(ctx, 0, 0, self.width, self.height)

# Change the color to black and write the message.

ctx.set_source_rgb(0, 0, 0)

text = 'Hello World!'

self.draw_text(ctx, text, 10, 10, "Sans 9" , 20, self.width)

if __name__ == "__main__":

import screenlets.session

screenlets.session.create_session(HelloWorldScreenlet)

每一個應用程序都必須導入 screenlet 框架并創建新的會話。還有一些其他的最低要求,包括任何初始化步驟以及基本繪圖函數,以便在屏幕上呈現小部件。TestScreenlet.py 示例具有用來初始化對象的 __init__方法。在本例中,您將看到一行,包含對 screenlet 的 __init__方法的調用,它設置要為此應用程序創建的窗口的初始寬度和高度。

此應用程序惟一需要的其他函數是 on_draw方法。此例程將框的背景顏色設置為白色,并使用先前定義的維度繪制矩形。它將文本顏色設置為黑色,將源文本設置為 “Hello World!”,然后再繪制該文本。圖 1 顯示了在運行此 screenlet 時您應該看到什么。在文本的后面部分,您在這些簡單塊上創建更有用的應用程序時,此基本結構一直存在。

圖 1. 基本 screenlet 結構

圖 1. 基本 screenlet 結構

在更復雜的 screenlet 中重用代碼

一個有關編寫 screenlet 的好處就是能夠重用來自其他應用程序的代碼。通過基于 Python 語言的廣泛開源項目,代碼重用開拓了無限的可能性。雖然每一個 screenlet 都有相同的基本結構,但是定義了的更多方法來處理不同的行為。清單 2 顯示了名為TimeTrackerScreenlet的樣例應用程序。

清單 2. Time Tracker screenlet 的 Python 代碼

#!/usr/bin/env python

import screenlets

import cairo

import datetime

class TimeTrackerScreenlet(screenlets.Screenlet):

__name__ = 'TimeTrackerScreenlet'

__version__ = '0.1'

__author__ = 'John Doe'

__desc__ = 'A basic time tracker screenlet.'

theme_dir = 'themes/default'

image = 'start.png'

def __init__(self, **keyword_args):

screenlets.Screenlet.__init__(self, width=250, height=50, **keyword_args)

self.add_default_menuitems()

self.y = 25

self.theme_name = 'default'

self.on = False

self.started = None

def on_draw(self, ctx):

self.draw_scaled_image(ctx, 0, 0, self.theme_dir + '/' +

self.image, self.width, self.height)

def on_mouse_down(self, event):

if self.on:

self.started = datetime.datetime.now()

self.image = 'stop.png'

self.on = False

else:

if self.started:

length = datetime.datetime.now() - self.started

screenlets.show_message(None, '%s seconds' %

length.seconds, 'Time')

self.started = None

self.image = 'start.png'

self.on = True

def on_draw_shape(self, ctx):

self.on_draw(ctx)

ctx.rectangle(0, 0, self.width, self.height)

ctx.fill()

if __name__ == "__main__":

import screenlets.session

screenlets.session.create_session(TimeTrackerScreenlet)

此示例引入了幾個在您開始構建任何有用的程序以前需要了解的概念。所有的 screenlet 應用程序都具有響應特定用戶操作或事件(如鼠標單擊或拖放操作)的能力。在此示例中,鼠標按下事件用作更改圖標狀態的觸發器。在 screenlet 運行時,顯示 start.png 圖像。單擊該圖像將其變更為 stop.png 圖像并在 self.started中記錄開始時間。單擊停止圖像將該圖像變更回 start.png 并顯示從單擊第一個圖像開始所經過的時間量。

響應事件是另一個關鍵功能,使得構建任何數量的不同應用程序成為可能。雖然此示例僅使用 mouse_down事件,但是您可以對由 screenlet 框架或系統事件(如計時器)生成的其他事件使用相同的方法。此處引入的第二個概念是持久狀態。因為您的應用程序是持續運行的,等待事件來觸發一些操作,就能夠在內存中保持對項目的跟蹤,如單擊開始圖像的時間。如有必要,您也可以將信息保存到磁盤以供日后檢索。

通過 screenlet 自動化任務

現在您已經了解了開發 screenlet 背后的概念,讓我們將所有這些放到一起。大多數用戶現在都在使用 Really Simple Syndication (RSS) 閱讀器來閱讀博客和新聞提要。對于這個最后的示例來說,您將構建可配置的 screenlet ,它監視特定提要來查找關鍵字并在文本框中顯示任何重大新聞。結果將是可單擊的鏈接,可在您默認的 Web 瀏覽器中打開文章。清單 3 顯示了 RSS Search screenlet 的源代碼。

清單 3. RSS Search screenlet 的 Python 代碼

#!/usr/bin/env python

from screenlets.options import StringOption, IntOption, ListOption

import xml.dom.minidom

import webbrowser

import screenlets

import urllib2

import gobject

import pango

import cairo

class RSSSearchScreenlet(screenlets.Screenlet):

__name__ = 'RSSSearch'

__version__ = '0.1'

__author__ = 'John Doe'

__desc__ = 'An RSS search screenlet.'

topic = 'Windows Phone 7'

feeds = ['http://www.engadget.com/rss.xml',

'http://feeds.gawker.com/gizmodo/full']

interval = 10

__items = []

__mousesel = 0

__selected = None

def __init__(self, **kwargs):

# Customize the width and height.

screenlets.Screenlet.__init__(self, width=250, height=300, **kwargs)

self.y = 25

def on_init(self):

# Add options.

self.add_options_group('Search Options',

'RSS feeds to search and topic to search for.')

self.add_option(StringOption('Search Options',

'topic',

self.topic,

'Topic',

'Topic to search feeds for.'))

self.add_option(ListOption('Search Options',

'feeds',

self.feeds,

'RSS Feeds',

'A list of feeds to search for a topic.'))

self.add_option(IntOption('Search Options',

'interval',

self.interval,

'Update Interval',

'How frequently to update (in seconds)'))

self.update()

def update(self):

"""Search selected feeds and update results."""

self.__items = []

# Go through each feed.

for feed_url in self.feeds:

# Load the raw feed and find all item elements.

raw = urllib2.urlopen(feed_url).read()

dom = xml.dom.minidom.parseString(raw)

items = dom.getElementsByTagName('item')

for item in items:

# Find the title and make sure it matches the topic.

title = item.getElementsByTagName('title')[0].firstChild.data

if self.topic.lower() not in title.lower(): continue

# Shorten the title to 30 characters.

if len(title) > 30: title = title[:27]+'...'

# Find the link and save the item.

link = item.getElementsByTagName('link')[0].firstChild.data

self.__items.append((title, link))

self.redraw_canvas()

# Set to update again after self.interval.

self.__timeout = gobject.timeout_add(self.interval * 1000, self.update)

def on_draw(self, ctx):

"""Called every time the screenlet is drawn to the screen."""

# Draw the background (a gradient).

gradient = cairo.LinearGradient(0, self.height * 2, 0, 0)

gradient.add_color_stop_rgba(1, 1, 1, 1, 1)

gradient.add_color_stop_rgba(0.7, 1, 1, 1, 0.75)

ctx.set_source(gradient)

self.draw_rectangle_advanced (ctx, 0, 0, self.width - 20,

self.height - 20,

rounded_angles=(5, 5, 5, 5),

fill=True, border_size=1,

border_color=(0, 0, 0, 0.25),

shadow_size=10,

shadow_color=(0, 0, 0, 0.25))

# Make sure we have a pango layout initialized and updated.

if self.p_layout == None :

self.p_layout = ctx.create_layout()

else:

ctx.update_layout(self.p_layout)

# Configure fonts.

p_fdesc = pango.FontDescription()

p_fdesc.set_family("Free Sans")

p_fdesc.set_size(10 * pango.SCALE)

self.p_layout.set_font_description(p_fdesc)

# Display our text.

pos = [20, 20]

ctx.set_source_rgb(0, 0, 0)

x = 0

self.__selected = None

for item in self.__items:

ctx.save()

ctx.translate(*pos)

# Find if the current item is under the mouse.

if self.__mousesel == x and self.mouse_is_over:

ctx.set_source_rgb(0, 0, 0.5)

self.__selected = item[1]

else:

ctx.set_source_rgb(0, 0, 0)

self.p_layout.set_markup('%s' % item[0])

ctx.show_layout(self.p_layout)

pos[1] += 20

ctx.restore()

x += 1

def on_draw_shape(self, ctx):

ctx.rectangle(0, 0, self.width, self.height)

ctx.fill()

def on_mouse_move(self, event):

"""Called whenever the mouse moves over the screenlet."""

x = event.x / self.scale

y = event.y / self.scale

self.__mousesel = int((y -10 )/ (20)) -1

self.redraw_canvas()

def on_mouse_down(self, event):

"""Called when the mouse is clicked."""

if self.__selected and self.mouse_is_over:

webbrowser.open_new(self.__selected)

if __name__ == "__main__":

import screenlets.session

screenlets.session.create_session(RSSSearchScreenlet)

基于前兩個示例的概念構建,此 screenlet 使用了一些新的概念,包括 config 頁面。在 on_init例程中,為用戶添加三個選項來指定:用于跟蹤的 RSS 提要列表、用于搜索的感興趣的主題以及更新間隔。然后更新例程在運行時使用所有這些內容。

Python 對于此種類型的任務來說是很好的語言。標準庫包括您從 RSS 提要加載可擴展標記語言(Extensible Markup Language,XML)到可搜索列表所需的一切。在 Python 中,此任務只需三行代碼:

raw = urllib2.urlopen(feed_url).read()

dom = xml.dom.minidom.parseString(raw)

items = dom.getElementsByTagName('item')

這三行中使用的庫包括 urllib2和 xml。在第一行中,在 feed_url地址上發現的完整內容被讀取到字符串行。下一步,因為您知道該字符串包含 XML,所以使用 Python XML 庫 dom.minidom.parseString方法來創建由節點對象構成的文檔對象。

最后,創建與名為 item的單個 XML 元素對應的元素對象列表。然后,您可以迭代此列表以便搜索您的目標主題。使用 for關鍵字,Python 具有很好的迭代項目列表的方式,如以下代碼段所示:

for item in items:

# Find the title and make sure it matches the topic.

title = item.getElementsByTagName('title')[0].firstChild.data

if self.topic.lower() not in title.lower(): continue

將每個匹配您標準的項目添加到當前顯示的列表,該列表與 screenlet 的實例關聯。使用此方法可以運行相同 screenlet 的多個實例,每一個實例經配置都可搜索不同的主題。更新函數的最后部分用更新的列表重新繪制文本并基于 config 頁面上的間隔觸發新的更新計時器。在默認情況下,計時器每 10 秒觸發一次,但是您可以將其更改為您想要的任何值。此計時器機制來自 gobject庫,是 GTK 框架的一部分。

此應用程序大大擴展了 on_draw方法以便適應您的新功能。Cairo 和 Pango 庫都允許創建一些用于文本窗口的效果。使用漸進使小部件的背景很漂亮且具有圓角和半透明。使用 Pango 為布局添加一些函數來輕松保存和存儲當前上下文。它還提供了一種基于 screenlet 當前大小生成可縮放字體的方式。

on_draw方法中最棘手的部分是處理用戶懸停在列表中的某個項目時。通過使用 for"關鍵字,您可以迭代 screenlet 中的項目以便查看用戶是否懸停在特定項目上。如果懸停在特定項上,則設置已選擇的屬性并更改顏色以便提供視覺反饋。您還可以使用一點標記,將鏈接屬性設置為粗體 —也許并不是處理問題最精致或有效的方式,但卻是有用的。在用戶單擊框中的鏈接之一時,帶有目標 URL 的 Web 瀏覽器啟動。您可以在 on_mouse_down函數中看到此功能。Python 及其庫允許通過一行代碼來啟動默認瀏覽器顯示所期望的頁面。

圖 2. 示例 screenlet

圖 2. 示例 screenlet

結束語

通過 Python 和 screenlet 構建有用的桌面應用程序并不是困難的任務。最大的障礙是適應 screenlet API 以及在不同函數之間傳遞控件的技巧。雖然該文檔可能不便于閱讀,但是包含了您使用不同的函數所需要的信息。快速開始工作的更好辦法是修改接近您的要求的現有 screenlet。

原文鏈接:http://www.ibm.com/developerworks/cn/linux/l-script-linux-desktop-1/index.html?ca=drs-

【編輯推薦】

  1.  在Linux下靈活使用expect腳本的小竅門
  2. 2010年度報告:是誰在編寫Linux內核?
  3. Linux嵌入式中PPP和PPP-ON腳本的編寫
責任編輯:黃丹 來源: IBMDW
相關推薦

2009-10-26 12:17:03

linux腳本編寫

2022-06-21 09:26:21

Shell腳本JavaScript

2023-05-20 17:45:25

LinuxShell

2017-08-11 17:20:07

LinuxShell

2023-06-28 00:05:44

人工智能聊天機器人ChatGPT

2016-10-08 20:58:50

awkLinux編寫腳本

2012-08-01 14:14:51

IBMdW

2020-01-06 11:50:25

LinuxEquinox桌面

2019-12-30 10:40:57

KDE PlasmaLinux桌面

2021-05-12 07:50:05

Linux運維Linux系統

2019-08-14 08:03:49

LinuxShell腳本web服務

2019-12-09 14:50:44

LinuxWindow Make桌面

2012-05-24 09:13:20

2019-12-25 11:47:27

LinuxFVWM

2009-06-30 11:33:55

腳本JSP教程

2017-06-19 15:46:08

LinuxBash腳本技巧

2017-08-15 11:32:21

LinuxBash腳本技巧

2019-12-12 10:23:34

Linux 代碼 開發

2010-03-05 10:24:33

2010-03-05 10:50:17

點贊
收藏

51CTO技術棧公眾號

成人免费淫片视频软件| 中日韩午夜理伦电影免费| 黄色一级片在线看| 亚洲欧美综合在线观看| 日韩激情中文字幕| 波霸ol色综合久久| 久久久久久无码精品人妻一区二区 | 18成人免费观看视频| 亚洲另类图片色| 免费人成视频在线播放| 卡通欧美亚洲| 亚洲高清在线精品| 一区二区三区国| 香蕉视频国产在线| 啪啪小视频网站| 91精品啪在线观看国产爱臀| 一本色道**综合亚洲精品蜜桃冫| 一本一本a久久| 日本韩国精品一区二区| 久久国产欧美日韩精品| 人体精品一二三区| 久草综合在线视频| 欧美日韩中文一区二区| 精品99一区二区| 奇米777在线视频| 国产a亚洲精品| 黑人巨大精品欧美一区二区免费| 99热这里只有精品7| 国产精品一区二区婷婷| a美女胸又www黄视频久久| 国产一区二区在线播放| 精品久久久久久久久久久久久久久久| 黄色亚洲免费| 欧美成在线观看| 五月天精品在线| 国产一区二区欧美| 亚洲精品国产成人| 97精品人妻一区二区三区蜜桃| 四虎永久精品在线| 欧美日韩一本到| 欧美私人情侣网站| 中文字幕乱码在线播放| 午夜久久久影院| 成年女人18级毛片毛片免费| 中文字幕中文字幕在线十八区 | 国产成人免费在线观看视频| 中文字幕av一区二区三区人| 日韩电影中文 亚洲精品乱码| 欧美一区二区三区影院| 3d动漫一区二区三区在线观看| 欧美亚州韩日在线看免费版国语版| 国产精品丝袜久久久久久消防器材| 国产精品蜜臀| 亚洲成人手机在线| 欧美激情 国产精品| segui88久久综合9999| 亚洲一区二区三区国产| 日本大片免费看| 久久99亚洲网美利坚合众国| 亚洲综合免费观看高清完整版| 强开小嫩苞一区二区三区网站| 巨大荫蒂视频欧美另类大| 亚洲欧洲日韩一区二区三区| 国产精品美女在线播放| av软件在线观看| 亚洲国产精品尤物yw在线观看| 国产精品videossex国产高清| 久草在线视频网站| 亚洲 欧美综合在线网络| 亚洲中文字幕无码专区| 欧美91看片特黄aaaa| 欧美日韩综合在线免费观看| 九色porny自拍| 精品中文字幕一区二区三区四区| 欧美www视频| 你懂的在线观看网站| 神马午夜久久| 中文字幕亚洲一区二区三区| 三级黄色在线观看| 欧美视频官网| 欧美一级片久久久久久久| 成人毛片一区二区三区| 久久精品国产一区二区三区免费看| 国产欧美日韩中文| 亚洲免费成人网| 久久综合九色综合欧美98 | 亚洲永久精品一区| 亚洲男人影院| 91精品国产综合久久香蕉的用户体验| h狠狠躁死你h高h| 99久久伊人精品| 亚洲一区二区三区精品动漫| 欧美xxxx免费虐| 色综合久久综合网欧美综合网| 色婷婷狠狠18| 大型av综合网站| 国产性色av一区二区| 欧美做爰爽爽爽爽爽爽| 国产精品最新自拍| 91精品美女在线| 亚洲av电影一区| 亚洲欧洲精品成人久久奇米网| 精品国产av无码一区二区三区| 日韩天堂在线| 欧美精品一区二区三区高清aⅴ| 女人又爽又黄免费女仆| 欧美片第1页综合| 国产精品96久久久久久又黄又硬| 国产精品一区二区三区在线免费观看 | 亚洲国产精品精华液网站| 99久久国产宗和精品1上映| 欧美久久一区二区三区| 伊人男人综合视频网| 久久久久成人精品无码| 欧美a一区二区| 国产乱码精品一区二区三区不卡| 91视频在线观看| 精品久久香蕉国产线看观看gif| 一区二区免费av| 曰本一区二区三区视频| 欧美黑人狂野猛交老妇| 亚洲中文一区二区三区| 91日韩在线专区| 日韩精品免费一区| 四虎地址8848精品| 伊人久久综合97精品| 伊人手机在线视频| 懂色中文一区二区在线播放| 在线丝袜欧美日韩制服| 欧美××××黑人××性爽| 亚洲国产一区自拍| 九九精品在线观看视频| 精品综合久久久久久8888| 欧美日韩精品综合| 波多野结衣在线播放| 欧美一区二区三级| 二区三区四区视频| 久久电影网电视剧免费观看| 欧洲一区二区日韩在线视频观看免费 | 国产区在线观看成人精品| 国产网站免费在线观看| 国产精品jk白丝蜜臀av小说| 欧美精品免费在线| 国产女18毛片多18精品| 最近日韩中文字幕| 免费网站在线观看黄| 国产精品99一区二区三区| 国产精品免费久久久| 九九在线视频| 欧美中文字幕一区二区三区 | 国产99视频在线观看| 亚洲欧洲精品视频| 精品成人在线视频| 亚洲国产综合视频| 亚洲女优在线| 日本黄网免费一区二区精品| 欧美日韩免费观看视频| 国产亚洲成精品久久| 在线观看xxxx| 亚洲精品视频在线| 日韩少妇一区二区| 国产精品乱看| 日本不卡二区| 精品176极品一区| 俺也去精品视频在线观看| 国产一区二区三区黄片| 国产精品麻豆久久久| 福利视频999| 欧美日韩精品一本二本三本| 成人在线视频电影| 三级中文字幕在线观看| 亚洲新声在线观看| 国产麻豆免费观看| 亚洲国产精品久久久久婷婷884| 182在线视频| 三级欧美韩日大片在线看| 亚洲激情一区二区| 亚洲免费视频二区| 国产视频视频一区| 国产性生活一级片| 一区精品久久| 欧美欧美一区二区| 亚洲我射av| 国语自产偷拍精品视频偷 | 91视频com| 蜜臀av免费观看| 国产精品国码视频| 日韩欧美三级电影| 视频一区在线| 日韩免费观看高清| 伊人春色在线观看| 精品一区精品二区| 国产精品无码久久av| 午夜精品免费在线| 男人天堂资源网| 国产成人av电影免费在线观看| 免费黄色福利视频| 91精品国产福利在线观看麻豆| 国产在线精品一区二区中文| 成人看片在线观看| 久久免费视频这里只有精品| 国产69久久| 精品成a人在线观看| 在线播放国产一区| 五月天欧美精品| 精品国产精品国产精品| 久久久亚洲精品一区二区三区| 91 在线视频观看| 国产精品亚洲综合久久| 亚洲天堂第一区| 欧美自拍偷拍| 久久久综合亚洲91久久98| 国产区一区二| 国产伦精品一区二区三区精品视频| 国产偷倩在线播放| www.午夜精品| 国产色a在线| 亚洲福利视频久久| 91极品身材尤物theporn| 欧美日韩日本国产| 精品无码免费视频| 亚洲图片欧美激情| 一级黄色毛毛片| 91女厕偷拍女厕偷拍高清| 精品人妻一区二区乱码| 久久99精品视频| 不卡av免费在线| 亚洲少妇在线| 免费av手机在线观看| 欧美日韩免费| 国产精品av免费观看| 99久久99热这里只有精品| 日韩精品久久久| 在线日韩网站| 美国av一区二区三区| 国产亚洲精品美女久久 | 中文精品一区二区| 久久久久一区二区| 天天躁日日躁成人字幕aⅴ| 国产精品手机在线| aiai久久| 国产精品国产亚洲精品看不卡15| 亚洲精品18| 超碰97在线播放| 白嫩白嫩国产精品| 国产精品一区二区三区观看| 91在线一区| 国产98在线|日韩| 成人另类视频| 国产一区高清视频| 色天下一区二区三区| 精品免费国产| 九九热精品视频在线观看| 欧美1o一11sex性hdhd| 免费欧美视频| 日韩久久精品一区二区三区| 欧洲杯什么时候开赛| 午夜精品一区二区在线观看 | 少妇精品在线| 国产三区精品| 亚洲激情播播| 亚洲国产欧洲综合997久久| 日韩精品一区二区三区免费观影| 亚洲精品在线免费看| 久久久久久久久久久9不雅视频 | 国产亚洲毛片| 丰满少妇在线观看| 久久精品国产精品亚洲精品| 99中文字幕在线| 粉嫩一区二区三区在线看 | 国产精品人人做人人爽人人添| 欧美人与禽zoz0善交| 亚洲欧洲综合另类在线| 精品无码人妻一区二区三| 懂色av中文一区二区三区天美| 久久久国产高清| 欧美午夜精品久久久久久超碰| 国产美女精品视频国产| 精品美女被调教视频大全网站| 性xxxxbbbb| 色吧影院999| 久久国产精品黑丝| 国产精品久久久久久av福利| 国产精品日本一区二区三区在线| 国产精品视频免费观看| 国产精品手机在线播放 | 女人十八毛片嫩草av| 亚洲精品欧美二区三区中文字幕| 久久久久久激情| 91福利资源站| 亚洲黄色在线免费观看| 亚洲天堂色网站| 青春草在线视频| 国产精品v片在线观看不卡| 欧美精品三级在线| 日韩在线三区| 最新日韩av| 亚洲高清在线不卡| 久久先锋影音av| 91视频综合网| 欧美图片一区二区三区| 亚洲精品97久久中文字幕| 国产一区二区三区欧美| 草莓视频丝瓜在线观看丝瓜18| 国产精品久久久久久久久| 中文无码日韩欧| 一本久道久久综合| 亚洲女同在线| 免费看毛片的网站| 亚洲少妇30p| 久久精品国产亚洲av麻豆蜜芽| 精品国产一区二区三区久久久蜜月 | 9色porny自拍视频一区二区| 男人晚上看的视频| 色一情一伦一子一伦一区| 亚洲黄色a级片| 久久不射电影网| 国产欧美自拍| 欧美综合77777色婷婷| 一区二区三区国产盗摄 | 国产又粗又黄又爽| 亚洲日本中文字幕免费在线不卡| 天使と恶魔の榨精在线播放| 国产精品自拍视频| 欧美猛男做受videos| 欧美 日本 亚洲| 成人精品免费看| 黄色一级片在线| 欧美一区二区在线免费播放| av福利精品| 国产精品日本精品| 欧美精品色图| 免费日韩视频在线观看| 97精品国产露脸对白| 国产精品30p| 亚洲精品在线一区二区| 欧洲黄色一区| 不卡一区二区三区视频| 欧美va亚洲va日韩∨a综合色| 特黄视频免费观看| 中文字幕一区不卡| 亚洲一区二区激情| www.欧美精品一二三区| 中文字幕日本一区| 吴梦梦av在线| 国产一区二区三区在线观看精品 | 国产大片在线免费观看| 国产aⅴ夜夜欢一区二区三区| 亚洲裸色大胆大尺寸艺术写真 | 久久99精品国产麻豆婷婷| 亚洲av毛片基地| 欧美三级韩国三级日本三斤 | 97精品国产97久久久久久免费| 亚洲综合影院| 欧美视频免费看欧美视频| 99久久精品国产观看| 欧美 日韩 精品| 国产亚洲精品综合一区91| 国产亚洲精彩久久| 免费观看中文字幕| 国产精品123| 日韩美女一级片| 亚洲欧美精品伊人久久| 日本一区二区电影| 最新欧美日韩亚洲| 国产a精品视频| 日韩欧美大片在线观看| 亚洲欧美国产精品| 国产成人精品一区二区三区视频 | 日韩欧美成人激情| 99久久精品免费看国产小宝寻花| 九色一区二区| 免费一级片91| 欧美精品色哟哟| 亚洲美女中文字幕| 亚洲伊人伊成久久人综合网| 国产成人艳妇aa视频在线| 久久综合久久99| 国产精品一级二级| 91国内在线视频| 日韩激情图片| 无码人妻一区二区三区免费n鬼沢| 精品久久久久久亚洲精品| www.久久热.com| 国产高清自拍一区| 日韩精品欧美成人高清一区二区| 中文字幕资源站| 亚洲精品国产精品国自产观看浪潮 | 五月婷婷六月综合| 国产又黄又粗又猛又爽的视频| 欧美三级资源在线| 91豆花视频在线播放| 亚洲激情一区二区| 91原创在线视频| 国产99999| 国产精品久久97| 亚洲视频播放| 久久久久久久久99| 国产一区二区日韩精品欧美精品| 综合欧美亚洲|