Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
python½çÃæ | ʵսTkinterͼÐνçÃæ¿ª·¢
 
×÷ÕßêdzƣºÓëÑô¹â¹²½øÔç²Í
  2932  次浏览      28
 2019-12-13
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜpython½çÃæ¿ª·¢ÖÐһЩ×î³£Óõĸ÷¸ö¿Ø¼þ²¼¾Ö¡¢ÊôÐԵľßÌåʵÏÖ¹ý³Ì£¬Ï£Íû¶Ô´ó¼ÒÓаïÖú¡£
±¾ÎÄÀ´×ÔÓÚ¼òÊé £¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­£¬ÍƼö¡£

ÏÂÃæÕâÕžÍÊÇʵÏÖµÄÕûÌå½çÃæµÄʾÒâͼ

»ù±¾¹¦ÄܽéÉÜ£º

µã»÷°´¼ünext video»áÔÚÏÂÃæµÄ½çÃæ²¥·ÅÊÓÆµ

ÊÓÆµ²¥·ÅÍê³ÉºóÔÚÔ¤²âÓï¾äºóµÄÎı¾¿òÖгöÏÖ¶Ô¸ÃÊÓÆµµÄÓïÒåÃèÊö

µã»÷°´¼ü±ê×¢Óï¾ä¿ÉÒÔÔÚÆäºóµÄÎı¾¿òÖÐչʾ¶Ô¸ÃÊÓÆµµÄ±ê×¢Óï¾ä

ÕâÆªÎÄÕÂÉæ¼°µÄ֪ʶµã»¹ÊÇͦ¶àµÄŶ£º

Tkinter»ù±¾¿Ø¼þʵÏÖ

TKinter¿Ø¼þÊôÐÔÓÅ»¯

TkinterʵÏÖÊÓÆµ²¥·Å

ThreadingÄ£¿éʵÏÖ¶àÏ̱߳à³Ì

1 ¾ßÌåʵÏÖ

1.0 µ¼Èë°ü¡¢´´½¨½çÃæÀà

from Tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
if __name__=='__main__':
app = Application()
# to do
app.mainloop()

1.1 ÉèÖô°¿Ú±êÌâ¡¢½çÃæ×î´ó»¯

¾ßÌåµÄº¯ÊýÈçÏÂËùʾ£¬ÏÈ»ñµÃµ±Ç°ÆÁÄ»µÄ´óС£¬È»ºóÉèÖô°¿Ú´óС¡£

def window_init(self):
self.master.title('welcome to video-captioning system')
width,height=self.master.maxsize()
self.master.geometry("{}x{}".format(width, height))

ÔÚ__init__³õʼ»¯Öе÷Óü´¿É¡£

1.2 ʵÏÖ¸÷¸ö¿Ø¼þ²¼¾Ö

1) ²¼¾Ö·½Ê½½éÉÜ

²¼¾Ö¾ÍÊÇ¿ØÖƸ÷¸ö¿Ø¼þÔÚÕû¸ö½çÃæÖеÄλÖã¬Tkinter×ܹ²ÓУ³Öв¼¾Ö¹ÜÀíÆ÷£¬·Ö±ðÊÇpack gridºÍplace

ÕâÆª²©¿ÍÀï¸øÁ˺ÜÏêϸµÄ˵Ã÷£ºPython GUIÖ®tkinter²¼¾Ö¹ÜÀí

×ܽáһЩ×îÖØÒªµÄ¶«Î÷°É:

pack¿ÉÒÔËãÊÇ×î³£ÓõÄÒ»ÖÖ²¼¾Ö·½Ê½¡£¾ÍÊÇÏñÈÝÆ÷ÖдÓÉϵ½Ï£¨»òÕß´Ó×óµ½ÓÒ...£©ÒÀ´ÎÌí¼Ó×é¼þ¡£

gridºÜÐÎÏóµØÓÖ³ÆÎªÍø¸ñ²¼¾Ö¡£°Ñ¾ØÐνçÃæ·Ö³ÉÒ»¸ö¼¸Ðм¸ÁеÄÍø¸ñ¿é£¬ÕâÑù¾Í¿ÉÒÔ°Ñ×é¼þ·ÅÖÃÓÚÍø¸ñÖй̶¨µÄλÖÃ.

placeÕâÊÇÈýÖв¼¾ÖÖÐ×îÁé»îµÄÒ»ÖÖ·½Ê½¡£¸ù¾Ý×é¼þÔÚ½çÃæÖеÄ×ø±êÀ´Öƶ¨Î»Öã¬ËùÒÔ»á±È½ÏÁé»î£¬µ«Ò²Òâζ×Ų»ÄÇôÎȶ¨¡£

ËùÓеÄÈýÖÖ²¼¾Ö¶¼¿ÉÒÔʹÓÃÈÝÆ÷ÖзÅÈÝÆ÷µÄ·½·¨£¬ÕâÊǷdz£Ê¹ÓõÄÒ»¸ö¼¼ÇÉ¡£

2) ²¼¾ÖÉè¼ÆÍ¼

ÎÒÑ¡ÔñÈ«²¿ÓÃpackµÄ·½Ê½À´Íê³ÉÒ³ÃæµÄ²¼¾Ö¹¤×÷¡£

¾ßÌåµÄÉè¼ÆÍ¼ÈçÏÂËùʾ£º

ÎÒÒѾ­¾¡Á¦È¥»­ÁË£¬²»ÖªµÀÕâÑùÊDz»ÊÇÇå³þ¡«

×ܹ²´ÓÉϵ½Ï·ֳɣ³¸öFrame: fm1 ¡¡ fm2 ¡¡ fm3

µÚÒ»¸öFrameÀïÃæ°üº¬Ò»¸öÓÃÀ´ÏÔʾtitileµÄLabel

µÚÈý¸öFrameÀïÃæ°üº¬Ò»¸öÓÃÀ´ÏÔʾÊÓÆµÖ¡Í¼ÏñµÄLabel

µÚ¶þ¸öFrameÀïÃæÓÖ·Ö³É×óÓÒÁ½¸öСµÄÈÝÆ÷£ºfm2_left ¡¡ fm2_right

ÓұߵÄfm2_right¾Í°üº¬Ò»¸öÓÃÀ´²¥·ÅÊÓÆµµÄButtton

×ó±ßµÄfm2_leftÓÖ·ÖΪÉÏÏÂÁ½¸ö¸üСµÄÈÝÆ÷£ºfm2 _ left_ top ¡¡ fm2_lef_bottom

fm2_left_top fm2_lef_bottomÀïÃæ¶¼¸÷×Ô°üº¬Ò»¸ö°´Å¥ButtonºÍÒ»¸öÓÃÀ´ÏÔʾÎı¾µÄEntry

3) ²¼¾ÖʵÏÖ´úÂë

ÎÒÃÇÏȲ»¹Ü¾ßÌåµÄϸ½Ú£¬Ö±½Ó°Ñ¸÷¸ö¿Ø¼þµÄ²¼¾ÖλÖøø¶¨ÏÂÀ´£¬½çÃæÓÅ»¯µÄ²¿·Ö·Åµ½ºóÃæÈ¥ÔÙÌí¼Ó¡£

°´ÕÕÉÏÃæµÄ²¼¾ÖÉè¼ÆÍ¼£¬ÊÓÆµÇøÓòÔÝÇÒÓÃÒ»ÕÅÍ¼Æ¬Ìæ´ú£¬ÓÃpack()ʵÏÖ»ù±¾²¼¾ÖÈçÏ£º

def createWidgets(self):
# fm1
self.fm1=Frame(self)
self.titleLabel=Label(self.fm1,text='video
-captioning system')
self.titleLabel.pack()
self.fm1.pack(side= TOP)
# fm2
self.fm2=Frame(self)
self.fm2_left=Frame(self.fm2)
self.fm2_right=Frame(self.fm2)
self.fm2_left_top=Frame(self.fm2_left)
self.fm2_left_bottom=Frame(self.fm2_left)
self.predictButton=Button(self.fm2_left_top,
text='predict sentence')
self.predictButton.pack(side=LEFT)
self.predictEntry=Entry(self.fm2_left_top)
self.predictEntry.pack(side=LEFT)
self.fm2_left_top.pack(side=TOP)
self.truthButton=Button(self.fm2_left_bottom,
text='ground truth')
self.truthButton.pack(side=LEFT)
self.truthEntry=Entry(self.fm2_left_bottom)
self.truthEntry.pack(side=LEFT)
self.fm2_left_bottom.pack(side=TOP)
self.fm2_left.pack(side=LEFT)
self.nextVideoButton=Button(self.fm2_right,text
='next video')
self.nextVideoButton.pack()
self.fm2_right.pack(side=LEFT)
self.fm2.pack(side=TOP)

# fm3
self.fm3=Frame(self)
load = Image.open('/home/hl/Desktop/lovelyqian/me.jpg')
print (load)
render= ImageTk.PhotoImage(load)

self.img = Label(self.fm3,image=render)
self.img.image = render
self.img.pack()
self.fm3.pack(side=TOP)

×¢: ͼƬµÄ´¦ÀíÒª¼ÓÈëÍ·Îļþ

from PIL import Image, ImageTk

×îÖÕЧ¹ûͼ£º

¶Ô±ÈÉÏÏÂÁ½ÕÅͼ£¬¿ÉÄÜÕâ¾ÍÊÇÀíÏëÓëÏÖʵµÄ²î¾à°É£¬¹þ¹þ¹þ¹þ

ÕâÀﻹֻÊÇʵÏÖÁ˲¼¾ÖµÄ¶¨ÒåºÍ»ù±¾Î»ÖõķÅÖã¬ËäÈ»ÕæµÄºÜ³ó£¬µ«ÊDz»Òª×ż±£¬½ÓÏÂÀ´ÎÒÃǾͿÉÒÔÔÚÕâ¸ö»ù´¡ÉÏ×öһЩ¿Ø¼þ´óСµÄÐÞ¸ÄÒÔ¼°ÆäËûµÄ½çÃæÃÀ»¯¹¤×÷¡£

4) ¿Ø¼þÊôÐÔÉèÖü°½çÃæÓÅ»¯

ÉèÖÃÖ÷´°¿Ú±³¾°ÎªºÚÉ«

ÀûÓà FrameµÄbgÊôÐÔ

Òª¼ÇµÃpack()µÄʱºòÉèÖÃΪȫÀ©³ä

ÒÔ×î´óµÄµ×´°¿ÚΪÀý£º

class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master,bg='black')
self.pack(expand=YES,fill=BOTH)

¸÷¸ö¿Ø¼þÊôÐÔÉèÖÃ

±¾À´´òËãÒ»µãµã¼Ç¼¾ßÌåʵÏֵĹý³ÌµÄ£¬µ«·¢ÏÖʵÔÚÊÇÌ«Âé·³ÁË¡£

Ö÷Òª¾ÍÊDZßѧ±äÓ㬲ο¼×ÊÁ϶¼ÔÚÏÂÃæÁгöÀ´ÁË¡£

¸Ä¶¯Á˳£ÓõÄһЩÊôÐÔ£¬±ÈÈç×ÖÌå´óС¡¢×ÖÌåǰ¾°É«¡¢ºó¾°É«¡¢°´Å¥´óСµÈµÈ¡£

¾ßÌåµÄʵÏÖ´úÂëÏÈÓÃͼƬµÄ·½Ê½·ÅÔÚÕâÀÔÚ×îºó»á¸ø³öÍêÕûµÄ´úÂë¡£

¸ÐÐËȤµÄ»°¸úÉÏÃæÄǶδúÂë¶Ô±ÈһϾͿÉÒԺܷ½±ãµÄÖªµÀ¸÷¸öÊôÐԵĿØÖÆ·½·¨£¬ÕâÀï¾Í²»ÔÙÂÞÁÐÁË¡£

×îºóµÄʵÏÖЧ¹û£º

²î²»¶àÏÈÕâÑù°É£¬È¥³Ô¸öÎç·¹£¬ÏÂÎç»ØÀ´¼ÌÐøÐ´¹¦Äܺ¯Êý¡«¡«¡«

1.3 ¸÷¸öº¯Êý¹¦ÄÜ

1) ÏÔʾÎı¾

ÕâÀïÖ»ÐèҪѧϰһÏÂEntryÕâ¸ö¿Ø¼þ¡£

EntryÊÇÓÃÀ´½ÓÊÕºÍÏÔʾ×Ö·û´®µÄ¿Ø¼þ¡£

Ö÷ÒªÁ˽â½ÓÊÜÎÄ×Ö¡¢·¢ËÍÎÄ×Ö¡¢Çå³ýÎÄ×ÖÕ⣳¸ö¹¦ÄܾͿÉÒÔÁË¡£

myEntry.get()»ñÈ¡ÄÚÈÝ

myEntry.insert(10,"hello")ÔÚλÖÃ10´¦£¬Ìí¼ÓÄÚÈÝ

myEntry.delete(first,last=None)ɾ³ý´Ó ¡°first¡± µ½ ¡°last¡± Ö¸¶¨·¶Î§ÄÚµÄ×Ö·û. ʹÓà delete(0, END)¿ÉÒÔɾ³ý Entry ¿Ø¼þÒÑÊäÈëµÄÈ«²¿×Ö·û.

2) °´Å¥´¥·¢

Ö»ÐèÒªÔÚ°´Å¥ÖÐÌí¼ÓÊôÐÔcommand¼´¿É¡£

ÒÔµã»÷predictButton°´Å¥ÊµÏÖ½«Îı¾ÏÔʾµ½ºóÃæµÄÎı¾¿òÖÐΪÀý£º

#...
self.predictButton=Button(self.fm2_left_top,text='predict sentence',bg='#FF4081',fg='white',font=('΢ÈíÑźÚ',36),width='16',command=self.output_predict_sentence)
def output_predict_sentence(self):
predicted_sentence_str='hello world.'
self.predictEntry.delete(0,END)
self.predictEntry.insert(0,predicted_sentence_str)

ÕâÑùÿ´Îµã»÷°´¼ü¾Í»áÏȰѿò¿òÄÚµÄÎÄ×ÖÇå¿Õ£¬È»ºóÊä³öÄãÖ¸¶¨µÄÎı¾¡£

3) ÊÓÆµ²¥·Å

Õâ¸ö¿ÉÄÜÊÇ×îÄѵÄÒ»¸ö²¿·ÖÁËÄØ¡«

TkinterÊÇûÓÐÖ§³ÖÊÓÆµ²¥·ÅµÄÔ­Éú¿Ø¼þµÄ£¬°Ù¶ÈÕÒÁ˺þö¼Ã»ÓÐÕÒµ½½â¾ö·½°¸£¬¸ÐлGoogle´ó·¨£¬ÔÚÕâÀïÕÒµ½ÁËÒ»¸ö·Ç³£ºÃµÄÀý×Ó£¬»¹ºÃľÓÐ·ÅÆú¡«¡«

Õâ¸öÀý×ÓʵÏÖµÄÊÇ´ÓÉãÏñÍ·»ñÈ¡ÊÓÆµÁ÷£¬È»ºó·ÅÔÚTkinterʵÏÖµÄGUI´°¿ÚÖУ¬°´Å¥¿ÉÒÔʵÏÖÊÓÆµ½ØÆÁ²¢±£´æµÄЧ¹û¡£

¶Ô´úÂë×öÁ˼ò»¯Ö®ºóʵÏÖ½«ÊÓÆµ²¥·ÅÔÚTKinter´°¿ÚÖдúÂëÈçÏÂËùʾ£º

from __future__ import print_function
from PIL import Image,ImageTk
import Tkinter as tki
import threading
import imutils
import cv2
import time
import imageio
class videoPlayer():
def __init__(self):
self.frame = None
self.thread = None
self.stopEvent = None


# initialize the root window and image panel
self.root = tki.Tk()
self.panel = None
# start a thread that constantly pools the video sensor for
# the most recently read frame
self.stopEvent = threading.Event()
self.thread = threading.Thread(target=self.videoLoop,
args=())
self.thread.start()

def videoLoop(self):
# keep looping over frames until we are instructed to stop
video_path='/home/hl/Desktop/lovelyqian/CV_Learning/
video_to_sequence/video_to_sequence-master/data/
youtube_videos/_0nX-El-ySo_83_93.avi'
video=imageio.get_reader(video_path,'ffmpeg')
for frame in video:
self.frame = imutils.resize(frame, width=300)
image = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)
image = Image.fromarray(image)
image = ImageTk.PhotoImage(image)

# if the panel is not None, we need to initialize it
if self.panel is None:
self.panel = tki.Label(image=image)
self.panel.image = image
self.panel.pack(side="left", padx=10, pady=10)
# otherwise, simply update the panel
else:
self.panel.configure(image=image)
self.panel.image = image
time.sleep(0.02)
myVideoPLayer = videoPlayer()
myVideoPLayer.root.mainloop()

¶ÔÉÏÃæµÄ´úÂëÔÙ×öÒ»¸öÐÞ¸ÄÕûºÏ¾Í¿ÉÒÔÁË¡£

4) ¶àÏß³ÌÎÊÌâ

ÒòΪҪÊÓÆµÊÓÆµ²¥·ÅµÄ¹¦ÄÜ£¬ËùÒÔÎÒÃÇ»¹ÒªÑ§Ï°Ò»ÏÂpythonµÄ¶àÏ̡߳£

Ò²²»ÊǺÜÄÑ£¬Ïë¾ßÌåÁ˽âµÄ¿ÉÒÔµã»÷ÎÄÄ©µÄ²Î¿¼×ÊÁÏ¡£

import threadingµ¼ÈëÏß³ÌÄ£¿é

self.thread=threading.Thread ( target=self.play _ next _ video, args = ())¾Í¶¨ÒåºÃÁËÏȵÄÏ̡߳£

targetÖ¸Ã÷¸ÃÏß³ÌÆô¶¯ºó»áµ÷ÓÃÄĸöº¯Êý

self.thread.start()Æô¶¯¸ÃÏß³Ì

µ±º¯ÊýÖ´ÐнáÊøÊ±£¬¸ÃÏ߳̾Í×Ô¶¯½áÊø

ËùÒÔÿ´ÎÏëÒªÓöàÏß³ÌÖ´ÐÐÊÓÆµ²¥·ÅµÄʱºò£¬Ö»ÒªÉú³ÉÒ»¸ö target = self . paly _ next_videoµÄÏ̼߳´¿É¡£

ÄÇôÄܲ»ÄÜÖ»¶¨ÒåÒ»´ÎỊ̈߳¬È»ºóÿ´ÎstartËüÄØ£¬´ð°¸ÊDz»ÄܵĹþ¹þ¹þ¹þ¡£

2 ÍêÕû´úÂë

×îºóÒª·Å´óÕÐÀ²£¬×¼±¸ºÃÁËÂð£¿

ÍêÕûµÄ´úÂë¶¼ÔÚÏÂÃæÁË£¬ÓÐÐèÒª×ÔȡŶ¡£

#-*- coding:utf-8 -*-
from Tkinter import *
from PIL import Image, ImageTk
import threading
import imageio
import imutils
import time
import cv2
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master,bg='black')
self.pack(expand=YES,fill=BOTH)
self.window_init()
self.createWidgets()
def window_init(self):
self.master.title('welcome to video-captioning system')
self.master.bg='black'
width,height=self.master.maxsize()
self.master.geometry("{}x{}".format(width, height))

def createWidgets(self):
# fm1
self.fm1=Frame(self,bg='black')
self.titleLabel=Label(self.fm1,text="video-captioning
system",font=('΢ÈíÑźÚ',64),fg = "white",bg='black')
self.titleLabel.pack()
self.fm1.pack(side= TOP,expand=YES,fill='x',pady=20)
# fm2
self.fm2=Frame(self,bg='black')
self.fm2_left=Frame(self.fm2,bg='black')
self.fm2_right=Frame(self.fm2,bg='black')
self.fm2_left_top=Frame(self.fm2_left,bg='black')
self.fm2_left_bottom=Frame(self.fm2_left,bg='black')
self.predictEntry=Entry(self.fm2_left_top,font=
('΢ÈíÑźÚ',24),width='72',fg='#FF4081')
self.predictButton=Button(self.fm2_left_top,text='
predict sentence',bg='#FF4081',fg='white',font=
('΢ÈíÑźÚ',36),width='16',command=self.output_predict_sentence)
self.predictButton.pack(side=LEFT)
self.predictEntry.pack(side=LEFT,fill='y',padx=20)
self.fm2_left_top.pack(side=TOP,fill='x')
self.truthEntry=Entry(self.fm2_left_bottom,font=
('΢ÈíÑźÚ',24),width='72',fg='#22C9C9')
self.truthButton=Button(self.fm2_left_bottom,text='
ground truth',bg='#22C9C9',fg='white',font=
('΢ÈíÑźÚ',36),
width='16',command=self.output_ground_truth)
self.truthButton.pack(side=LEFT)
self.truthEntry.pack(side=LEFT,fill='y',padx=20)
self.fm2_left_bottom.pack(side=TOP,pady=10,fill='x')
self.fm2_left.pack(side=LEFT,padx=60,pady=20,
expand=YES,fill='x')
self.nextVideoImg= ImageTk.PhotoImage(file = '/home/hl/
Desktop/lovelyqian/nextVideo.png')
self.nextVideoButton=Button(self.fm2_right,image=self.
nextVideoImg,text='next video',bg='black',command=self.
start_play_video_thread)
self.nextVideoButton.pack(expand=YES,fill=BOTH)
self.fm2_right.pack(side=RIGHT,padx=60)
self.fm2.pack(side=TOP,expand=YES,fill="x")

# fm3
self.fm3=Frame(self,bg='black')
load = Image.open('/home/hl/Desktop/lovelyqian/me.jpg')
initIamge= ImageTk.PhotoImage(load)
self.panel = Label(self.fm3,image=initIamge)
self.panel.image = initIamge
self.panel.pack()
self.fm3.pack(side=TOP,expand=YES,fill=BOTH,pady=10)
def output_predict_sentence(self):
predicted_sentence_str='hello world.'
self.predictEntry.delete(0,END)
self.predictEntry.insert(0,predicted_sentence_str)
def output_ground_truth(self):
ground_truth='this is ground truth.'
self.truthEntry.delete(0,END)
self.truthEntry.insert(0,ground_truth)
def start_play_video_thread(self):
self.thread=threading.Thread(target=self
.play_next_video,args=())
self.thread.start()
def play_next_video(self):
self.predictEntry.delete(0,END)
self.truthEntry.delete(0,END)

# to play video
self.video_path='/home/hl/Desktop/lovelyqian
/CV_Learning/video_to_sequence/video_to_sequence-master/data/youtube
_videos/_0nX-El-ySo_83_93.avi'
self.video=imageio.get_reader(self.video_path,
'ffmpeg')
for self.videoFrame in self.video:
self.videoFrame=imutils.resize(self.videoFrame,
width=1760,
height=1080) # to do
self.image=cv2.cvtColor(self.videoFrame,cv2.
COLOR_BGR2RGB)
self.image=Image.fromarray(self.image)
self.image=ImageTk.PhotoImage(self.image)
self.panel.configure(image=self.image)
self.panel.image=self.image
time.sleep(0.02)
if __name__=='__main__':
app = Application()
# to do
app.mainloop()

 

 
   
2932 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ