支持python的常見GUI工具包:
Tkinter 使用Tk平台 很容易得到 半標准
wxpython 基於wxWindows。跨平台越來越流行
Python Win 只能在Windows上使用 使用了本機的Windows GUI功能
Java Swing 只能用於Jython 使用本機的Java GUI
PyGTK 使用GTK平台 在linux上很流行
PyQt 使用QT平台 跨平台
Tkinter學習
介紹以下幾個控件的用法
Label
Frame
Entry
Text
Button
Listbox
Scrollbar
說明每個控件最后要加上pack().否則控件是無法顯示的
1.Label
說明:標簽
用法:Label(根對象,【屬性列表】)
屬性:
text 要顯示的文本
bg 背景顏色
bd 外圍3D邊界的寬度
font 字體(顏色、大小)
width 控件寬度
height 控件高度
實例:
#-*- coding: UTF-8 -*- __author__ = '007' __date__ = '2016/4/7' from Tkinter import * root = Tk() # 初始化Tk() root.title("label-test") # 設置窗口標題 root.geometry("200x300") # 設置窗口大小 注意:是x 不是* root.resizable(width=True, height=False) # 設置窗口是否可以變化長/寬,False不可變,True可變,默認為True l = Label(root, text="label", bg="pink", font=("Arial",12), width=8, height=3) l.pack(side=LEFT) # 這里的side可以賦值為LEFT RTGHT TOP BOTTOM root.mainloop() # 進入消息循環
運行結果:
2.Frame
說明:在屏幕上創建一塊矩形區域,多作為容器來布局窗體
用法:frame(根對象,【屬性列表】)
實例:
#-*- coding: UTF-8 -*- __author__ = '007' __date__ = '2016/4/7' from Tkinter import * root = Tk() # 初始化Tk() root.title("frame-test") # 設置窗口標題 root.geometry("300x200") # 設置窗口大小 注意:是x 不是* root.resizable(width=True, height=False) # 設置窗口是否可以變化長/寬,False不可變,True可變,默認為True Label(root, text="frame", bg="red", font=("Arial",15)).pack() frm = Frame(root) #left frm_L = Frame(frm) Label(frm_L, text="左上", bg="pink", font=("Arial",12)).pack(side=TOP) Label(frm_L, text="左下", bg="green", font=("Arial",12)).pack(side=TOP) frm_L.pack(side=LEFT) #right frm_R = Frame(frm) Label(frm_R, text="右上", bg="yellow", font=("Arial",12)).pack(side=TOP) Label(frm_R, text="右下", bg="purple", font=("Arial",12)).pack(side=TOP) frm_R.pack(side=RIGHT) frm.pack() # 這里的side可以賦值為LEFT RTGHT TOP BOTTOM root.mainloop() # 進入消息循環
運行結果:
3.Entry
說明:創建單行文本框
用法:創建 Entry(根對象,【屬性列表】)
綁定變量 var=StringVar() e=Entry(根對象, textvariable = var)
獲取文本框中的值 var.get()
設置文本框中的值 var.set(item1)
實例:
#-*- coding: UTF-8 -*- __author__ = '007' __date__ = '2016/4/7' from Tkinter import * root = Tk() # 初始化Tk() root.title("entry-test") # 設置窗口標題 root.geometry("300x200") # 設置窗口大小 注意:是x 不是* root.resizable(width=True, height=False) # 設置窗口是否可以變化長/寬,False不可變,True可變,默認為True var = Variable() e = Entry(root, textvariable=var) var.set("entry") # 設置文本框中的值 e.pack() # 這里的side可以賦值為LEFT RTGHT TOP BOTTOM root.mainloop() # 進入消息循環
運行結果:
4.Text
說明:向該空間內輸入文本
用法:
t = Text(根對象)
插入:t.insert(mark,內容)
刪除:t.delete(mark1,mark2)
其中,mark可以是行號,或者特殊標識,例如
INSERT:光標的插入點CURRENT:鼠標的當前位置所對應的字符位置
END:這個Textbuffer的最后一個字符
SEL_FIRST:選中文本域的第一個字符,如果沒有選中區域則會引發異常
SEL_LAST:選中文本域的最后一個字符,如果沒有選中區域則會引發異常
實例:
#-*- coding: UTF-8 -*- __author__ = '007' __date__ = '2016/4/7' from Tkinter import * root = Tk() # 初始化Tk() root.title("text-test") # 設置窗口標題 root.geometry("300x200") # 設置窗口大小 注意:是x 不是* root.resizable(width=True, height=False) # 設置窗口是否可以變化長/寬,False不可變,True可變,默認為True t = Text(root) t.insert('1.0',"text1\n") # 插入 t.insert(END,"text2\n") # END:這個Textbuffer的最后一個字符 t.insert('1.0',"text3\n") #t.delete('1.0','2.0') # 刪除 t.pack() # 這里的side可以賦值為LEFT RTGHT TOP BOTTOM root.mainloop() # 進入消息循環
運行結果:
5.Button
說明:創建按鈕
用法:Button(根對象,【屬性列表】)
實例:
#-*- coding: UTF-8 -*- __author__ = '007' __date__ = '2016/4/7' from Tkinter import * root = Tk() # 初始化Tk() root.title("button-test") # 設置窗口標題 root.geometry() # 設置窗口大小 注意:是x 不是* def printhello(): t.insert(END,"hello\n") t = Text() t.pack() # 這里的side可以賦值為LEFT RTGHT TOP BOTTOM Button(root, text="press", command=printhello).pack() root.mainloop() # 進入消息循環
運行結果:
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
實例:
#-*- coding: UTF-8 -*- __author__ = '007' __date__ = '2016/4/7' from Tkinter import * root = Tk() root.title("listbox-test") root.geometry() def print_item(event): print lb.get(lb.curselection()) var = StringVar() lb = Listbox(root, listvariable = var) list_item = [1,2,3,4] for item in list_item: lb.insert(END,item) lb.delete(2,4) var.set(('a','b','c','d')) print var.get() lb.bind('<ButtonRelease-1>',print_item) lb.pack() root.mainloop()
運行結果:
7.Scrollbar
說明:垂直滾動控件
用法:ListBox(根對象,【屬性列表】
實例:
#-*- coding: UTF-8 -*- __author__ = '007' __date__ = '2016/4/7' from Tkinter import * root = Tk() # 初始化Tk() root.title("scrl-test") # 設置窗口標題 root.geometry() # 設置窗口大小 注意:是x 不是* def print_item(event): print lb.get(lb.curselection()) var = StringVar() lb = Listbox(root, height=5, selectmode=BROWSE, listvariable = var) lb.bind('<ButtonRelease-1>',print_item) list_item = [1,2,3,4,5,6,7,8,9,0] for item in list_item: lb.insert(END,item) scrl = Scrollbar(root) scrl.pack(side=RIGHT,fill=Y) lb.configure(yscrollcommand=scrl.set) # 指定Listbox的yscrollbar的回調函數為Scrollbar的set,表示滾動條在窗口變化時實時更新 lb.pack(side=LEFT,fill=BOTH) scrl['command'] = lb.yview # 指定Scrollbar的command的回調函數是Listbar的yview root.mainloop()
運行結果:
通用控件屬性參考