python(Tkinter)
Tkinter
RGB顏色對照表
(https://www.114la.com/other/rgb.htm)
(http://effbot.org/tkinterbook/tkinter-index.htm)
1.簡介:
• tkinter是python自帶的GUI庫,是對圖形庫TK的封裝
• tkinter是一個跨平臺的GUI庫,開發的程式可以在win,linux或者mac下執行
mainloop含義解析:
很簡單。你把滑鼠一個按上會變成手型。或者你在知乎回答問題的文字框裡輸入文字。甚至你看到的電腦螢幕內容。看上去是動態的。其實和動畫電影原理差不多。
現在你滑鼠的移動,鍵盤的按鍵。都是實實在在輸入。這裡我們叫做事件。譬如有滑鼠移動事件,單擊事件,F5按下的事件。
以回答問題 按鈕<釋出回答>左側的匿名勾選框為例。你單擊一次,就綠色小勾表示選中。再單擊就去掉了小勾。現在你這樣想。實際上有兩幅圖(有勾和無勾的)。你單擊滑鼠移動滑鼠就觸發了事件,會把你滑鼠的座標和單擊這個行為捕獲。那假設你單擊了,滑鼠座標又在那個框框區域內,我們就把一張圖用另外一張圖代替,同時後臺表示是否匿名的某個變數取反。
root到root.pack()之間,無非就是設計你的部件的型別,尺寸,樣式,位置,然後繫結一個事件。
mainloop就進入到事件(訊息)迴圈。一旦檢測到事件,就重新整理元件。譬如你輸入一個字元,就要立即在游標那個位置顯示出來(前提是你選中了文字框,也就是滑鼠在文字框這個圖案的範圍內單擊過)。又譬如你點了首頁這個按鈕(就是在這個圖形的區域附近單擊)那麼就要清除你瀏覽器裡的全部部件,然後重新繪製(按照主頁設計的佈局和內容)。
再給你打個比方。你設計的程式中間有個按鈕,你設計的時候就要把一個按鈕放到中間去。這個按鈕有一個屬性(假設和變數x關聯,x表示按鈕上文字的顏色,如果是1就黑色,0就灰色)。你按一下按鈕,文字顏色就會切換。root到root.pack()你就相當於在那裡放按鈕(其實按鈕就是多幅圖,某一時刻顯示其中一張),具體顏色看x取值。現在到了mainloop。一旦有事件,就又在那裡放按鈕(不妨直接覆蓋原來的圖)。所以在那個位置單擊滑鼠才是觸發某個你想要的程式行為的要素,那個按鈕的重新整理,不過是其中一項程式行為。有沒有按鈕你都可以點選那個區域觸發。但是除了設計者,誰知道呢?無法是視覺效果罷了。
PS:如果你知道連環畫,你可以理解為,每個部件都是連環畫。root到root.pack()就是你設計連環畫。mainloop就是去翻它!實際上不是有很多程式有一個選項就是 動畫效果麼,關閉可以減少資源消耗。無非就是連環畫的頁數多。快速翻閱就有動感。如果只有兩頁,看上去很唐突而已。
pps:前面也說了,你看到電腦螢幕也是如此,是不停在重新整理的。一般是50-60hz每秒。遊戲裡不有一個fps麼,楨率 就是畫面的重新整理頻率,太慢不就會卡頓麼(和網路卡不是一回事)。然後螢幕還有區域性重新整理的技術,不一定每次都重新整理整塊螢幕。設計的程式也是。你可以所有元件每次事件都重新畫。也可以只是畫你需要的部分。
Pack()(優點問題,如何在介面上顯示)
定義:
所有的Tkinter元件都包含專用的幾何管理方法,這些方法是用來組織和管理整個父配件區中子配件的佈局的。Tkinter提供了截然不同的三種幾何管理類:pack、grid和place。
pack幾何管理採用塊的方式組織配件,在快速生成介面設計中廣泛採用,若干元件簡單的佈局,採用pack的程式碼量最少。pack幾何管理程式根據元件建立生成的順序將元件新增到父元件中去。通過設定相同的錨點(anchor)可以將一組配件緊挨一個地方放置,如果不指定任何選項,預設在父窗體中自頂向下新增元件。
1、我們使用 pack 函式的時候,預設先使用的放到上面,然 後 依次向下排,它會給我們的元件一個自認為合適的位置 和大小,這是預設方式。
2、可接受的引數:
side:按扭停靠在視窗的哪個位置
left: 左
top: 上
right: 右
botton: 下
fill:填充
x:水平方向填充
y:豎直方向填充
both:水平和豎直方向填充
none:不填充
註解:每個button周圍都有邊框,是否填充
expand:
yes:擴充套件整個空白區
no:不擴充套件
註解:當對彈出框進行拉伸或者縮小的時候,所佈局的button是否也進行縮放
anchor:
N:北 下
E:東 右
S:南 下
W:西 左
CENTER:中間
padx:x方向的外邊距
pady:y方向的外邊距
ipadx:x方向的內邊距
ipady:y方向的內邊距
補充相關函式:
slaves() 以列表方式返回本元件的所有子元件物件。 propagate(boolean) 設定為True表示父元件的幾何大小由子元件決定(預設值),反之則無關。 info() 返回pack提供的選項所對應得值。 forget() Unpack元件,將元件隱藏並且忽略原有設定,物件依舊存在,可以用pack(option, …),將其顯示。 location(x, y) x, y為以畫素為單位的點,函式返回此點是否在單元格中,在哪個單元格中。返回單元格行列座標,(-1, -1)表示不在其中。 size() 返回元件所包含的單元格,揭示元件大小。
grid佈局
(
簡介:grid幾何管理採用類似表格的結構組織配件,使用起來非常靈活,用其設計對話方塊和帶有滾動條的窗體效果最好。grid採 用行列確定位置,行列交匯處為一個單元格。每一列中,列寬由這一列中最寬的單元格確定。每一行中,行高由這一行中最高的單元格決定。元件並不是充滿整個單 元格的,你可以指定單元格中剩餘空間的使用。你可以空出這些空間,也可以在水平或豎直或兩個方向上填滿這些空間。你可以連線若干個單元格為一個更大空間, 這一操作被稱作跨越。建立的單元格必須相臨。
公式:元件物件.grid(option, …)
屬性設定:
column 元件所置單元格的列號。 自然數(起始預設值為0,而後累加) columnspan 從元件所置單元格算起在列方向上的跨度。 自然數(起始預設值為0) ipadx, ipady 元件內部在x(y)方向上填充的空間大小,預設單位為畫素,可選單位為c(釐米)、m(毫米)、i(英寸)、p(印表機的點,即1/27英寸),用法為在值後加以上一個字尾既可。 非負浮點數(預設值為0.0) 注意:使用時候不會改變視窗的大小,只改變元件的大小
padx, pady 元件外部在x(y)方向上填充的空間大小,預設單位為畫素,可選單位為c(釐米)、m(毫米)、i(英寸)、p(印表機的點,即1/27英寸),用法為在值後加以上一個字尾既可。 非負浮點數(預設值為0.0)
注意:使用時候會改變視窗的大小,元件的大小不會改變
row 元件所置單元格的行號。 自然數(起始預設值為0,而後累加) rowspan 從元件所置單元格算起在行方向上的跨度。 自然數(起始預設值為0) in_ 將本元件作為所選組建物件的子元件,類似於指定本元件的master為選定元件。 已經pack後的元件物件 sticky 元件緊靠所在單元格的某一邊角。 “n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”(預設為” center”) 函式
slaves() 以列表方式返回本元件的所有子元件物件。 propagate(boolean) 設定為True表示父元件的幾何大小由子元件決定(預設值),反之則無關。 info() 返回pack提供的選項所對應得值。 forget() Unpack元件,將元件隱藏並且忽略原有設定,物件依舊存在,可以用pack(option, …),將其顯示。 grid_remove() 從網格管理器中刪除此小部件。小部件不會被銷燬,並且可以由網格或任何其他管理器重新顯示。
place()佈局
通用公式為:
元件物件.place(option, …)
屬性
anchor 相對於擺放元件的座標的位置 請參閱:可能是N,E,S,W,東北,西北,東南或西南,羅盤方向指示的widget的角落,雙方預設是淨重(部件上左上角) height 以畫素為單位的高度.(絕對佈局專用) 畫素 width 以畫素為單位的寬度.(絕對佈局專用) 畫素 relheight 元件相對於視窗的的高度 (相對佈局專用) 0~1 relwidth 元件相對於視窗的的寬度 (相對佈局專用) 0~1 relx 水平偏移為0.0和1.0之間浮動,父widget的一小部分的高度和寬度.(相對佈局專用) 0~1 rely 垂直偏移為0.0和1.0之間浮動,父widget的一小部分的高度和寬度.(相對佈局專用) 0~1 x 元件距離左上角的x座標(絕對佈局專用) 畫素 y 元件距離左上角的y座標(絕對佈局專用) 畫素 place類提供了下列函式(使用元件例項物件呼叫) 函式名 place_slaves() 以列表方式返回本元件的所有子元件物件。 place_configure(option=value) 給pack佈局管理器設定屬性,使用屬性(option)= 取值(value)方式設定 propagate(boolean) 設定為True表示父元件的幾何大小由子元件決定(預設值),反之則無關。 place_info() 返回pack提供的選項所對應得值。 grid_forget() Unpack元件,將元件隱藏並且忽略原有設定,物件依舊存在,可以用pack(option, …),將其顯示。 location(x, y) x, y為以畫素為單位的點,函式返回此點是否在單元格中,在哪個單元格中。返回單元格行列座標,(-1, -1)表示不在其中 size() 返回元件所包含的單元格,揭示元件大小。
補充:geometry表示輸入的文字變為星號,在Entry不可見內容,若為None則表示為輸入文字以原形式可見(一般用於Tk創建出來的物件進行設定)