tkinter:tkinter是绑定了Python的TKGUI工具集,就是Python包装的Tcl代码,通过内嵌在Python解释器内部的Tcl
解释器实现的,它是Python标准库的一部分,所以使用它进行GUI编程不需要另外安装第三方库的。

tkinter的简单使用:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter                                       #导入tkinter模块
 3 
 4 root = tkinter.Tk()                                  #生成root主窗口
 5 label = tkinter.Label(root,text = "Hello,tkinter!")  #生成标签
 6 label.pack()                                         #将标签添加到root主窗口
 7 button1 = tkinter.Button(root,text = "button1")      #生成button1
 8 button1.pack(side = tkinter.LEFT)                    #将button1添加到root主窗口
 9 button2 = tkinter.Button(root,text = "button2")      #生成button2
10 button2.pack(side = tkinter.RIGHT)                   #将button2添加到root主窗口
11 root.mainloop()                                      #进入信息循环

tkinter组件:


布局组件:
组件pack方法参数设置组件的位置:
before:将组件置于其他之间之前;
after:将组件置于其他组件之后;
side:组件在主窗口的位置,可以为“top”、“bottom”、“left”、“right”;
anchor:组件的对齐方式,顶对齐“n”、底对齐“s”、左对齐“w”、右对齐“e”;

组件anchor方法参数通过行列的方法设置组件的位置:
column:组件所在的列起始位置;
columspam:组件的列宽;
row:组件所在的行起始位置;
rowspam:组件的行宽;

组件place方法参数通过坐标来设置组件的位置:

常用tkinter组件:
按钮:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter                                       #导入tkinter模块
 3 
 4 root = tkinter.Tk()                                  #生成root主窗口
 5 label = tkinter.Label(root,text = "Hello,tkinter!")  #生成标签
 6 label.pack()                                         #将标签添加到root主窗口
 7 button1 = tkinter.Button(root,
 8                          anchor = tkinter.E,         #指定文本对齐方式
 9                          text = "button1",           #指定按钮上的文本
10                          width = 40,                 #指定按钮的宽度,相当于40个字符
11                          height = 5)                 #指定按钮的高度,相当于5行字符
12 button1.pack()                                       #将按钮添加到窗口
13 button2 = tkinter.Button(root,
14                          text = "button2",
15                          bg = "blue")                #指定按钮的背景颜色
16 button2.pack()   
17 button3 = tkinter.Button(root,
18                          text = "button1",
19                          width = 60,
20                          height = 5,
21                          state = tkinter.DISABLED)   #指定按钮为禁用状态
22 button3.pack()
23 root.mainloop()                                      #进入信息循环


文本框:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter                                       #导入tkinter模块
 3 
 4 root = tkinter.Tk()
 5 entry1 = tkinter.Entry(root,                         #生成单行文本框组件
 6                        show = '*')                   #输入文本框中的字符被显示为“*”
 7 entry1.pack()                                        #将文本框添加到窗口中
 8 entry2 = tkinter.Entry(root,
 9                        show = '#',                   #输入文本框中的字符被显示为“#”
10                        width = 50)                   #将文本框的宽度设置为50
11 entry2.pack()
12 entry3 = tkinter.Entry(root,
13                        bg = 'red',                   #将文本框的背景色设置为红色
14                        fg = 'blue')                  #将文本框的前景色设置为蓝色
15 entry3.pack()
16 entry4 = tkinter.Entry(root,
17                        selectbackground = 'red',     #将选中文本的背景色设置为红色
18                        selectforeground = 'gray')    #将选中文本的前景色设置为灰色
19 entry4.pack()
20 entry5 = tkinter.Entry(root,
21                        state = tkinter.DISABLED)     #将文本框设置为禁用
22 entry5.pack()
23 edit1 = tkinter.Text(root,                           #生成多行文本框组件
24                      selectbackground='red',         #将选中文本的背景色设置为红色
25                      selectforeground='gray')        #将选中文本的前景色设置为灰色
26 edit1.pack()
27 root.mainloop()                                      #进入信息循环

标签:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter                                        #导入tkinter模块
 3 
 4 root = tkinter.Tk()
 5 label1 = tkinter.Label(root,
 6                        anchor = tkinter.E,            #设置文本的位置
 7                        bg = 'blue',                   #设置标签背景色
 8                        fg = 'red',                    #设置标签前景色
 9                        text = 'Python',               #设置标签中的文本
10                        width = 30,                    #设置标签的宽度为30
11                        height = 5)                    #设置标签的高度为5
12 label1.pack()
13 label2 = tkinter.Label(root,
14                        text = 'Python GUIntkinter',  #设置标签中的文本,在字符串中使用换行符
15                        justify = tkinter.LEFT,        #设置多行文本为左对齐
16                        width = 30,
17                        height = 5)
18 label2.pack()
19 label3 = tkinter.Label(root,
20                        text = 'Python GUIntkinter',
21                        justify = tkinter.RIGHT,       #设置多行文本为右对齐
22                        width = 30,
23                        height = 5)
24 label3.pack()
25 label4 = tkinter.Label(root,
26                        text = 'Python GUIntkinter',
27                        justify = tkinter.CENTER,      #设置多行文本为居中对齐
28                        width = 30,
29                        height = 5)
30 label4.pack()
31 root.mainloop()

菜单:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter                                        #导入tkinter模块
 3 
 4 root = tkinter.Tk()
 5 menu = tkinter.Menu(root)                             #生成菜单
 6 submenu = tkinter.Menu(menu,tearoff = 0)              #生成下拉菜单
 7 submenu.add_command(label = 'Open')                   #向下拉菜单中添加Open命令
 8 submenu.add_command(label = 'Save')                   #向下拉菜单中添加Save命令
 9 submenu.add_command(label = 'Close')                  #向下拉菜单中添加Close命令
10 menu.add_cascade(label = 'File',menu = submenu)       #将下拉菜单添加到菜单中
11 submenu = tkinter.Menu(menu,tearoff = 0)              #生成下拉菜单
12 submenu.add_command(label = 'Copy')                   #向下拉菜单中添加Copy命令
13 submenu.add_command(label = 'Paste')                  #向下拉菜单中添加Paste命令
14 submenu.add_separator()                               #向下拉菜单中添加分隔符
15 submenu.add_command(label = 'Cut')                    #向下拉菜单中添加Cut命令
16 menu.add_cascade(label = 'Edit',menu = submenu)       #将下拉菜单添加到菜单中
17 submenu = tkinter.Menu(menu,tearoff = 0)              #生成下拉菜单
18 submenu.add_command(label = 'About')                  #向下拉菜单中添加About命令
19 menu.add_cascade(label = 'Help',menu = submenu)       #将下拉菜单添加到菜单中
20 root.config(menu = menu)
21 root.mainloop()
 1 #_*_ coding:utf-8 _*_
 2 import tkinter                            #导入tkinter模块
 3 
 4 root = tkinter.Tk()
 5 menu = tkinter.Menu(root,tearoff = 0)     #创建菜单
 6 menu.add_command(label = 'Copy')          #向弹出式菜单中添加Copy命令
 7 menu.add_command(label = 'Paste')         #向弹出式菜单中添加Paste命令
 8 menu.add_separator()                      #向弹出式菜单中添加分隔符
 9 menu.add_command(label = 'Cut')           #向弹出式菜单中添加Cut命令
10 def popupmenu(event):                     #定义右键事件处理函数
11     menu.post(event.x_root,event.y_root)  #显示菜单
12 root.bind('<Button-3>',popupmenu)         #在主窗口中绑定右键事件
13 root.mainloop()

单选框和复选框:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter                                 #导入tkinter模块
 3 
 4 root = tkinter.Tk()
 5 r = tkinter.StringVar()                        #使用StringVar生成字符串变量用于单选框组件
 6 r.set('1')                                     #初始化变量
 7 radio = tkinter.Radiobutton(root,              #生成单选框组件
 8                             variable = r,      #设置单选框关联的变量
 9                             value = '1',       #设置选中单选框时其所关联的变量的值,即r的值
10                             indicatoron = 0,   #将单选框绘制成按钮样式
11                             text = 'Radio1')   #设置单选框显示的文本
12 radio.pack()
13 radio = tkinter.Radiobutton(root,
14                             variable = r,
15                             value = '2',
16                             indicatoron = 0,
17                             text = 'Radio2')
18 radio.pack()
19 radio = tkinter.Radiobutton(root,
20                             variable = r,
21                             value = '3',
22                             indicatoron = 0,
23                             text = 'Radio3')
24 radio.pack()
25 radio = tkinter.Radiobutton(root,
26                             variable = r,
27                             value = '4',
28                             indicatoron = 0,
29                             text = 'Radio4')
30 radio.pack()
31 c = tkinter.IntVar()                              #使用InVar生成整型变量用于复选框
32 c.set(1)
33 check = tkinter.Checkbutton(root,
34                             text = 'Checkbutton', #设置复选框的文本
35                             variable = c,         #设置复选框关联的变量
36                             indicatoron = 0,      #将单选框绘制成按钮样式,不加为单选按钮
37                             onvalue = 1,          #当选中复选框时,c的值为1
38                             offvalue = 2)         #当未选中复选框时,c的值为2
39 check.pack()
40 root.mainloop()
41 print(r.get())                                    #输出r的值
42 print(c.get())                                    #输出c的值

绘图:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter                                    #导入tkinter模块
 3 
 4 root = tkinter.Tk()
 5 canvas = tkinter.Canvas(root,
 6                         width = 600,              #指定Canvas组件的宽度为600
 7                         height = 480,             #指定Canvas组件的高度为480
 8                         bg = 'white')             #指定Canvas组件背景色为白色
 9 im = tkinter.PhotoImage(file = 'python.gif')      #使用PhotoImage打开图片
10 canvas.create_image(300,50,image = im)            #使用create_image将图片添加到Canvas组件中
11 canvas.create_text(302,77,                        #使用create_text方法绘制文字
12                    text = 'Use Canvas',           #所绘制文字的内容
13                    fill = 'gray')                 #所绘制文字的颜色为灰色
14 canvas.create_text(300,75,
15                    text = 'Use Canvas',
16                    fill = 'blue')
17 canvas.create_polygon(290,114,316,114,330,130,    #使用create_polygon方法绘制六边形
18                       310,146,284,146,270,130)
19 canvas.create_oval(280,120,320,140,               #使用create_oval方法绘制椭圆形
20                    fill = 'white')                #设置椭圆用白色填充
21 canvas.create_line(250,130,350,130)               #使用create_line绘制直线
22 canvas.create_line(300,100,300,160)
23 canvas.create_rectangle(90,190,510,410,           #使用create_rectangle绘制一个矩形
24                         width = 5)                #设置矩形线宽为5像素
25 canvas.create_arc(100,200,500,400,                #使用create_arc绘制圆弧
26                   start = 0,extent = 240,         #设置圆弧的起止角度
27                   fill = 'pink')                  #设置圆弧填充颜色为粉丝
28 canvas.create_arc(103,203,500,400,
29                   start = 241,extent = 118,
30                   fill = 'red')
31 canvas.pack()                                     #将canvas添加到主窗口
32 root.mainloop()

事件:
鼠标事件、键盘事件、窗口事件,绑定事件的组件:
bind(sequence,func,add)
bind_class(classname,sequence,func,add)
bind_all(sequence,func,add)
参数含义:
sequence:所绑定的事件,必须以“<>”包围的字符串
func:所绑定的事件处理函数
add:可选参数,为空字符或者“+”
classname:所绑定的类
备注:鼠标事件数字1表示鼠标左键、2表示鼠标中键、3表示鼠标右键

键盘事件:


备注:KeyPress可以用KeyRelease替换,表示当按键释放时触发事件。需要注意的是,输入的字母要区分大小写

窗口事件:

相应事件:
事件绑定到函数后,触发时系统将向该函数传递一个event对象的参数,event对象属性:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter
 3 
 4 class MyButton:                                                #定义按钮类
 5     def __init__(self,root,canvas,label,type):                 #类初始化
 6         self.root = root                                       #保存引用值
 7         self.cancas = canvas
 8         self.label = label
 9         if type == 0:                                          #根据类型创建按钮
10             button = tkinter.Button(root,text = 'DrawLine',
11                                     command = self.DrawLine)
12         elif type == 1:
13             button = tkinter.Button(root, text='DrawArc',
14                                     command=self.DrawArc)
15         elif type == 2:
16             button = tkinter.Button(root, text='DrawRec',
17                                     command=self.DrawRec)
18         else:
19             button = tkinter.Button(root, text='DrawOval',
20                                     command=self.DrawOval)
21         button.pack(side = 'left')
22     def DrawLine(self):                                       #DrawLine按钮事件处理函数
23         self.label.text.set('Draw Line')
24         self.cancas.SetStatus(0)
25     def DrawArc(self):                                        #DrawArc按钮事件处理函数
26         self.label.text.set('Draw Arc')
27         self.cancas.SetStatus(1)
28     def DrawRec(self):                                        #DrawRec按钮事件处理函数
29         self.label.text.set('Draw Rectangle')
30         self.cancas.SetStatus(2)
31     def DrawOval(self):                                       #DrawOval按钮事件处理函数
32         self.label.text.set('Draw Oval')
33         self.cancas.SetStatus(3)
34 class MyCanvas:                                               #定义MyCanvas类
35     def __init__(self,root):                                  #保存引用值
36         self.status = 0
37         self.draw = 0
38         self.root = root
39         self.canvas = tkinter.Canvas(root,bg = 'white',       #生成Canvas组件
40                                      width = 600,
41                                      height = 480)
42         self.canvas.pack()
43         self.canvas.bind('<ButtonRelease-1>',self.Draw)       #绑定事件到左键
44         self.canvas.bind('<Button-2>',self.Exit)              #绑定事件到中键
45         self.canvas.bind('<Button-3>',self.Del)               #绑定事件到右键
46         self.canvas.bind_all('<Delete>',self.Del)             #绑定事件到Delete键
47         self.canvas.bind_all('<KeyPress-d>',self.Del)         #绑定事件到d键
48         self.canvas.bind_all('<KeyPress-e>',self.Exit)        #绑定事件到e键
49     def Draw(self,event):                                     #绘制事件处理函数
50         if self.draw == 0:                                    #判断是否绘图
51             self.x = event.x
52             self.y = event.y
53             self.draw = 1
54         else:                                                 #根据self.status绘制不同的图形
55             if self.status == 0:
56                 self.canvas.create_line(self.x,self.y,
57                                         event.x,event.y)
58                 self.draw = 0
59             elif self.status == 1:
60                 self.canvas.create_arc(self.x, self.y,
61                                         event.x, event.y)
62                 self.draw = 0
63             elif self.status == 2:
64                 self.canvas.create_rectangle(self.x, self.y,
65                                         event.x, event.y)
66                 self.draw = 0
67             else:
68                 self.canvas.create_oval(self.x, self.y,
69                                         event.x, event.y)
70                 self.draw = 0
71     def Del(self,event):                                     #按下右键或d键则删除图形
72         items = self.canvas.find_all()
73         for item in items:
74             self.canvas.delete(item)
75     def Exit(self,event):                                    #按下中键或e键则退出
76         self.root.quit()
77     def SetStatus(self,status):                              #设置绘制的图形
78         self.status = status
79 class MyLabel:                                               #定义标签类
80     def __init__(self,root,canvas):                          #类初始化
81         self.root = root                                     #保存引用值
82         self.canvas = canvas
83         self.text = tkinter.StringVar()                      #生成标签引用变量
84         self.text.set('Draw Line')
85         self.label = tkinter.Label(root,textvariable = self.text,  #生成标签
86                                    fg = 'red',width = 50)
87         self.label.pack(side = 'left')
88 root = tkinter.Tk()                                          #生成主窗口
89 canvas = MyCanvas(root)                                      #生成绘图组件
90 label = MyLabel(root,canvas)                                 #生成标签
91 MyButton(root,canvas,label,0)                                #生成按钮
92 MyButton(root,canvas,label,1)
93 MyButton(root,canvas,label,2)
94 MyButton(root,canvas,label,3)
95 root.mainloop()                                              #进入信息循环

信息框:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter
 3 import tkinter.messagebox
 4 def cmd():                             #按钮信息处理
 5     global n                           #使用全局变量n
 6     global buttontext
 7     n = n + 1
 8     if n == 1:                         #判断n的值,显示不同的消息框
 9         tkinter.messagebox.askokcancel('Python tkinter','askokcancel')
10         buttontext.set('skquestion')   #更改按钮上的文字
11     elif n == 2:
12         tkinter.messagebox.askquestion('Python tkinter','askquestion')
13         buttontext.set('askyesno')
14     elif n == 3:
15         tkinter.messagebox.askyesno('Python tkinter','askyesno')
16         buttontext.set('showerror')
17     elif n == 4:
18         tkinter.messagebox.showerror('Python tkinter','showerror')
19         buttontext.set('showinfo')
20     elif n == 5:
21         tkinter.messagebox.showinfo('Python tkinter','shoeinfo')
22         buttontext.set('showwarning')
23     else:
24         n = 0                        #将n赋值为0重新开始循环
25         tkinter.messagebox.showwarning('Python tkinter','showwarning')
26         buttontext.set('askokcancel')
27 n = 0                                #为n赋初始值
28 root = tkinter.Tk()
29 buttontext = tkinter.StringVar()     #生成关联按钮文字的变量
30 buttontext.set('askokcancel')        #设置buttontext值
31 button = tkinter.Button(root,        #生成按钮
32         textvariable = buttontext,   #设置关联变量
33                     command = cmd)   #设置事件处理函数
34 button.pack()
35 root.mainloop()                      #进入信息循环

除了5种信息框,还可以使用tkinter.messagebox._show函数创建其他类型的信息框
tkinter.messagebox._show函数的控制参数:
default:指定信息框的按钮
icon:指定信息框的图标
message:指定信息框所显示的信息
parent:指定信息框的父组件
title:指定信息框的标题
type:指定信息框的类型

对话框:

tkinter.simpledialog模块可以创建标准的输入对话框
tkinter.simpledialog模块可以创建3中类型的对话框:
输入字符串、输入整数和输入浮点数的对话框,对应的函数为askstring、askinteger、和askfloat函数,可选参数有:
title:指定对话框标题
prompt:指定对话框中显示的文字
initiavalue:指定输入框的初始值
使用tkinter.simpledialog模块中的函数创建对话框后,将返回对话框中文本框的值

 1 #_*_ coding:utf-8 _*_
 2 import tkinter
 3 import tkinter.simpledialog
 4 def InStr():                                                      #按钮事件处理函数
 5     r = tkinter.simpledialog.askstring('Python tkinter',          #创建字符串输入对话框
 6                                        'Input String',            #指定提示字符
 7                                        initialvalue = 'tkinter')  #指定初始化文本
 8     print(r)                                                      #输出返回值
 9 def InInt():
10     r = tkinter.simpledialog.askinteger('Python tkinter',
11                                        'Input Integer')
12     print(r)
13 def InFlo():
14     r = tkinter.simpledialog.askfloat('Python tkinter',
15                                        'Input Float')
16     print(r)
17 root = tkinter.Tk()                                               #生成主窗口
18 button1 = tkinter.Button(root,text = 'Input String',              #创建按钮
19                          command = InStr)                         #指定按钮事件处理函数
20 button1.pack(side = 'left')
21 button2 = tkinter.Button(root,text = 'Input Integer',
22                          command = InInt)
23 button2.pack(side = 'left')
24 button3 = tkinter.Button(root,text = 'Input Float',
25                          command = InFlo)
26 button3.pack(side = 'left')
27 root.mainloop()                                                   #进入信息循环

tkinter.filedialog模块可以创建文件打开与保存文件对话框
tkinter.filedialog模块中的askopenfilename函数可以创建打开文件对话框
tkinter.filedialog模块中的asksaveasfilename函数可以创建保存文件对话框,具有相同可先参数:
filetypes:指定文件类型
initialdir:指定默认目录
initialfile:指定默认文件
title:指定对话框标题
使用tkFileDialog模块中的函数创建对话框后,将返回文件的完整路径

 1 #_*_ coding:utf-8 _*_
 2 import tkinter
 3 import tkinter.filedialog
 4 def FileOpen():                                                           #按钮事件处理函数
 5     r = tkinter.filedialog.askopenfilename(title = 'Python tkinter',      #创建打开文件对话框
 6                 filetypes = [('Python','*.py *.pyw'),('All files','*')])  #指定文件类型为Python程序
 7     print(r)                                                              #输出返回值
 8 def FileSave():                                                           #按钮事件处理函数
 9     r = tkinter.filedialog.asksaveasfilename(title = 'Python tkinter',    #创建保存文件对话框
10                                              initialdir = r'F:python',   #指定初始化目录
11                                              initialfile = 'test.py')     #指定初始化文件
12     print(r)
13 root = tkinter.Tk()
14 button1 = tkinter.Button(root,text = 'File Open',                         #创建按钮
15                          command = FileOpen)                              #指定按钮事件处理函数
16 button1.pack(side = 'left')
17 button2 = tkinter.Button(root,text = 'File Save',
18                          command = FileSave)
19 button2.pack(side = 'left')
20 root.mainloop()                                                           #进入信息循环

tkinter.colorchooser模块可以创建颜色选择对话框
tkinter.colorchooser模块中的askcolor函数可以创建颜色选择对话框,可选参数:
initialcolor:指定初始化颜色
title:指定对话框标题
使用tkinter.colorchooser模块中的函数创建对话框后,将返回颜色的RGB值以及可以在Python tkinter中使用的颜色字符值

 1 #_*_ coding:utf-8 _*_
 2 import tkinter
 3 import tkinter.colorchooser
 4 def ChooseColor():                                                    #按钮事件处理函数
 5     r = tkinter.colorchooser.askcolor(title = 'Python tkinter')       #创建颜色选择对话框
 6     print(r)                                                          #输出返回值
 7 root = tkinter.Tk()                                                   #生成主窗口
 8 button = tkinter.Button(root,text = 'Choose Color',                   #创建按钮
 9                         command = ChooseColor)                        #指定按钮事件处理函数
10 button.pack()
11 root.mainloop()                                                       #进入信息循环


自定义对话框:
Toplevel组件:

 1 #_*_ coding:utf-8 _*_
 2 import tkinter
 3 import tkinter.messagebox
 4 class MyDialog:                                                    #定义对话框类
 5     def __init__(self,root):                                       #对话框初始化
 6         self.top = tkinter.Toplevel(root)                          #生成Toplevel组件
 7         label = tkinter.Label(self.top,text = 'Please Input')      #生成标签组件
 8         label.pack()
 9         self.entry = tkinter.Entry(self.top)                       #生成文本框组件
10         self.entry.pack()
11         self.entry.focus()                                         #让文本框获得焦点
12         button = tkinter.Button(self.top,text = 'Ok',              #生成按钮
13                                 command = self.Ok)                 #设置按钮事件处理函数
14         button.pack()
15     def Ok(self):                                                  #定义按钮事件处理函数
16         self.input = self.entry.get()                              #获取文本框中的内容,保存为input
17         self.top .destroy()                                        #销毁对话框
18     def get(self):                                                 #返回在文本框输入的内容
19         return self.input
20 class MyButton():                                                  #定义按钮类
21     def __init__(self,root,type):                                  #按钮初始化
22         self.root = root                                           #保存父窗口引用
23         if type == 0:                                              #根据类型创建不同按钮
24             self.button = tkinter.Button(root,
25                                          text = 'Create',
26                                          command = self.Create)    #设置Create按钮事件处理函数
27         else:
28             self.button = tkinter.Button(root,
29                                          text = 'Quit',
30                                          command = self.Quit)      #设置Quit按钮事件处理函数
31         self.button.pack()
32     def Create(self):                                              #Create按钮的事件处理函数
33         d = MyDialog(self.root)                                    #生成对话框
34         self.button.wait_window(d.top)                             #等待对话框结束
35         tkinter.messagebox.showinfo('Python','You input:n' + d.get())  #获取对话框中输入值,并输出
36     def Quit(self):                                                #Quit按钮的事件处理函数
37         self.root.quit()                                           #退出主窗口
38 root = tkinter.Tk()                                                #生成主窗口
39 MyButton(root,0)                                                   #生成Create
40 MyButton(root,1)                                                   #生成Quit按钮
41 root.mainloop()                                                    #进入信息循环

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!