標籤:size csdn 必須 red 實參 通知 xtend **kw) index
Label組件:Label組件用於顯示文本和映像,並且使用雙重緩衝用法:使用Label組件可以指定想要顯示的內容(文本、位元影像或者圖片):
from tkinter import * master = Tk() w = Label(master, text="Hello FishC!") w.pack() //用於自動調節尺寸 mainloop() //主事件迴圈
還可以通過foreground(fg)和background(bg)來設定Label的前景色彩和背景色Label可以顯示多行文本,可以直接使用換行文本符或使用wraplength選項來實現,文本換行時,你可以使用 anchor 和 justify 選項來使得文本如你所希望的顯示出來 可以使用Label顯示PhotoImage和BitmapImage對象(務必保留一份圖片對象的引用,以防python的記憶體回收機制回收)Label(master=None,**options)master--父控制項**options--組件選項 Button控制項:Button組件用於實現各種各樣的按鈕Button組件常常被用於工具列、應用程式視窗、和表示接受或拒絕的對話方塊禁用按鈕:
b = Button(master, text="Help", state=DISABLED)
Label的尺寸是正好可以容納其內容,使用padx和pady選項在Button的內容和邊框間添加額外的間距 Button 可以顯示多行文本,你可以直接使用分行符號或使用 wraplength 選項來實現。當文本換行的時候,你可以使用 anchor 和 justify 以及 padx 選項來使得文本如你所希望的顯示出來 按鈕凹下去:將relief選項的預設值RAISED改為SUNKEN
b.config(relief=SUNKEN ) Button(master=None,**options)master--父控制項**options--組件選項 方法:flash()--重新整理Button組件,該方法將重繪Button組件若干次invoke()--調用Button中command選項指定的函數或方法,並返回函數的傳回值--如果Button的狀態是DISABLED(不可用)或沒有指定command選項,則該方法無效 Frame控制項Frame組件是螢幕上的一個矩形地區。Frame主要是作為其他組件的架構基礎,或為其他組件提供間距填充Frame組件主要用於在複雜的布局中將其他組件分組,也用於填充間距和作為實現進階組件的基類Frame(master=None,**options)master--父控制項**options--組件選項 Checkbutton組件:Checkbutton(多選按鈕)用於實現確定是否選擇的按鈕Checkbutton組件被用於作為二選一的按鈕使用Checkbutton,需要先建立一個Tkinter變數用於存放按鈕的狀態 預設情況,variable選項設定為1表示選中狀態,反之設定為0在類中時,最好將variable選項的值作為屬性儲存區 Checkbutton(master=None,**options)master--父控制項**options--組件選項 方法:deselect()--取消Checkbutton組件的選中狀態,也就是設定variable為offvalueselect()--將Checkbutton組件設定為選中狀態,也就是設定variable為onvalueflash()--重新整理Checkbutton組件,該方法將重繪Checkbutton組件若干次 Radiobutton組件:Radiobutton(選項按鈕)組件用於實現多選一的問題。Radiobutton組件是用於實現多選一的問題,它幾乎總是成組使用,其中所有成員公用相同的變數 Radiobutton 組件跟 Checkbutton 組件非常相似,為了實現其“單選”行為,確保一組中的所有按鈕的 variable 選項都使用同一個變數,並使用 value 選項來指定每個按鈕代表什麼值RadioButton(master=None,**options)master--父控制項**options--組件選項 LabelFrame組件:LabelFrame組件是Frame組件的變體,預設情況下,LabelFrame會在其子組件的周圍繪製一個邊框以及一個標題為組件分組,需要先建立一個 LabelFrame,然後像往常一樣將子組件添加進去。LabelFrame 組件會自動繪製一個邊框將子組件包圍起來,並在它們上方顯示一個文本標題LabelFrame(master=None,**options)master--父控制項**options--組件選項 Entry組件:Entry組件通常用於擷取使用者輸入的文本使用代碼為Entry組件添加文本,可以使用insert()方法。如果要替換當前文本,可以先使用delete()方法,再使用insert()方法實現: 擷取當前輸入框的文本可以使用get()方法Entry()(master=None,**options)master--父控制項**options--組件選項 方法:delete(first,last=None)--刪除參數first到last範圍內(包含first和last)的所有內容--如果忽略last參數,表示刪除first參數指定的選項--使用delete(0,END)實現刪除輸入框的所有內容get()--獲得當前輸入框的內容icursor(index)--將游標移動到index參數指定的位置--這同時也會設定INSERT的值index(index)--返回與index參數相應的選項的序號insert(index,text)--將text參數的內容插入到index參數指定的位置--使用insert(INSERT,text)將text參數指定的字串插入到游標的指定位置--使用insert(END,text)將text參數指定的字串插入到輸入框的末尾 Entry組件是支援驗證輸入內容的合法性的,比如要求輸入數字,你輸入字母就是非法。實現該功能需要通過設定validate、validateommand和invalidcommand選項。 invalidcommand選項指定的函數只有在validatecommand的傳回值為False的時候才被調用。 Listbox組件:Listbox(列表框)組件用於顯示一個挑選清單。當你建立一個Listbox組件時,他是空的,所以要先添加一行或多行文本進去。使用insert()方法添加文本,該方法有兩個參數:第一個參數是插入的索引號,第二個參數是插入的字串。索引號通常是項目的序號(0是列表中第一項的序號) Listbox組件根據Selectmode選項提供了四種不同的選擇模式:SINGLE(單選)、BROWSE(也是單選,但拖動滑鼠或通過方向鍵可以直接改變選項)、MULTIPLE(多選)和EXTENDED(也是多選,但需要同時按住Shift鍵或Ctrl鍵或拖拽滑鼠實現)。預設是BROWSE在某個組件上安裝垂直捲軸,需要:
- 設定該組件的yscrollbarcommand選項為Scrollbar組件的set()方法;
- 設定Scrollbar組件的command選項為該組件的yview()方法
List(master=None,**options)master--父控制項**options--組件選項 Scrollbar組件:Scrollbar(捲軸)組件用於滾動一些組件的可見範圍,根據方向可分為垂直捲軸和水平捲軸為了在某個組件上安裝垂直捲軸,你需要做兩件事:1. 設定該組件的 yscrollbarcommand 選項為 Scrollbar 組件的 set() 方法2. 設定 Scrollbar 組件的 command 選項為該組件的 yview() 方法。 當Listbox組件的可視範圍發生改變時,Listbox組件通過調用set()方法通知Srollbar組件。(當使用者操作捲軸時自動調用Listbox組件的yview()方法)Scrollbar (master=None,**options)master--父控制項**options--組件選項 Scale組件:Scale(刻度)組件看起來像一個帶資料的Scrollbar組件。Scale組件允許通過滑動滑塊來選擇一個範圍的數字建立一個指定範圍的Scale組件需要制定它的from和to兩個選項可以通過resolution選項控制分頻率(步長),通過tickinterval選項設定刻度 Scale(master=None,**options)master--父控制項**options--組件選項 Text()組件:Text()組件用於顯示和處理多行文本。因為適用於顯示純文字或格式化文本(不同字型,內嵌圖片,顯示連結,甚至帶CSS格式的HTML)常被用於作為簡單的文字編輯器和網頁瀏覽器 建立一個Text組件的時候,裡面沒有內容,用insert()方法以及INSERT或END索引號插入內容 在Text組件中插入對象,可以使用windows_create()和image_create()方法:windows_create(index,**options)--在index參數指定的位置嵌入一個window對象--支援兩種方式在Text組件中嵌入window對象:看下方create選項和window選項的描述--可選項create:設定一個回呼函數用於建立嵌入的window組件,該函數沒有參數,並且必須建立Text的子組件並返回--可選項window:指定一個已經建立好的window組件,該組件必須是Text組件的子組件image_create(index,cnf={},**kw)--在index參數指定的位置嵌入一個image對象--該image對象必須是Tkinter的PhotoImage或BitmapImage執行個體 刪除Text組件中的內容可以使用delete()方法text.delete(1.0,END)Text組件還支援“恢複”和“撤銷”操作,通過設定undo選項為True可以開啟Text組件的“撤銷功能”,然後用edit_undo()方法實現“撤銷”操作,用edit_redo()方法實現“恢複”操作預設情況下每一次完整的操作將會放入棧中(Tkinter中每次焦點切換、使用者按下Enter鍵、刪除/插入操作的轉換等之前的操作算是一次完整的操作) Indexs的用法:Indexs使用來指向Text組件中文本的位置,跟Python的序列索引一樣 "line.column"將索引位置的行號和列號以字串的形式表示出來(中間以"."分隔)"line.end"行號加上字串".end"的格式表示為該行最後一個字元的位置INSERT對應游標的位置CURRENT對應滑鼠座標最近的位置(知道鬆開滑鼠才響應)END對應Text組件的文本緩衝區的左後一個字元的下一個位置expressions用於修改任何格式的索引,用字串的形式實現修改所應的運算式 Marks用法Marks通常是嵌入到Text組件文本中不可見對象。 可以使用tag_config()方法設定Tags樣式如果對同一個範圍的文本加上多個Tags,並且設定相同的選項,那麼新建立愛你的Tag樣式會覆蓋比較舊的Tag也可以使用
tag_raise()和
tag_lower()方法來控制Tags間的優先順序 此外Tags還支援事件綁定,使用的是tag_bind()的方法Text(master=None,**options)master--父控制項**options--組件選項 方法:dump(index1,index2=None,command=None,**kw)--返回index1和index2之間的內容--返回的值是一個由3元祖(關鍵詞,值,索引)組成的列表,關鍵詞參數的順序為:all,image,mark,tag,text,window--預設關鍵詞是‘all‘,表示全部關鍵詞均為選中狀態--如果需要篩選個別關鍵詞,可以用dump(index1,index2,image=True,text=True)這樣的形式調用--如果指定了command函數,那麼會為列表中的每一個三元組作為參數調用一次該函數 Canvas組件:Canvas是一個通用的組件,通常用於顯示和編輯圖形。可以用來繪製線段、圓形、多邊形,甚至是繪製其他組件用法:在Canvas組件上繪製對象,可以用create_xxx()的方法(XXX表示物件類型,例如線段line,矩形rectangle,文本text等) 注意,添加到Canvas上的對象會一直保留著。如果想要更改可以使用coords(),itemconfig()和move()方法來移動畫布上的對象或者直接用delete()方法來刪除 還可以在Canvas上顯示文本,使用的是create_text()方法:使用create_oval()方法繪製橢圓形(或圓形),參數是制定一個限定矩形(Tkinter會自動在這個矩形內繪製一個橢圓)繪製多邊形,可以使用create_polygon()方法 Canvas組件支援對象
- arc(弧形、弦或扇形)
- bitmap(內建的位元影像檔案或XBM格式的檔案)
- image(BitmaoImage或PhotoImage的執行個體對象)
- line(線)
- oval(橢圓形)
- polygon(多邊形)
- rectangle(矩形)
其中弦、扇形、橢圓形、圓形和矩形這些封閉式圖形都是有輪廓線和填充顏色組成的,但都可以設定為透明畫布對象顯示的順序預設情況下建立的畫布對象會覆蓋舊的畫布對象的重疊部分指定畫布對象Canvas組件提供了集中方法讓你指定畫布對象
- Item handles
- Tags
- ALL
- CURRENT
Item handles事實上是一個用於指定某個畫布對象的整形數字Tags是負載畫布對象上的標籤。一個畫布對象與多個Tags相關聯(Canvas預定義了兩個Tags:ALL和CURRENT)ALL表示Canvas組件中的所有畫布對象CURRENT表示滑鼠下的畫布對象 方法:create_arc(bbox,**options)--根據bbox(x1,y1,x2,y2)建立一個扇形、弓形或弧形--新建立的畫布對象位於顯示列表的頂端--建立成功後返回該畫布對象的ID--下方表格列舉了各個options選項的具體含義 Menu組件:Menu組件用於實現頂級菜單、下拉式功能表和快顯功能表用法:建立一個頂級菜單、你需要先建立一個菜單一實例,然後使用add()方法將命令和其他子功能表添加進去:建立一個下拉式功能表方法也一樣,但不同的是最後需要添加到主菜單上(而不是視窗上) Menu(master,**options)master--父控制項**options--組件選項方法:add(type,**options)--type參數指定添加菜單類型,可以是:"command","cascade","checkbutton","radiobutton"或"separator"--還可以通過options選項設定菜單的屬性,下表列舉了options可以使用的選項和具體含義add_cascade(**options )--添加一個父菜單add_command(**options)--添加一個普通的命令功能表項目add_checkbutton(**options)--添加一個多選按鈕的功能表項目add_separator(**options)--添加一條分割線 MenuButton組件:MenuButton組件是一個與Menu組件相關聯的按鈕,它可以放在視窗中的任意位置,並且在被按下時彈出下拉式功能表用法:建立一個Menubutton組件,並建立一個Menu組件與之相關聯 OptionMenu(選擇菜單)事實上是下拉式功能表的改版獲得使用者選擇的內容,使用Tkinter變數的get()方法即可將多個選項加到選擇菜單中,現將選項寫入一個元祖中,然後將這個元祖傳進去星號作為形參的時候是起到"打包的作用",相反,作為實參的時候是起到"解包"的作用 通過在形參前加一個星號(*)或兩個星號(**)來指定函數可以接受任意數量的實參
- 當參數形如(*args)時,傳遞給參數的任意個實參會按位置打包成一個元祖(tuple)
- 當參數形如(**args)時,傳遞給函數的任意個key = value實參會被封裝進一個字典(dict)
星號(*)作為實參時,表示通過解包參數調用函數:有打包就打包,通過在實參前加一個星號(*)或兩個星號(**)來對列表(list)、元祖(tuple)或字典(dict)進行解包 事件綁定Event and Bindings:Tkinter提供一個強大的機制可以讓你自由地處理時間,對於每個組件可以通過bind()方法將函數或方法綁定到具體的事件上
widget.bind(event, handler)當被觸發的事件滿足該組件你綁定的事件時,Tkinter就會帶著時間對象(Event)去調用handler()方法 只有當組件獲得焦點的時候才能接受鍵盤時間(Key),用focus_set()獲得焦點<Motion>事件捕獲滑鼠在組件上的運動軌跡事件序列:Tkinter使用一種稱為事件序列的機制來允許使用者定義事件,使用者需要使用bind()方法將具體的時間序列與自訂的方法相綁定。時間序列是以字串的形式表示的,可以表示一個或多個相關聯的事件文法:<modifier-typr-detail>
- 事件序列是包含在角括弧(<...>)中
- type部分的內容是最重要的,它通常用於描述普通的事件類型,例如滑鼠點擊或鍵盤按鍵點擊
- modifier部分的內容是可選的,它通常用於描述按鍵組合,例如Ctrl+ c,Shift + 滑鼠左鍵點擊
- detail部分的內容是可選的,它通常用於描述具體的按鍵,例如Button-1表示滑鼠左鍵
type: ButtonRelease 比 Button 好用,怕使用者誤點滑鼠KeyPress 可簡寫為Keymodifier: Event對象當Tkinter去回調你定義的函數的時候,都會帶著Event對象(作為參數)去調用 Message組件Message組件是Label組件變體,用於顯示多汗簡訊。Message組件能夠自動換行,並調整文本的尺寸使其適應給定的尺寸 Spinbox組件:Spinbox組件是Entry組件的變體,用於從一些固定的值中選取一個和Entry組件的區別是使用Spinbox組件可以用過範圍或者元組指定允許使用者輸入的內容 PanedWindow組件PanedWindow組件是一個控制項管理組件。跟Frame組件累次,都是為組件提供一個架構當需要提供一個可供使用者調整的多空間架構的時候,可以使用PanedWindow組件。PanedWindow組件會為每一個子組件產生一個獨立地窗格,使用者可以自由調整窗格的大小 窗格設定分割線使用sashrelief TopLevel組件:Toplevel組件通常用在顯示額外的視窗、對話方塊和其他快顯視窗上 pack、grid和place均用於管理同在一個父組件下的所有組件的布局,其中:
- pack是按添加順序排列組件
- grid是按行/列形式排列組件
- place則允許程式員指定組件的大小和位置
對比grid管理器,pack更適用於少量組件的排列,但它在使用上更加簡單(.pack())。如果需要建立相對複雜的布局結構,那麼建議是使用多個架構結構構成,或者使用grid管理器實現
Python的標準GUI:Tkinter的組件