iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Python

python零之旅系列 第 22

DAY22. Python GUI - Entry延伸(Text、Listbox)

  • 分享至 

  • xImage
  •  

今日我們要學習的是之前學到的Entry輸入框延伸內容:
多行輸入框及列表選擇框。
那就趕快開始吧!


1. Text

Text在tkinter內也是輸入框的一種,
而與Entry不同的是。
Entry為單行輸入框
而Text則為多行輸入框
https://ithelp.ithome.com.tw/upload/images/20241005/201691951BGgjh2Hjq.png

我們執行後可以看見,
輸入框內可以輸入多行文字。
https://ithelp.ithome.com.tw/upload/images/20241005/201691959Oa0806Ma9.png

我們可以運用Text在應用中,
接下來,
我們使用多行輸入框,
並新增按鈕,使用者按下按鈕後,可以將其輸入內容新增至視窗中,
按下清除按鈕則全部清除。

在這裡,
我們使用到了StringVar
他可以設定一個字串變數
我們設定其預設值為空白。

接著我們寫一個submit方法,
我們將字串變數的內容設定為抓取Text中的內容。
其中,1.0的表示為,
1代表第一行,
0代表第一個字元的位置(從每一行的開頭位置開始計算)。

而end-1c則表示取得倒數第二個字元 (因為最後一個字元是換行符,需去掉)。

我們再寫一個clear方法,
當這個方法被運行時,
我們的字串變數需要清空,
Text則用delete方法將輸入框裡的內容全數清空。
(因換行符也需清空,所以使用end)

最後將兩項方法設定到呼應到按鈕即可。
https://ithelp.ithome.com.tw/upload/images/20241005/20169195rPDgf1cbZ4.png

執行後,
當我們輸入多行文字並按下Submit按鈕時,
我們輸入的內容就會被貼在視窗中。
https://ithelp.ithome.com.tw/upload/images/20241005/20169195Fr4cdxcxhG.png

按下Clear按鈕後,所有內容就會被清除。
https://ithelp.ithome.com.tw/upload/images/20241005/20169195rfpClm2f1U.png

2. Listbox

Listbox的中文為列表選擇框
它可以在一個框內設立多項列表,
當我們要設立選項時,
需要用到 insert() 方法,將選項插入Listbox中。
https://ithelp.ithome.com.tw/upload/images/20241005/201691952WKViKROin.png

下圖為運行結果。
https://ithelp.ithome.com.tw/upload/images/20241005/201691956zoeNtCApA.png

如果遇到選項太多,
想要簡化程式碼時,
我們也可以創建list列表
使用for迴圈將其輸出,
或是使用StringVar,
這裡我們就以list的方式。
https://ithelp.ithome.com.tw/upload/images/20241005/20169195ukQx9nnUcX.png

當遇到選項太多而超過Listbox大小時,
我們可以設定滾動條在其中。
而撰寫這項應用時,
我們首先要了解FrameScrollbar

(1)Frame
Frame是可以用來放置其他元件的「框架」,
我們可以將它視為設立一個小視窗,且可以設立多個,
它可以讓我們彈性的配置各種元件。
這裡我們就設置一個Frame以便後續使用。
https://ithelp.ithome.com.tw/upload/images/20241005/20169195H0KjMW2NvT.png

(2)Scrollbar
Scrollbar是滾動條/捲軸,
它可以與其他元件搭配。
當某個元件的內容高度過長要捲動時,
我們就可以使用Scrollbar,讓使用者進行捲動瀏覽。

這裡我們設置一個Scrollbar,把它放在Frame裡面
並且我們設置這個捲動條的初始位置在Frame的右側,
使用fill將捲動條在Frame中垂直填滿。
https://ithelp.ithome.com.tw/upload/images/20241005/20169195vKWKuqgIVA.png

補充 : fill可填入之參數
NONE:保留自然大小。
X:沿X軸方向擴展填滿,但高度保持不變。(水平填滿)
Y:沿Y軸方向擴展填滿,但寬度保持不變。(垂直填滿)
BOTH:同時在水平和垂直方向上填滿。(沿 X 軸和 Y 軸都擴展)

最後是設定Listbox的部分,
我們要將Listbox設定在Frame內,
並設立Listbox的位置及填充方式。

然後我們使用yscrollcommand,將Listbox加入垂直捲軸,
記得使用set將我們剛才建立的滾動條設定進去。

接著,我們使用yview方法,
控制Listbox中的內容根據滾動條的位置進行垂直滾動。
如此一來,
我們就將滾動條與Listbox列表框聯繫起來,
當我們拖動滾動條時,列表框的內容也會垂直滾動。
https://ithelp.ithome.com.tw/upload/images/20241005/20169195N8KF3RPRIr.png

我們運行程式碼,
就能看見右方出現了滾動條,
我們下拉時,
Listbox中的選項也會向下移動。
https://ithelp.ithome.com.tw/upload/images/20241005/201691956Bf4eeldxy.png
https://ithelp.ithome.com.tw/upload/images/20241005/20169195oH6HWe4SyL.png


以上是今日的學習,
今天學習了很多新知識,
在加入滾動條的時候,很多程式碼都是沒有見過的,
但最後透過網路,我學會了那些程式碼,並成功運用出來了!

參考資料:
https://steam.oxxostudio.tw/category/python/tkinter/listbox.html


上一篇
DAY21. Python GUI - 滑桿Scale
下一篇
DAY23. Python GUI - 選單及下拉選單
系列文
python零之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言