2020年9月12日星期六

65 《零基礎入門學習Python》筆記 第065講:GUI的終極選擇:Tkinter2

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


第一個例子

前面我們說過,Label 組件是用於在界面上輸出描述性的標籤,例如:提示用戶“你所下載的影片含有未成年人限制的內容,請滿18周歲後再點擊觀看!”。我們可以使用Label 的文本輸出功能來簡單的實現,但是呢,現在大家基本上都擁有了自動過濾掉不和諧字眼的能力了,所以我們有必要在旁邊加一個醒目的圖片,試圖起到一個警示和震懾的作用,如下圖所示:
我們一起動手來實現吧:
  1. import tkinter as tk
  2. root = tk.Tk()
  3. textLabel = tk.Label(root, text = "你所下载的影片含有未成年人限制的内容,请满18周岁后再点击观看!")
  4. textLabel.pack()
  5. photo = tk.PhotoImage(file = '18禁.gif')
  6. imgLabel = tk.Label(root, image = photo)
  7. imgLabel.pack()
  8. root.mainloop()

(注意:如果你出現這個錯誤:couldn't recognize data in image file,那一定是因為你的圖片格式為.jpg格式,請將圖片另存為.gif 格式。)

運行結果:
貌似實現了,但是不太一樣,我們要求的是:文字在左邊,圖片在右邊,我們可以這樣修改:
  1. ...
  2. textLabel.pack(side ="left" )
  3. ...
  4. imgLabel.pack(side = "right")
  5. ...
效果如下:(和要求的一模一樣)
那還有人要提意見了:“你這文字太長,能不能對文字進行換行?”
可以的,因為tkinter的字符串也是支持轉義字符\n,表示換行,因此,我們可以這樣修改:
textLabel = tk.Label(root, text = "你所下载的影片含有未成年人限制的内容,\n请满18周岁后再点击观看!")
實現效果如下:
又有人有問題了:“文字應該左對齊,然後跟邊框保留一定的間距,比較美觀吧!”
沒問題,這也是可以實現的。
左對齊  :只需要設置Label的justify選項就可以了,

justify 用法:

1.定義如何對齊多行文本
2.使用"left","right"或"center"
3.注意,文本的位置取決於anchor選項
4.默認值是"center"
所以,我們這樣修改就可以了:
  1. textLabel = tk.Label(root, text = "你所下载的影片含有未成年人限制的内容,\n请满18周岁后再点击观看!",
  2. justify = "left",
  3. padx = 10)
運行結果如圖:

第二個例子

有些時候,你可能不想要圖片和文字分開,例如你想把圖片作為背景,文字顯示在圖片上面,那麼Label 組件可以做到嗎?
No problem!你只需要簡單的設置 compound 選項就可以了。

compound 用法:

1.控制Label中文本和圖像的混合模式
2.默認情況下,如果有指定位圖或圖片,則不顯示文本
3.如果該選項設置為"center",文本顯示在圖像上(文本重疊圖像)
4.如果該選項設置為"bottom","left","right"或"top",那麼圖像顯示在文本的旁邊(如"bottom",則圖像在文本的下方)
5.默認值是NONE
  1. import tkinter as tk
  2. root = tk.Tk()
  3. photo = tk.PhotoImage(file = 'bg.gif')
  4. theLabel = tk.Label(root,
  5. text = """一剪梅·红藕香残玉簟秋\n李清照 宋 \n
  6. 红藕香残玉簟秋。轻解罗裳,独上兰舟。\n云中谁寄锦书来,雁字回时,月满西楼。
  7. 花自飘零水自流。一种相思,两处闲愁。\n此情无计可消除,才下眉头,却上心头。\n""",
  8. justify = "center",
  9. image = photo,
  10. compound = "center",
  11. font = ("华文行楷", 25),
  12. fg = "black",
  13. )
  14. theLabel.pack(side = "right")
  15. root.mainloop()
運行結果如下:
接下來,我們來講講Botton 組件,Botton 就是按鈕,Botton 的絕大多數選項都和Label 是一樣的,不過,Bottom 有一個功能,就是可以接收用戶的信息,簡而言之,Botton 組件就是用於讓用戶自己說:“幹”,然後通過按鈕上的文字讓用戶清楚按下此按鈕是乾什麼用的,相信大家還記得,Botton 組件有一個叫做command 的選項,用於指定一個函數或者方法,它的作用就是當用戶點下這個按鈕的時候,tkinter 就會自動調用這個指定的函數或是方法,好了,接下來,我們來修改第一個例子,添加依噶按鈕,然後在按鈕被按下時,Label 文本發生改變。
OK,想要讓文本發生改變,只需要設置一個名為 textvariable 的選項就可以了:

 textvariable 用法

1. Label顯示Tkinter變量(通常是一個StringVar變量)的內容
2.如果變量被修改,Label的文本會自動更新
我還是在例子中給大家講解:
  1. import tkinter as tk
  2. def callback():
  3. var.set("吹吧你,我才不信呢!")
  4. root = tk.Tk()
  5. frame1 = tk.Frame(root)
  6. frame2 = tk.Frame(root)
  7. var = tk.StringVar()
  8. var.set("你所下载的影片含有未成年人限制的内容,\n请满18周岁后再点击观看!")
  9. textLabel = tk.Label(frame1, textvariable = var, justify = "left")
  10. textLabel.pack(side = "left")
  11. photo = tk.PhotoImage(file = '18禁.gif')
  12. imgLabel = tk.Label(frame1, image = photo)
  13. imgLabel.pack(side = "right")
  14. theButton = tk.Button(frame2, text = "我已满18周岁", command = callback)
  15. theButton.pack()
  16. frame1.pack(padx = 10, pady = 10)
  17. frame2.pack(padx = 10, pady = 10)
  18. root.mainloop()
運行結果如下:
點擊按鈕:

上面就是我們這節課的內容。相信大家現在已經有一個大問題了,這麼多選項,你演示這麼多,我怎麼全部記得住啊,沒關係,不要怕,我這裡已經給大家準備好了,
我這裡已經把所有選項的用法以及功能都給大家列舉出來了,還舉了例子,大家隨時查閱即可。


0 留言:

發佈留言