# from tkinter import *
import tkinter as tk
'''
1.Label
说明:标签
用法:Label(根对象,【属性列表】)
属性:
text    要显示的文本
bg      背景颜色
bd      外围3D边界的宽度
font    字体(颜色、大小)
width   控件宽度
height  控件高度
'''
##################################################
root = tk.Tk() # 初始化Tk()
root.title("label-test")    # 设置窗口标题
#root.geometry("200x300")    # 设置窗口大小 注意:是x 不是*
root.resizable(width=True, height=True) # 设置窗口是否可以变化长/宽,False不可变,True可变,默认为True
l=tk.Label(root, text="一个label在root上", bg="pink", font=("Arial",12), width=15, height=1)
l.pack(side=tk.TOP)   # 这里的side可以赋值为LEFT  RTGHT TOP  BOTTOM

'''
2.Frame
说明:在屏幕上创建一块矩形区域,多作为容器来布局窗体
用法:frame(根对象,【属性列表】)
属性:
bg      背景颜色
bd      外围3D边界的宽度
font    字体(颜色、大小)
width   控件宽度
height  控件高度
'''
##################################################
frame=tk.Frame(root,bg='green',width=100,height=100).pack(side=tk.LEFT)
frame1=tk.Frame(root,bg='red',width=100,height=100).pack(side=tk.LEFT)

'''
3.Entry
说明:创建单行文本框
用法:创建 Entry(根对象,【属性列表】)
     绑定变量 var=StringVar()    e=Entry(根对象, textvariable = var)
    获取文本框中的值   var.get()
    设置文本框中的值   var.set(item1)
'''
##################################################
var = tk.Variable()
entry=tk.Entry(frame1,textvariable=var).pack()
var.set('entry')
print('文本框的值:',var.get())

'''
4.Text
说明:向该空间内输入文本
用法:
t = Text(根对象)
插入:t.insert(mark,内容)
删除:t.delete(mark1,mark2)
其中,mark可以是行号,或者特殊标识,例如
 INSERT:光标的插入点CURRENT:鼠标的当前位置所对应的字符位置
 END:这个Textbuffer的最后一个字符
 SEL_FIRST:选中文本域的第一个字符,如果没有选中区域则会引发异常
 SEL_LAST:选中文本域的最后一个字符,如果没有选中区域则会引发异常
'''
##################################################

t = tk.Text(frame1)
t.insert('1.0',"text1\n")   # 插入
t.insert(tk.END,"text2\n") # END:这个Textbuffer的最后一个字符
t.insert('1.0',"text3\n")
t.delete('1.0','2.0')   # 删除
t.pack(side=tk.BOTTOM)   # 这里的side可以赋值为LEFT  RTGHT TOP  BOTTOM

'''
 5.Button
说明:创建按钮
用法:Button(根对象,【属性列表】)
'''
##################################################
def ph():
    print('this is a button press!')
    t.insert(tk.END,"点击了一下...\n")

b=tk.Button(frame,text='button',fg='blue',command=ph).pack(side=tk.TOP)#这个注意ph不带括号!!!
'''
6.Listbox
说明:列表控件,可以含有一个或者多个文本框,可单选也可多选
用法:
创建  lb = ListBox(根对象,【属性列表】)
绑定变量 var = StringVar() lb=ListBox(根对象,listvariable=var)
得到列表中的所有值 var.get()
设置列表中的所有值 var.set((item1,item2,......))
添加:lb.insert(item)
删除:lb.delete(item,...)
绑定事件 lb.bind('<ButtonRelease-1>',函数)
获得所选中的选项 lb.get(lb.curselection())
属性:selectmode可以为BROWSE MULTIPL SINGLE
'''
##################################################
def callback(event):
    print ("clicked at", event.x, event.y)

var=tk.StringVar()
lb=tk.Listbox(root,listvariable=var)

var.set(('a','b','c','d'))
lb.insert(4,'test1')
lb.insert(5,'test2')
lb.insert(6,'test3')
lb.insert(7,'test4')
lb.insert(8,'test5')
lb.delete(0)
print(lb.get(0,1))
def print_item(event1):
    print (lb.get(lb.curselection()))
    t.insert(tk.END,(lb.get(lb.curselection())+'\n'))

lb.bind('<ButtonRelease-1>',print_item)#<ButtonRelease-1> shubiaoshijian

lb.pack(side=tk.LEFT)

print(var.get())

'''
7.Scrollbar
说明:垂直滚动控件
用法:ListBox(根对象,【属性列表】
'''

scrl = tk.Scrollbar(frame1)
scrl.pack(side=tk.LEFT,fill=tk.Y)
lb.configure(yscrollcommand=scrl.set)   # 指定Listbox的yscrollbar的回调函数为Scrollbar的set,表示滚动条在窗口变化时实时更新
lb.pack(side=tk.LEFT,fill=tk.BOTH)
scrl['command'] = lb.yview  # 指定Scrollbar的command的回调函数是Listbar的yview
root.mainloop() # 进入消息循环