2020年9月12日星期六

75 《零基礎入門學習Python》筆記 第075講:GUI的終極選擇:Tkinter12

《零基礎入門學習Python》第075講:GUI的終極選擇:Tkinter12


Tkinter 的基本組件我們已經介紹得七七八八了,剩下的一些我們在這節課全部都會講解完畢。

(一)Message組件

Message(消息)組件是  Label組件的變體,用於顯示多行文本消息。眾所周知,我們的Label組件只能顯示單行消息。Message組件能夠自動換行,並調整文本的尺寸使其適應給定的尺寸。
我們來舉個例子,大家就明白了:
  1. import tkinter as tk
  2. root = tk.Tk()
  3. w1 = tk.Message(root, text = "这是一则短消息", width = 100)
  4. w1.pack()
  5. w2 = tk.Message(root, text = "这是一则骇人听闻的长长长长长长长长长长长消息", width = 100)
  6. w2.pack()
  7. root.mainloop()

(二)Spinbox組件

Spinbox組件(Tk8.4新增)是  Entry組件的變體,用於從一些固定的值中選取一個。眾所周知,我們的Entry組件是能夠讓用戶隨心所欲輸入數據的組件,Spinbox組件就進一步限制用戶輸入的數據。
我們還是舉個例子:
  1. import tkinter as tk
  2. root = tk.Tk()
  3. w= tk.Spinbox(root, from_ = 0, to = 10)
  4. w.pack()
  5. root.mainloop()
我們可以通過上下點,輸入0 -10,另外,我們還是可以任意輸入數據,我們可以通過改變increment 選項的值,來改變步進。
你還可以通過元組指定允許輸入的值:
  1. import tkinter as tk
  2. root = tk.Tk()
  3. w= tk.Spinbox(root, values = ("python", "C", "java", "C#"))
  4. w.pack()
  5. root.mainloop()

(三)PanedWindow組件

PanedWindow組件(Tk8.4新增)是一個空間管理組件。跟  Frame組件類似,都是為組件提供一個框架,不過PanedWindow允許讓用戶調整應用程序的空間劃分。
不明白的話,可以先看下面的兩個例子,就會豁然開朗了。
我們的窗格有簡單的,例如兩個窗格:上和下,左和右。
  1. import tkinter as tk
  2. m = tk.PanedWindow(orient="vertical")
  3. m.pack(fill="both", expand=1)
  4. top = tk.Label(m, text="top pane")
  5. m.add(top)
  6. bottom = tk.Label(m, text="bottom pane")
  7. m.add(bottom)
  8. tk.mainloop()
創建一個3 窗格的PanedWindow 組件則需要一點小技巧:
  1. import tkinter as tk
  2. #先创建左右的窗格
  3. m1 = tk.PanedWindow() #默认是左右分布的
  4. m1.pack(fill="both", expand=1)
  5. left = tk.Label(m1, text = "left pane")
  6. m1.add(left)
  7. m2 = tk.PanedWindow(orient = "vertical")
  8. m1.add(m2)
  9. top = tk.Label(m2, text = "top pane")
  10. m2.add(top)
  11. bottom = tk.Label(m2, text = "bottom pane")
  12. m2.add(bottom)
  13. tk.mainloop()
這裡不同窗格事實上是有一條“分割線”(sash)隔開,雖然你看不到,但你卻可以感受到它的存在。不信?不妨把鼠標緩慢移動到大概的位置,當鼠標指針改變的時候後拖拽鼠標......
但我們也可以把“分割線”給顯式地顯示出來,並且可以為它附上一個“手柄”(handle):
  1. import tkinter as tk
  2. #先创建左右的窗格
  3. m1 = tk.PanedWindow(showhandle = True, sashrelief = "sunken") #默认是左右分布的
  4. m1.pack(fill="both", expand=1)
  5. left = tk.Label(m1, text = "left pane")
  6. m1.add(left)
  7. m2 = tk.PanedWindow(orient = "vertical", showhandle = True, sashrelief = "sunken")
  8. m1.add(m2)
  9. top = tk.Label(m2, text = "top pane")
  10. m2.add(top)
  11. bottom = tk.Label(m2, text = "bottom pane")
  12. m2.add(bottom)
  13. tk.mainloop()
圖中的小方塊就是handle, 默認離邊界為8 個像素,可以通過handlepad 選項來設置它的位置。

(四)Toplevel 組件

Toplevel組件和root組件是一個級別的,Toplevel(頂級窗口)組件類似於  Frame組件,但Toplevel組件是一個獨立的頂級窗口,這種窗口通常擁有標題欄、邊框等部件。
Toplevel 組件通常用在顯示額外的窗口、對話框和其他彈出窗口上。
  1. import tkinter as tk
  2. root = tk.Tk()
  3. def create():
  4. top = tk.Toplevel()
  5. top.title("Python tkinter")
  6. msg = tk.Message(top, text = "I love Python!")
  7. msg.pack()
  8. tk.Button(root, text = "创建顶级窗口", command = create).pack()
  9. root.mainloop()
想要幾個就點幾下。
得到的頂級窗口都是相互獨立的,但是都是來自於root 窗口,當root 窗口關閉後,所有的頂級窗口都被關閉。


0 留言:

發佈留言