Tkinter 的基本組件我們已經介紹得七七八八了,剩下的一些我們在這節課全部都會講解完畢。
(一)Message組件
Message(消息)組件是 Label組件的變體,用於顯示多行文本消息。眾所周知,我們的Label組件只能顯示單行消息。Message組件能夠自動換行,並調整文本的尺寸使其適應給定的尺寸。
我們來舉個例子,大家就明白了:
-
-
-
-
-
w1 = tk.Message(root, text = "这是一则短消息", width = 100)
-
-
w2 = tk.Message(root, text = "这是一则骇人听闻的长长长长长长长长长长长消息", width = 100)
-
-
-
(二)Spinbox組件
Spinbox組件(Tk8.4新增)是 Entry組件的變體,用於從一些固定的值中選取一個。眾所周知,我們的Entry組件是能夠讓用戶隨心所欲輸入數據的組件,Spinbox組件就進一步限制用戶輸入的數據。
我們還是舉個例子:
-
-
-
-
-
w= tk.Spinbox(root, from_ = 0, to = 10)
-
-
-
我們可以通過上下點,輸入0 -10,另外,我們還是可以任意輸入數據,我們可以通過改變increment 選項的值,來改變步進。
你還可以通過元組指定允許輸入的值:
-
-
-
-
-
w= tk.Spinbox(root, values = ("python", "C", "java", "C#"))
-
-
-
(三)PanedWindow組件
PanedWindow組件(Tk8.4新增)是一個空間管理組件。跟 Frame組件類似,都是為組件提供一個框架,不過PanedWindow允許讓用戶調整應用程序的空間劃分。
不明白的話,可以先看下面的兩個例子,就會豁然開朗了。
我們的窗格有簡單的,例如兩個窗格:上和下,左和右。
-
-
-
m = tk.PanedWindow(orient="vertical")
-
m.pack(fill="both", expand=1)
-
-
top = tk.Label(m, text="top pane")
-
-
-
bottom = tk.Label(m, text="bottom pane")
-
-
-
創建一個3 窗格的PanedWindow 組件則需要一點小技巧:
-
-
-
-
-
m1.pack(fill="both", expand=1)
-
-
left = tk.Label(m1, text = "left pane")
-
-
-
m2 = tk.PanedWindow(orient = "vertical")
-
-
-
top = tk.Label(m2, text = "top pane")
-
-
bottom = tk.Label(m2, text = "bottom pane")
-
-
-
這裡不同窗格事實上是有一條“分割線”(sash)隔開,雖然你看不到,但你卻可以感受到它的存在。不信?不妨把鼠標緩慢移動到大概的位置,當鼠標指針改變的時候後拖拽鼠標......
但我們也可以把“分割線”給顯式地顯示出來,並且可以為它附上一個“手柄”(handle):
-
-
-
-
m1 = tk.PanedWindow(showhandle = True, sashrelief = "sunken")
-
m1.pack(fill="both", expand=1)
-
-
left = tk.Label(m1, text = "left pane")
-
-
-
m2 = tk.PanedWindow(orient = "vertical", showhandle = True, sashrelief = "sunken")
-
-
-
top = tk.Label(m2, text = "top pane")
-
-
bottom = tk.Label(m2, text = "bottom pane")
-
-
-
圖中的小方塊就是handle, 默認離邊界為8 個像素,可以通過handlepad 選項來設置它的位置。
(四)Toplevel 組件
Toplevel組件和root組件是一個級別的,Toplevel(頂級窗口)組件類似於 Frame組件,但Toplevel組件是一個獨立的頂級窗口,這種窗口通常擁有標題欄、邊框等部件。
Toplevel 組件通常用在顯示額外的窗口、對話框和其他彈出窗口上。
-
-
-
-
-
-
-
top.title("Python tkinter")
-
-
msg = tk.Message(top, text = "I love Python!")
-
-
-
tk.Button(root, text = "创建顶级窗口", command = create).pack()
-
-
想要幾個就點幾下。
得到的頂級窗口都是相互獨立的,但是都是來自於root 窗口,當root 窗口關閉後,所有的頂級窗口都被關閉。
0 留言:
發佈留言