1 #coding=gbk 2 from tkinter import * 3 master =Tk() 4 def callback(): 5 print('click!') 6 #最普通的返回操做,按鈕返回一個值(經過一個函數傳遞) 7 #b=Button(master,text='OK',command=callback) 8 9 #DISABLED state狀態 表示不能按下這個按鈕,沒法操做這個按鈕 10 #b = Button(master, text="Help", state=DISABLED) 11 12 #當你不設置大小的時候,按鈕能容納全部東西;固然你也能夠指定大小:padx,pady 13 #b = Button(master, text="Help", state=DISABLED,padx=59,pady=99) 14 15 #固然咱們也能夠在按鈕裏面在寫入一個窗體,窗體通常是用像素來表示的,因此按鈕也是能夠按照像素來進行表示的,位圖也是能夠的 16 # f = Frame(master, height=320, width=320) 17 # f.pack_propagate(0) # don't shrink 18 # f.pack() 19 # b = Button(f, text="Sure!")#將窗體導入 20 # b.pack(fill=BOTH, expand=1)#填充頂部,擴展 21 22 #當text有多行的時候 23 #b = Button(master, text='longtext阿士大夫撒旦法士大夫撒旦法', anchor=W, justify=LEFT, padx=2) 24 25 #這個操做是讓按鈕好像已經按下去了可是實際上沒有觸發按鈕的功能,再點擊就能觸發 26 #b.config(relief=SUNKEN) 27 28 #b = Checkbutton(master, image=, variable='var', indicatoron=0) 29 #b = Button(master, text="Click me", image='pattern', compound=CENTER) 30 31 32 b.pack() 33 34 mainloop()
1 #coding=gbk 2 3 activebackground, activeforeground:當按鈕被激活時所使用的顏色 4 anchor:控制按鈕上內容的位置。使用N, NE, E, SE, S, SW, W, NW, or CENTER這些值之一。默認值是CENTER。 5 background (bg), foreground (fg):按鈕的顏色。默認值與特定平臺相關。 6 bitmap:顯示在窗口部件中的位圖。若是image選項被指定了,則這個選項被忽略。下面的位圖在全部平臺上都有 效:error, gray75, gray50, gray25, gray12, hourglass, info, questhead, question, 和 warning. 7 8 borderwidth (bd):按鈕邊框的寬度。默認值與特定平臺相關。但一般是1或2象素。 9 command:當按鈕被按下時所調用的一個函數或方法。所回調的能夠是一個函數、方法或別的可調用的Python對象。 10 cursor:當鼠標移動到按鈕上時所顯示的光標。 11 default:若是設置了,則按鈕爲默認按鈕。 12 disabledforeground:當按鈕無效時的顏色。 13 image:在部件中顯示的圖象。若是指定,則text和bitmap選項將被忽略。 14 justify:定義多行文本如何對齊。可取值有:LEFT, RIGHT, 或 CENTER。 15 padx, pady:指定文本或圖象與按鈕邊框的間距。 16 state:按鈕的狀態:NORMAL, ACTIVE 或 DISABLED。默認值爲NORMAL。 17 relief:邊框的裝飾。一般按鈕按下時是凹陷的,不然凸起。另外的可能取值有GROOVE, RIDGE, 和 FLAT。 18 text:顯示在按鈕中的文本。文本能夠是多行。若是bitmaps或image選項被使用,則text選項被忽略 19 textvariable: 20 underline:在文本標籤中哪一個字符加下劃線。默認值爲-1,意思是沒有字符加下劃線 21 width, height:按鈕的尺寸。若是按鈕顯示文本,尺寸使用文本的單位。若是按鈕顯示圖象,尺寸以象素爲單位(或屏幕的單位)。若是尺寸沒指定,它將根據按鈕的內容來計算。
1 #coding=gbk 2 from tkinter import * 3 master = Tk() 4 5 #w = Label(master, text="Hello, world!") 6 7 # w = Label(master, text="Rouge", fg="red") 8 # w = Label(master, text="Helvetica", font=("Helvetica", 16)) 9 10 # w = Label(master, text=longtext, anchor=W, justify=LEFT) 11 12 # v = StringVar() 13 # Label(master, textvariable=v).pack() 14 # v.set("New Text!") 15 16 b.pack() 17 mainloop()
1 #coding=gbk 2 from tkinter import * 3 master = Tk() 4 5 w = Canvas(master, width=200, height=100) 6 w.pack() 7 # 8 # w.create_line(0, 0, 200, 100) 9 # w.create_line(0, 100, 200, 0, fill="red", dash=(4, 4)) 10 # 11 # w.create_rectangle(50, 25, 150, 75, fill="blue") 12 13 14 mainloop()
1 Canvas(root,bg):構造方法,在root上建立畫布,root是母控件,bg是背景色,用字符串設定,例如bg='white' 2 3 create_rectancle(x1,y1,x2,y2[,fill,outline,width,stipple,dash,tags]): 4 5 建立一個item對象,形狀是矩形,即在Canvas對象畫矩形,x1,y1,x2,y2是座標,是前4個參數,後面的參數順序是亂來的。fill表示item的填充顏色,凡是顏色都用字符串設定,outline表示邊框線的顏色,width表示邊框線的寬度,dash若是缺省,則邊框線是實線,不然用一個1到255的整數表示,設定虛線的長度,通常用10便可,stipple能夠在圖形中加入斑點,通常參數是'gray12','gray25'這樣,暫時不太清楚,通常省略。tags能夠是一個字符串或元組.列表等,使用後建立的item對象的tags字段就設定了,可用來做爲標識尋找該item,也能夠用Canvas.gettags(item)返回item的tags字段。注意tags若是是一個序列,則元組中任一元素均可以做爲標識符,也就是有多個標識符。該方法返回一個編號,而不是item對象自己,編號表示該item是Canvas的第幾個item。 6 7 coords(item,position): 8 9 移動一個item(即畫好的圖形)的位置,item爲移動的對象,position是一個元組,4個整數表示移動後的座標。 10 11 find_withtag(tag): 12 13 返回一個元組,表示全部以tag爲標識符的Item對象。item對象返回後不是一個對象而是一個整數,表明是Canvas對象的第幾個item而已。即便不用該方法,直接print(item),或item回車,顯示的也是item對象的編號,好比1,2,3這些而已。 14 15 itemconfig(item[,item類的其餘參數,參見create_rectancle): 16 17 設置item的各個參數,注意item能夠用編號表示。 18 19 move(item,x,y): 20 21 把item移動,座標增量爲x,y 22 23 del(item or tag): 24 25 刪除一個item,可用item編號(整數)或tag(字符串) 26 27 scale(item,xoffset,yoffset,xscale,yscale): 28 29 保持第一個端點不變,把變長,變爲:(原邊長 - offset)*scale + offset。簡單的用法是offset所有爲0,只改變變長的倍數 30 31 tag_bind(tag,buttonType,methor): 32 33 綁定事件與方法。當擁有tag標籤的item的邊框被點擊時,會調用Methor,buttonType用字符串表示,設定點擊的鍵,經常使用的'<Button-1>'表示鼠標左鍵,'<Button-3>'表示鼠標右鍵 34 35 除了繪製矩形外,還有弧形,支線,文字,位圖(一些圖標),圖像文件等均可以繪製,具體看說明,再也不詳細記錄。
1 #構造函數 2 __init__(self, vgap=0, hgap=0) 3 (Constructor) 4 5 Constructor, with optional parameters to specify the gap between the rows and columns. 6 7 Parameters: 8 vgap 9 (type=int) 10 11 hgap 12 (type=int) 13 14 #添加單個構件到boxsizer 15 # pos 表示的單元格的點(cell position能夠看作是座標) 16 # span 表示的單個或合併的單元格 17 Add(self, item, pos, span=DefaultSpan, flag=0, border=0, userData=None) 18 19 Adds an item to the sizer at the grid cell pos, optionally spanning more than one row or column as specified with span. The remaining args behave similarly to wx.Sizer.Add. 20 21 Returns True if the item was successfully placed at the given cell position, False if something was already there. 22 23 Parameters: 24 pos 25 (type=GBPosition) 26 27 span 28 (type=GBSpan) 29 30 flag 31 (type=int) 32 33 border 34 (type=int) 35 . 36 . 37 . 38 (原文: http://www.wxpython.org/docs/api/wx.GridBagSizer-class.html)
1 def __init__(self, parent): 2 wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize) 3 wred = wx.TextCtrl(self, wx.NewId(), 'red') 4 wwhite = wx.TextCtrl(self, wx.NewId(), 'white') 5 wblue = wx.TextCtrl(self, wx.NewId()) 6 wcyan = wx.TextCtrl(self, wx.NewId()) 7 8 vgap, hgap = 10, 20 9 gbs = wx.GridBagSizer(vgap, hgap) 10 11 b = 0 12 # Add(self, item, pos, span=DefaultSpan, flag=0, border=0, userData=None) 13 # pos (type=GBPosition) cell position 14 # span(type=GBSPan) 15 gbs.Add(wred, (1, 1), (1, 1), wx.EXPAND | wx.ALL, b) 16 gbs.Add(wwhite, (2, 3), (1, 1), wx.EXPAND | wx.ALL, b) 17 gbs.Add(wblue, (1, 0), (1, 1), wx.EXPAND | wx.ALL, b) 18 gbs.Add(wcyan, (0, 0), (1, 1), wx.EXPAND | wx.ALL, b) 19 20 gbs.AddGrowableRow(0) # 0/1/2...表示的行號或列號 21 gbs.AddGrowableRow(1) 22 gbs.AddGrowableRow(2) 23 gbs.AddGrowableCol(0) 24 gbs.AddGrowableCol(1) 25 gbs.AddGrowableCol(3) 26 27 self.SetSizer(gbs)
1 #Tkinter教程之Entry篇 2 #Entry用來輸入單行文本 3 '''1.第一個Entry程序''' 4 from Tkinter import * 5 root = Tk() 6 Entry(root,text = 'input your text here').pack() 7 root.mainloop() 8 #上面的代碼目的是建立一個Entry對象,並在Entry上顯示'input your text here',運行此代碼,並無看到文本的顯示,由此可知與Lable和Button不一樣,Entry的text屬性不能夠設置Entry的文本 9 10 '''2.在Entry中設定初始值,使用textvariable將變量與Entry綁定''' 11 from Tkinter import * 12 root = Tk() 13 e = StringVar() 14 entry = Entry(root,textvariable = e) 15 e.set('input your text here') 16 entry.pack() 17 root.mainloop() 18 19 #上面的例子中將變量e與Entry綁定,而後將e的值設置爲'input your text here',程序運行時的初始值便設置了。 20 21 '''3.設置爲只讀Entry. 22 Entry的另外一個比較有用的屬性,設置爲只讀,不容許用戶對它的值改變。 23 設置state屬性爲'readonly' 24 ''' 25 from Tkinter import * 26 root = Tk() 27 e = StringVar() 28 entry = Entry(root,textvariable = e) 29 e.set('input your text here') 30 entry.pack() 31 entry['state'] = 'readonly' 32 root.mainloop() 33 34 #實際上Entry的屬性值可使用的也爲normal/active/disabled,'readonly'與disabled同樣 35 36 '''4.設置爲密碼輸入框 37 #將Entry做爲一個密碼輸入框來使用,即不顯示用戶輸入的內容值,用特定符號代替。使用用屬性 38 show來指定。 39 ''' 40 from Tkinter import * 41 root = Tk() 42 e = StringVar() 43 entry = Entry(root,textvariable = e) 44 e.set('input your text here') 45 entry.pack() 46 #使用*來顯示輸入的內容,若是喜歡能夠改成其它字符 47 entry['show'] = '*' 48 #分別使用*#$顯示輸入的文本內容 49 for mask in ['*','#','$']: 50 e = StringVar() 51 entry = Entry(root,textvariable = e) 52 e.set('password') 53 entry.pack() 54 entry['show'] = mask 55 56 root.mainloop() 57 58 '''5.驗證輸入的內容是否符合要求。 59 使用validate來校驗輸入的內容 60 使用validate方法來限制輸入的內容 61 這是一個有問題的例子,沒法調用validateText回調函數 62 ‘''' 63 from Tkinter import * 64 root = Tk() 65 e = StringVar() 66 def validateText(contents): 67 print contents 68 return contents.isalnum() 69 70 entry = Entry(root,validate = 'key',textvariable = e,validatecommand = validateText) 71 entry.pack() 72 73 root.mainloop() 74 ''' 75 文檔中說明使用validate來接受的事件,使用validatecommand來肯定輸入的內容是否合法,但 76 如何傳入參數?沒找到相應的說明 77 ''' 78 #還有其餘的屬性fg/bg/relief/width/height/justify/state使用方法與Button相同,再也不舉例。 79 80 #author: jcodeer 81 #blog: jcodeer.cublog.cn 82 #email: jcodeer@126.com
1 #coding=gbk 2 from tkinter import * 3 # root = Tk() 4 # def hello(): 5 # print ("hello menu") 6 # menubar = Menu(root) 7 # #建立主菜單,每一個菜單對應的回調函數都是hello 8 # for item in ['Python','PHP','CPP','C','Java','JavaScript','VBScript']: 9 # #添加菜單函數 10 # menubar.add_command(label = item,command = hello) 11 # #將root的menu屬性設置爲menubar 12 # root['menu'] = menubar 13 # root.mainloop() 14 15 16 # root = Tk() 17 # def hello(): 18 # print ('hello menu') 19 # menubar = Menu(root) 20 # 21 # filemenu = Menu(menubar,tearoff = 0) 22 # for item in ['Python','PHP','CPP','C','Java','JavaScript','VBScript']: 23 # #添加菜單函數 24 # filemenu.add_commad(label = item,command = hello) 25 # #將menubar的menu屬性指定爲filemenu,即filemenu爲menubar的下拉菜單 26 # menubar.add_cascade(label = 'Language',menu = filemenu) 27 # root['menu'] = menubar 28 # root.mainloop() 29 30 31 # '''3.向菜單中添加Checkbutton項''' 32 # # -*- coding: cp936 -*- 33 # from Tkinter import * 34 # root = Tk() 35 #每次打印出各個變量的當前值 36 # root = Tk() 37 # #每次打印出各個變量的當前值 38 # def printItem(): 39 # print ('Python = '),vPython.get() 40 # print ('PHP = '),vPHP.get() 41 # print ('CPP = '),vCPP.get() 42 # print ('C = '),vC.get() 43 # print ('Java = '),vJava.get() 44 # print ('JavaScript = '),vJavaScript.get() 45 # print ('VBScript = '),vVBScript.get() 46 # 47 # menubar = Menu(root) 48 # 49 # vPython = StringVar() 50 # vPHP = StringVar() 51 # vCPP = StringVar() 52 # vC = StringVar() 53 # vJava = StringVar() 54 # vJavaScript = StringVar() 55 # vVBScript = StringVar() 56 # 57 # filemenu = Menu(menubar,tearoff = 0) 58 # for k,v in {'Python':vPython, 59 # 'PHP':vPHP, 60 # 'CPP':vCPP, 61 # 'C':vC, 62 # 'Java':vJava, 63 # 'JavaScript':vJavaScript, 64 # 'VBScript':vVBScript}.items(): 65 # #綁定變量與回調函數 66 # filemenu.add_checkbutton(label = k,command = printItem,variable = v) 67 # #將menubar的menu屬性指定爲filemenu,即filemenu爲menubar的下拉菜單 68 # menubar.add_cascade(label = 'Language',menu = filemenu) 69 # root['menu'] = menubar 70 # root.mainloop() 71 #程序運行,使用了Checkbutton,並經過printItem將每一個Checkbutton在當前值打印出來。 72 73 74 75 # '''4.向菜單 中添加Radiobutton項''' 76 # 77 # root = Tk() 78 # 79 # menubar = Menu(root) 80 # vLang = StringVar() 81 # #每次打印出當前選中的語言 82 # def printItem(): 83 # print ('vLang = '),vLang.get() 84 # filemenu = Menu(menubar,tearoff = 0) 85 # for k in ['Python','PHP','CPP','C','Java','JavaScript','VBScript']: 86 # #綁定變量與回調函數,指定的變量vLang將這幾項劃爲一組 87 # filemenu.add_radiobutton(label = k,command = printItem,variable = vLang) 88 # #將menubar的menu屬性指定爲filemenu,即filemenu爲menubar的下拉菜單 89 # menubar.add_cascade(label = 'Language',menu = filemenu) 90 # root['menu'] = menubar 91 # root.mainloop() 92 # #程序每次打印出當前選中的語言 93 # #與Checkbutton不一樣的是,同一個組內只有一個處於選中狀態。 94 95 96 '''5.向菜單中添加分隔符''' 97 # # -*- coding: cp936 -*- 98 # 99 # root = Tk() 100 # menubar = Menu(root) 101 # 102 # #每次打印出當前選中的語言 103 # def printItem(): 104 # print ('add_separator') 105 # 106 # filemenu = Menu(menubar,tearoff = 0) 107 # for k in ['Python','PHP','CPP','C','Java','JavaScript','VBScript']: 108 # filemenu.add_command(label = k,command = printItem) 109 # #將各個菜單項使用分隔符隔開 110 # filemenu.add_separator() 111 # menubar.add_cascade(label = 'Language',menu = filemenu) 112 # root['menu'] = menubar 113 # root.mainloop() 114 # #分隔符將相關的菜單項進行分組,只是UI上的實現,程序上沒有任何改變,它也不執行任何的命令 115 116 117 118 ''' 6.將以上的例5中的菜單改成右擊彈出菜單''' 119 #方法是經過綁定鼠標右鍵,每當點擊時彈出這個菜單,去掉與root的關聯 120 # -*- coding: cp936 -*- 121 122 # root = Tk() 123 # menubar = Menu(root) 124 # 125 # def printItem(): 126 # print ('popup menu') 127 # 128 # filemenu = Menu(menubar,tearoff = 0) 129 # for k in ['Python','PHP','CPP','C','Java','JavaScript','VBScript']: 130 # filemenu.add_command(label = k,command = printItem) 131 # filemenu.add_separator() 132 # menubar.add_cascade(label = 'Language',menu = filemenu) 133 # #此時就不要將root的menu設置爲menubar了 134 # #root['menu'] = menubar 135 # def popup(event): 136 # #顯示菜單 137 # #這裏設置右鍵點擊顯示菜單 138 # menubar.post(event.x_root,event.y_root) 139 # #在這裏相應鼠標的右鍵事件,右擊時調用popup,此時與菜單綁定的是root,能夠設置爲其它的控件,在綁定的控件上右擊就能夠彈出菜單 140 # root.bind('<Button-3>',popup) 141 # root.mainloop() 142 # #運行測試一個,能夠看到各個菜單 項的功能都是可使用的,因此彈出菜單與通常的菜單功能是同樣的,只是彈出的方式不一樣而已。 143 144 145 146 ''' 7.如下的代碼演示了菜單項的操做方法,包括添加各類菜單項,刪除一個或多個菜單項''' 147 # -*- coding: cp936 -*- 148 149 root = Tk() 150 menubar = Menu(root) 151 152 def printItem(): 153 print ('add_separator') 154 155 filemenu = Menu(menubar,tearoff = 0) 156 for k in range(5): 157 filemenu.add_command(label = str(k),command = printItem) 158 menubar.add_cascade(label = 'Language',menu = filemenu) 159 160 '''如下爲向菜單中添加項的操做''' 161 #在索引1添加一菜單command項 162 filemenu.insert_command(1,label = '1000',command = printItem) 163 #在索引2添加一菜單checkbutton項 164 filemenu.insert_checkbutton(2,label = '2000',command = printItem) 165 #在索引3添加一菜單radiobutton項 166 filemenu.insert_radiobutton(3,label = '3000',command = printItem) 167 #將新添加的菜單項使用分隔符隔開 168 filemenu.insert_separator(1) 169 filemenu.insert_separator(5) 170 171 '''如下爲刪除菜單項的操做''' 172 #刪除索引6-9的菜單項 173 #這兩個參數是控制刪除下拉列表的位置的 174 filemenu.delete(4,9) 175 #刪除索引爲0的菜單項 176 filemenu.delete(0) 177 178 root['menu'] = menubar 179 root.mainloop() 180 #分隔符將相關的菜單項進行分組,只是UI上的實現,程序上沒有任何改變,它也不執行任何的命令
1 #coding=gbk 2 '''1.一個簡單的Checkbutton例子''' 3 #建立一個Checkbutton,顯示文本爲"python" 4 from tkinter import * 5 # root = Tk() 6 # Checkbutton(root,text = 'python').pack() 7 # root.mainloop() 8 9 10 '''2.設置Checkbutton的回調函數''' 11 # def callCheckbutton(): 12 # print ('you check this button') 13 # root = Tk() 14 # Checkbutton(root,text = 'check python',command = callCheckbutton).pack() 15 # root.mainloop() 16 # #無論Checkbutton的狀態如何,此回調函數都會被調用 17 18 19 '''3.經過回調函數改變Checkbutton的顯示文本text的值''' 20 21 # def callCheckbutton(): 22 # #改變v的值,即改變Checkbutton的顯示值 23 # v.set('check Tkinter') 24 # 25 # root = Tk() 26 # v = StringVar() 27 # v.set('check python') 28 # #綁定v到Checkbutton的屬性textvariable 29 # Checkbutton(root,text = 'check python',textvariable = v,command = callCheckbutton).pack() 30 # 31 # root.mainloop() 32 33 34 '''4.上述的textvariable使用方法與Button的用法徹底相同,使用此例是爲了區別Checkbutton的另外的一個屬性variable,此屬性與textvariable不一樣,它是與這個控件自己綁定,Checkbutton本身有值:On和Off值,缺省狀態On爲1,Off爲0,如:''' 35 # #顯示Checkbutton的值 36 # root = Tk() 37 # #將一整數與Checkbutton的值綁定,每次點擊Checkbutton,將打印出當前的值 38 # v = IntVar() 39 # def callCheckbutton(): 40 # print (v.get()) 41 # Checkbutton(root, 42 # variable = v, 43 # text = 'checkbutton value', 44 # command = callCheckbutton).pack() 45 # root.mainloop() 46 47 48 '''5.Checkbutton的值不只僅是1或0,能夠是其餘類型的數值,能夠經過onvalue和offvalue屬性設置Checkbutton的狀態值,以下代碼將On設置爲'python',Off值設置爲'Tkinter',程序的打印值將再也不是0或1,而是'Tkinter’或‘python’''' 49 # root = Tk() 50 # #將一字符串與Checkbutton的值綁定,每次點擊Checkbutton,將打印出當前的值 51 # v = StringVar() 52 # def callCheckbutton(): 53 # print (v.get()) 54 # Checkbutton(root, 55 # variable = v, 56 # text = 'checkbutton value', 57 # onvalue = 'python', #設置On的值 58 # offvalue = 'tkinter', #設置Off的值 59 # command = callCheckbutton).pack() 60 # root.mainloop() 61 62 # 6.還有其餘的屬性fg/bg/relief/width/height/justify/state使用方法與Button相同,再也不舉例。
1 #coding=gbk 2 '''1.建立一個簡單的Radiobutton''' 3 from tkinter import * 4 # root = Tk() 5 # Radiobutton(root,text = 'python').pack() 6 # Radiobutton(root,text = 'tkinter').pack() 7 # Radiobutton(root,text = 'widget').pack() 8 # root.mainloop() 9 # #不指定綁定變量,每一個Radiobutton自成一組 10 11 12 '''2.建立一個Radiobutton組,使用綁定變量來設置選中哦的按鈕''' 13 # root = Tk() 14 # #建立一個Radiobutton組,建立三個Radiobutton,並綁定到整型變量v 15 # #選中value=1的按鈕 16 # v = IntVar() 17 # v.set(1) 18 # for i in range(3): 19 # Radiobutton(root,variable = v,text = 'python',value = i).pack() 20 # root.mainloop() 21 22 23 '''3.建立兩個不一樣的組''' 24 # root = Tk() 25 # vLang = IntVar() 26 # vOS = IntVar() 27 # vLang.set(1) 28 # vOS.set(2) 29 # 30 # for v in [vLang,vOS]: #建立兩個組 31 # for i in range(3): #每一個組含有3個按鈕 32 # Radiobutton(root, 33 # variable = v, 34 # value = i, 35 # text = 'python' + str(i) 36 # ).pack() 37 # root.mainloop() 38 # #不一樣的組,各個按鈕互不影響。 39 40 41 42 '''4.若是同一個組中的按鈕使用相同的alue,則這兩個按鈕的工做方式徹底相同''' 43 44 root = Tk() 45 v = IntVar() 46 v.set(1) 47 for i in range(3): 48 Radiobutton(root, 49 variable = v, 50 value = 1, 51 text = 'python' + str(i) 52 ).pack() 53 for i in range(3): 54 Radiobutton(root, 55 variable = v, 56 value = i, 57 text = 'python' + str(2 + i) 58 ).pack() 59 root.mainloop() 60 #上述的例子中共有4個alue爲1的值,當選中其中的一個時,其餘三個也會被選中;選中除了這四個只外的按鈕時,四個按鈕所有取消 61 62 63 '''5.與Checkbutton相似,每一個Radiobutton能夠有本身的處理函數,每當點擊按鈕時,系統會調用相應的處理函數''' 64 # -*- coding: cp936 -*- 65 66 # root = Tk() 67 # v = IntVar() 68 # v.set(0) 69 # def r1(): 70 # print ('call r1') 71 # def r2(): 72 # print ('call r2') 73 # def r3(): 74 # print ('call r3') 75 # def r4(): 76 # print ('call r4') 77 # i = 0 78 # #建立8個按鈕,其中兩個兩個的value值相同 79 # for r in [r1,r2,r3,r4]: 80 # Radiobutton(root, 81 # variable = v, 82 # text = 'radio button', 83 # value = i, 84 # command = r 85 # ).pack() 86 # Radiobutton(root, 87 # variable = v, 88 # text = 'radio button', 89 # value = i, 90 # command = r 91 # ).pack() 92 # i += 1 93 # 94 # root.mainloop() 95 # #注意雖然同時能夠選中兩個按鈕,但每次點擊按鈕,執行的代碼只有一次
1 '''1.建立一個Listbox,向其中添加三個item''' 2 from Tkinter import * 3 root = Tk() 4 lb = Listbox(root) 5 for item in ['python','tkinter','widget']: 6 lb.insert(END,item) 7 lb.pack() 8 root.mainloop() 9 10 '''2.建立一個能夠多選的Listbox,使用屬性selectmaod''' 11 from Tkinter import * 12 root = Tk() 13 lb = Listbox(root,selectmode = MULTIPLE) 14 for item in ['python','tkinter','widget']: 15 lb.insert(END,item) 16 lb.pack() 17 root.mainloop() 18 # 依次點擊這三個item,均顯示爲選中狀態。 19 # 屬性MULTIPLE容許多選,每次點擊item,它將改變本身的當前選狀態,與Checkbox有點類似 20 21 '''3這個屬性selectmode還能夠設置爲BROWSE,能夠經過鼠標來移動Listbox中的選中位置(不是移動item),這個屬性也是Listbox在默認設置的值,這個程序與1.程序運行的結果的同樣的。''' 22 from Tkinter import * 23 root = Tk() 24 lb = Listbox(root,selectmode = BROWSE) 25 for item in ['python','tkinter','widget']: 26 lb.insert(END,item) 27 lb.pack() 28 root.mainloop() 29 #使用鼠標進行拖動,能夠看到選中的位置隨之變化。 30 # 與BROWSE類似 的爲SINGLE,但不支持鼠標移動選中位置。 31 from Tkinter import * 32 root = Tk() 33 lb = Listbox(root,selectmode = BROWSE) 34 for item in ['python','tkinter','widget']: 35 lb.insert(END,item) 36 lb.pack() 37 root.mainloop() 38 #使用鼠標進行拖動,沒有任何變化 39 '''4.使用selectmode = EXPANDED使用Listbox來支持Shift和Control。''' 40 from Tkinter import * 41 root = Tk() 42 lb = Listbox(root,selectmode = EXTENDED) 43 for item in ['python','tkinter','widget']: 44 lb.insert(END,item) 45 lb.pack() 46 root.mainloop() 47 #運行程序,點中「python",shift + 點擊"widget",會選中全部的item 48 #運行程序,點中"python",control + 點擊"widget",會選中python和widget,第二項tkinter處於非選中狀態 49 50 '''5.向Listbox中添加一個item''' 51 # 以上的例子均使用了insert來向Listbox中添加 一個item,這個函數有兩個屬性一個爲添加的索引值,另外一個爲添加的項(item) 52 # 有兩個特殊的值ACTIVE和END,ACTIVE是向當前選中的item前插入一個(即便用當前選中的索引做爲插入位置);END是向 53 # Listbox的最後一項添加插入一項 54 # 先向Listbox中追加三個item,再在Listbox開始添加三項 55 from Tkinter import * 56 root = Tk() 57 lb = Listbox(root) 58 for item in ['python','tkinter','widget']: 59 lb.insert(END,item) 60 #只添加一項將[]做爲一個item 61 #lb.insert(0,['linux','windows','unix']) 62 #添加三項,每一個string爲一個item 63 lb.insert(0,'linux','windows','unix') 64 lb.pack() 65 root.mainloop() 66 '''6.刪除Listbox中的項,使用delete,這個函數也有兩個參數,第一個爲開始的索引值;第二個爲結束的索引值,若是不指定則只刪除第一個索引項。''' 67 from Tkinter import * 68 root = Tk() 69 lb = Listbox(root) 70 for i in range(10): 71 lb.insert(END,str(i)) 72 lb.delete(1,3) 73 lb.pack() 74 root.mainloop() 75 #運行程序,只有值0456789,1-3被刪除 76 #刪除所有內容,使用delete指定第一個索引值0和最後一個參數END,便可 77 #lb.delete(0,END) 78 '''7.選中操做函數,使用函數實現。selection_set函數有兩個參數第一個爲開始的索引;第二個爲結束的索引,若是不指定則只選中第一個參數指定的索引項''' 79 from Tkinter import * 80 root = Tk() 81 lb = Listbox(root) 82 for i in range(10): 83 lb.insert(END,str(i)) 84 lb.selection_set(0,10) 85 lb.pack() 86 root.mainloop() 87 # 程序運行結果,選中了全部的項。 此代碼並未指定Listbox爲MULTIPLE或EXTENDED,查經過selection_set仍舊能夠對Listbox 88 #進行操做。 89 90 #與之相對的即是取消選中的函數了,參數與selection_set在參數相同,以下代碼取消索引從0-3在狀態 91 from Tkinter import * 92 root = Tk() 93 lb = Listbox(root) 94 for i in range(10): 95 lb.insert(END,str(i)) 96 lb.selection_set(0,10) 97 lb.selection_clear(0,3) 98 lb.pack() 99 root.mainloop() 100 101 '''8.獲得當前Listbox中的item個數''' 102 from Tkinter import * 103 root = Tk() 104 lb = Listbox(root) 105 for i in range(10): 106 lb.insert(END,str(i)) 107 lb.delete(3) 108 print lb.size() 109 lb.pack() 110 root.mainloop() 111 #首先向Listbox中添加 了10個item,而後刪除索引爲3在item,最後的打印結果爲9,即當前的Listbox中只有9項 112 113 '''9.返回指定索引的項''' 114 from Tkinter import * 115 root = Tk() 116 lb = Listbox(root) 117 for i in range(10): 118 lb.insert(END,str(i*100)) 119 print lb.get(3) 120 lb.pack() 121 root.mainloop() 122 #返回值爲300 123 #get也爲兩個參數的函數,能夠返回多個項(item),以下返回索引值3-7的值 124 from Tkinter import * 125 root = Tk() 126 lb = Listbox(root) 127 for i in range(10): 128 lb.insert(END,str(i*100)) 129 print lb.get(3,7) 130 lb.pack() 131 root.mainloop() 132 #返回值爲('300', '400', '500', '600', '700'),是一個tuple類型。 133 134 '''10.返回當前返回的項的索引,不是item的值''' 135 from Tkinter import * 136 root = Tk() 137 lb = Listbox(root) 138 for i in range(10): 139 lb.insert(END,str(i*100)) 140 lb.selection_set(3,8) 141 print lb.curselection() 142 lb.pack() 143 root.mainloop() 144 #返回值爲('3', '4', '5', '6', '7', '8'),而不是('300','400','500','600','700','800'),啞然沒法直接獲得各項的值,知道了索引,獲得值 145 #就很容易了:lb.get()就能夠實現。 146 147 '''11.判斷 一個項是否被選中,使用索引。''' 148 from Tkinter import * 149 root = Tk() 150 lb = Listbox(root) 151 for i in range(10): 152 lb.insert(END,str(i*100)) 153 lb.selection_set(3,8) 154 print lb.selection_includes(8) 155 print lb.selection_includes(0) 156 157 lb.pack() 158 root.mainloop() 159 #返回結果:True Flase,即8包含在選中的索引中,0不包含在選中的索引中 160 161 '''12.Listbox與變量綁定''' 162 # -*- coding: cp936 -*- 163 from Tkinter import * 164 root = Tk() 165 v = StringVar() 166 lb = Listbox(root,listvariable = v) 167 for i in range(10): 168 lb.insert(END,str(i*100)) 169 #打印當前列表中的項值 170 print v.get() 171 #輸出:('0', '100', '200', '300', '400', '500', '600', '700', '800', '900') 172 #改變v的值,使用tuple能夠與item對應 173 v.set(('1000','200')) 174 #結果只有兩項了1000和200 175 lb.pack() 176 root.mainloop() 177 178 '''13.Listbox與事件綁定''' 179 # 它不支持command屬性來設置回調函數了,使用bind來指定回調函數,打印當前選中的值 180 # -*- coding: cp936 -*- 181 from Tkinter import * 182 root = Tk() 183 def printList(event): 184 print lb.get(lb.curselection()) 185 lb = Listbox(root) 186 lb.bind('<Double-Button-1>',printList) 187 for i in range(10): 188 lb.insert(END,str(i*100)) 189 lb.pack() 190 root.mainloop() 191 192 #還有一個比較實用的功能沒有介紹:滾動條的添加,留到後面介紹Scrollbar的時候再一併介紹
1 '''1.建立簡單的Toplevel''' 2 # -*- coding: cp936 -*- 3 from Tkinter import * 4 root = Tk() 5 tl = Toplevel() 6 #爲了區別root和tl,咱們向tl中添加了一個Label 7 Label(tl,text = 'hello label').pack() 8 root.mainloop() 9 #運行結果生成了兩個窗體,一個是root啓動的,另外一個則是Toplevel建立的,它包含有一個label;關閉tl 10 #則沒有退出程序,Tk仍舊工做;若關閉Tk,整個Tk結束tl也結束,它不能單獨存在。 11 12 '''2.設置Toplevel的屬性''' 13 #title設置標題 14 #geometry設置寬和高 15 # -*- coding: cp936 -*- 16 from Tkinter import * 17 root = Tk() 18 tl = Toplevel() 19 #設置tl的title 20 tl.title('hello Toplevel') 21 #設置tl在寬和高 22 tl.geometry('400x300') 23 #爲了區別root和tl,咱們向tl中添加了一個Label 24 Label(tl,text = 'hello label').pack() 25 root.mainloop() 26 27 '''3.使用Toplevel本身製做提示框''' 28 # -*- coding: cp936 -*- 29 from Tkinter import * 30 root = Tk() 31 mbYes,mbYesNo,mbYesNoCancel,mbYesNoAbort = 0,1,2,4 32 #定義一個消息對話框,依據傳入的參數不一樣,彈出不一樣的提示信息 33 def MessageBox(): #沒有使用使用參數 34 mbType = mbYesNo 35 textShow = 'Yes' 36 if mbType == mbYes: 37 textShow = 'Yes' 38 elif mbType == mbYesNo: 39 textShow = 'YesNo' 40 elif mbType == mbYesNoCancel: 41 textShow = 'YesNoCancel' 42 elif mbType == mbYesNoAbort: 43 textShow = 'YesNoAbort' 44 tl = Toplevel(height = 200,width = 400) 45 Label(tl,text = textShow).pack() 46 #由Button來啓動這個消息框,由於它使用了空的回調函數,故MessageBox改成了無參數形式,使用了固定 47 #值mbYesNo 48 Button(root,text = 'click me',command = MessageBox).pack() 49 root.mainloop()