1. 程式人生 > >python中的控制元件

python中的控制元件

import tkinter
from tkinter import ttk
#主視窗
win = tkinter.Tk()

#設定主窗體的標題
win.title("主窗體")

#設定主視窗大小(用x)和位置(以左上角為標準+)
#長:300
#寬300
#左邊間距:100
#上邊間距:50

win.geometry("300x300+100+50")
'''
注意:屬性或者說引數都可以在控制元件類中檢視
標籤Label:
    第一個引數:控制元件所在的窗體
    text:標籤文字
    bg:標籤背景色
    fg:字型顏色
    width:標籤寬度
    height:標籤高度
    font:標籤字型樣式
    justify:文字對齊
'''
label = tkinter.Label(win,text="我是一個標籤",bg="black",fg="white",width=15,height=1,font=("黑體",20),wraplength="200",justify="left",anchor="center")
#顯示控制元件
label.pack()
'''
按鈕Button
'''
#command:要執行的函式,可以是匿名函式
button = tkinter.Button(win,text="按鈕",width=10,command=lambda :print("我是個按鈕"))
button.pack()
'''
Entry文字框
'''

#給文字框賦值的變數
var = tkinter.Variable()
#文字框,textvariable:文字框內容,show:文字加密,密碼框:show="*"
entry = tkinter.Entry(win,textvariable=var)
#給文字框設定文字
var.set("我是文字框")
#獲取文字框中的文字,兩種方法
print(var.get())
print(entry.get())
#點選按鈕打印出文字框中的內容
button2 = tkinter.Button(win,text="列印文字內容",command=lambda :print(var.get()))

entry.pack()
button2.pack()
'''
文字域Text
'''
#height:文字行數,不帶滾動條
text1 = tkinter.Text(win,height=2)
text1.pack()
#帶滾動條的文字域

text2 = tkinter.Text(win,heigh=5)
#滾動條
scrollBar = tkinter.Scrollbar()
#在窗體左側顯示文字域內容,side:哪一側顯示,fill:移動填充方向
text2.pack(side=tkinter.LEFT,fill=tkinter.Y)
#在窗體右側顯示滾動條,fill:Y上下滾動,X左右滾動
scrollBar.pack(side=tkinter.RIGHT,fill=tkinter.Y)
#向文字域插入內容
str='''啊發放房貸發放巨大加法後發哈肌膚的哈佛【哦覅婦女今年煩煩煩的江南發哈爆發後不久啊大家看法你的解放軍啊手動閥的地方靜安寺兌換積分活動環節和佛教的護法和地方很近
啊發放房貸發放巨大加法後發哈肌膚的哈佛【哦覅婦女今年煩煩煩的江南發哈爆發後不久啊大家看法你的解放軍啊手動閥的地方靜安寺兌換積分活動環節和佛教的護法和地方很近
啊發放房貸發放巨地方很近
'''
text2.insert(tkinter.INSERT,str)
#將滾動條和文字域聯絡起來
#滾動條移動,文字跟著移動
scrollBar.config(command=text2.yview())
#文字移動,滾動條跟著移動
text2.config(yscrollcommand=scrollBar.set)
'''
複選框Checkbutton
    變數最好用BooleanVar(),get()獲取為True或False,預設未選中
    變數用其他的,get()獲取為0或1,並且預設是選中的
'''

#複選框變數,是否被選中,選中True,未選中False
checkVar = tkinter.BooleanVar()
check = tkinter.Checkbutton(win,text="複選框",variable=checkVar,command=lambda :print(checkVar.get()))
check.pack()
'''
單選框Radiobutton
    分組變數最好用IntVar(),get()方法獲取的是屬性value的值否則預設選中
'''
#新增一個分組變數,用於實現單選
radionVar = tkinter.IntVar()
#get()獲取value的屬性值
radioButton1 = tkinter.Radiobutton(win,text="單選框",variable=radionVar,value=1,command=lambda :print(radionVar.get()))
radioButton2 = tkinter.Radiobutton(win,text="單選框",variable=radionVar,value=2,command=lambda :print(radionVar.get()))
radioButton1.pack()
radioButton2.pack()
'''
列表框Listbox
'''

#新增變數
listVar = tkinter.StringVar()
#selectmode:可選模式,有很多
listBox = tkinter.Listbox(win,selectmode=tkinter.SINGLE,listvariable=listVar)
#新增元素,insert(index,*element):index可以使用常量,也可以使用下標,下標為0意味著倒敘插入,下標等於或超出元素下標按順序插入
for i in ["1","2","3"]:
    listBox.insert(2,i)
listBox.pack(side=tkinter.LEFT,fill=tkinter.BOTH)
#選中下標元素,可以單個選中,也可以範圍選中
# listBox.selection_set(0,1)
#修改列表框元素,可以是單個元素,也可以是多個元素
listVar.set(["我","和","你","我","和","你","我","和","你","我","和","你","我","和","你","我","和","你"])
#是否有元素選中
print(listBox.select_includes(1))
#獲取選中元素的下標
print(listBox.curselection())
#獲取變數中所有的元素
print(listVar.get())
#獲取指定下標的元素,可以是單個也可以範圍
print(listBox.get(0))
#事件:獲取選中的內容,注意必須要有一個事件引數,不用傳值
def shuangji(event):
    print(listBox.get(listBox.curselection()))
#繫結事件,雙擊事件<Double-Button-1>,事件有很多這只是其中一個
listBox.bind("<Double-Button-1>",shuangji)

#列表框新增滾動條
listScroll = tkinter.Scrollbar(win)
listScroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)
listBox.configure(yscrollcommand=listScroll.set)
listScroll["command"] = listBox.yview

'''
拖拽控制變數的大小Scale,比如音量
from_:變數起始大小
to:變數最大值
orient=tkinter.HORIZONTAL:水平
orient=tkinter.VERTICAL:豎直
tickinterval:變數間隔顯示值
width:拖動條寬度
'''

scale = tkinter.Scale(win,from_=0,to=100,orient=tkinter.HORIZONTAL,tickinterval=50,width=8)
scale.pack()
'''
選單Menu
'''

#選單條
menuBar = tkinter.Menu(win)
#頂層選單,也就是配置該選單為選單條
win.config(menu=menuBar)
#選單欄,tearoff:格式化選單欄,沒它第一個選單項會有一條虛線
menu1 = tkinter.Menu(menuBar,tearoff=False)

def closeFun():
    win.quit()
for i in ["c","c++","java","python","php","nodejs","c#","js","退出"]:
    if i == "退出":
        #新增分割線
        menu1.add_separator()
        menu1.add_command(label=i,command=closeFun)
    else:
        #新增選單
        menu1.add_command(label=i)

#新增選單項
menuBar.add_cascade(label="語言",menu=menu1)

'''
右鍵選單Menu
    就是在窗體或者容器點選滑鼠右鍵顯示選單
'''

#選單條
menuBar2 = tkinter.Menu(win)
win.config(menu=menuBar2)
#選單
menu2 = tkinter.Menu(menuBar2,tearoff=False)
for i in ["c","c++","java","python","php","nodejs","c#","js","退出"]:
    if i == "退出":
        #新增分割線
        menu2.add_separator()
        menu2.add_command(label=i,command=closeFun)
    else:
        #新增選單
        menu2.add_command(label=i)

menuBar2.add_cascade(label="語言",menu=menu2)

#新增窗體右鍵事件的繫結
def youjian(event):
    #選單條在窗體中的座標
    menuBar2.post(event.x_root,event.y_root)
win.bind("<Button-3>",youjian)

'''
下拉框Combobox
'''

#也可以設定變數
comboxVar = tkinter.StringVar()
combox = ttk.Combobox(win,textvariable=comboxVar)
combox.pack()
#通過元組來新增下拉框的元素
combox["values"] = ("上海","北京","廣州","河南","安陽")
#設定下拉框中的元素為預設值
combox.current(0)
#設定下拉框的預設值
combox.set("省份")
#獲取當前下拉框選中的值
print(combox.get())
print(comboxVar.get())
#繫結事件
def comboxFun(event):
    print(combox.get())
combox.bind("<<ComboboxSelected>>",comboxFun)

'''
容器控制元件Frame,可以放多個控制元件
'''

#底層容器
lastFrame = tkinter.Frame(win)
#子容器1
frame_l = tkinter.Frame(lastFrame)
#子容器2
frame_r = tkinter.Frame(lastFrame)
tkinter.Label(frame_l,bg="pink",text="左上").pack(side=tkinter.TOP,)
label2 = tkinter.Label(frame_r,bg="red",text="右上").pack(side=tkinter.TOP)
label3 = tkinter.Label(frame_l,bg="yellow",text="左下").pack(side=tkinter.TOP)
label4 = tkinter.Label(frame_r,bg="blue",text="右下").pack(side=tkinter.TOP)
lastFrame.pack()
frame_l.pack(side=tkinter.LEFT)
frame_r.pack(side=tkinter.RIGHT)

'''
兩種資料結構:
    表格資料
    樹狀資料
'''
#表格

tree = ttk.Treeview(win)
tree.pack()
#定義列
tree["columns"]=("姓名","年齡","身高","體重")
#設定列
tree.column("姓名",width=10)
tree.column("年齡",width=10)
tree.column("身高",width=10)
tree.column("體重",width=10)
#設定表頭文字
tree.heading("姓名",text="姓名")
tree.heading("年齡",text="年齡")
tree.heading("身高",text="身高")
tree.heading("體重",text="體重")
#新增資料
#引數1:父節點,表格不需要
#引數2:哪一行,下標從0開始
#引數text:設定第一列文字
#引數values:表格資料
tree.insert("",0,text="01",values=("張三","15","178cm","74公斤"))
tree.insert("",1,text="02",values=("李四","15","178cm","74公斤"))
#樹狀

tree2 = ttk.Treeview(win)
tree2.pack()
#父節點(根節點)
#引數1:parent父節點
#引數2:同一級排序,從0開始
#引數text:同上,顯示文字資料,主要用這個
#引數values:用不上
tree2_1 = tree2.insert("",0,text="中國",values=())
tree2_2 = tree2.insert("",1,text="美國",values=())
tree2_3 = tree2.insert("",2,text="英國",values=())
#子節點
tree2_1_1 = tree2.insert(tree2_1,0,text="河南",values=())
tree2_1_2 = tree2.insert(tree2_3,0,text="英格蘭",values=())
tree2_1_3 = tree2.insert(tree2_2,0,text="阿拉斯加",values=())




















win.mainloop()