【tkinter系列 第十二課 Frame和Scrollbar窗口部件 】

  • 2020 年 3 月 11 日
  • 筆記

前言

python中通常我們寫程序,顯示結果和操作都是在終端區,如果要想實現一個有顯示界面的程序那該怎樣實現呢?python中有好幾個庫都可以實現,這個系列我們一起來學習如何使用python自帶的tkinter庫來實現。

終於來到基本控件的最後一課了,本節課將要學習Frame和Scrollbar窗口部件,Frame是框架的意思,框架是屏幕上的矩形區域。框架小部件主要用作其他小部件的幾何主控件,或用於在其他小部件之間提供填充。框架小部件用於將其他小部件分組到複雜的布局中。它們還用於填充,並在實現複合小部件時作為基類使用。

Scrollbar是滾動條的意思,那什麼時候該用Scrollbar部件呢?Scrollbar 小部件幾乎總是與Listbox、 Canvas 或 Text 小部件結合使用。水平滾動條也可以與 Entry 小部件一起使用。當內容過多時,可以通過滾動條拖動顯示。

目標

接下來我們使用frame來實現下面一個類似微信聊天的界面,左側是顯示好友的,有滾動條;右側上面是聊天內容區,中間是消息編寫區,最下面是按鈕區;這裡只是實現區域劃分,並沒有實現實際功能。

分析:左右比例3:7 左側 30×30;右側70×30 右側劃分 6:3:1 頂部:70×18;中間:70×9;底部:70×3

實現界面布局

代碼:

from tkinter import *import tkinter.messageboximport tkinter.filedialog  root = Tk()# 分成左右兩個框架frame_l = Frame(root, )frame_l.pack(side=LEFT)frame_r = Frame(root,)frame_r.pack(side=RIGHT)  # 給左邊框架添加一個Listbox控件l=Listbox(frame_l,width=30,height=30)l.pack()  # 給右邊框架分成上中下三部分frame_r_t = Frame(frame_r)frame_r_t.pack()frame_r_m = Frame(frame_r)frame_r_m.pack()frame_r_b = Frame(frame_r)frame_r_b.pack()  # 給上面部分添加Listboxl = Listbox(frame_r_t, width=70, height=18)l.pack()  # 給中間部分添加Listboxl = Listbox(frame_r_m, width=70, height=9)l.pack()  # 給下面部分添加按鈕b = Button(frame_r_b, text="發送", width=10,height=2)b.pack()  mainloop()

效果:

添加滾動條

使用Scrollbar滾動條要將垂直滾動條連接到Listbox這樣的小部件,需要做兩件事: 1.將小部件的 yscrollcommand 回調設置為 scrollbar 的 Set 方法。

l = Listbox(frame_l, width=30, height=30, yscrollcommand=scrollbar.set)

2.將 scrollbar 的命令設置為小部件的 yview 方法。

scrollbar.config(command=l.yview)

代碼:

from tkinter import *import tkinter.messageboximport tkinter.filedialog  root = Tk()# 分成左右兩個框架frame_l = Frame(root, )frame_l.pack(side=LEFT)frame_r = Frame(root,)frame_r.pack(side=RIGHT)  # 給左邊框架添加滾動條scrollbar = Scrollbar(frame_l)scrollbar.pack(side=RIGHT, fill=Y)# 給左邊框架添加一個Listbox控件l = Listbox(frame_l, width=30, height=30, yscrollcommand=scrollbar.set)l.pack()for i in range(50):    l.insert(END,i)scrollbar.config(command=l.yview)  # 給右邊框架分成上中下三部分frame_r_t = Frame(frame_r)frame_r_t.pack()frame_r_m = Frame(frame_r)frame_r_m.pack()frame_r_b = Frame(frame_r)frame_r_b.pack()  # 給右邊框架上部添加滾動條scrollbar = Scrollbar(frame_r_t)scrollbar.pack(side=RIGHT, fill=Y)# 給上面部分添加Listboxl = Listbox(frame_r_t, width=70, height=18, yscrollcommand=scrollbar.set)l.pack()for i in range(50):    l.insert(END, i)scrollbar.config(command=l.yview)  # 給中間部分添加Listboxl = Listbox(frame_r_m, width=70, height=9)l.pack()  # 給下面部分添加按鈕b = Button(frame_r_b, text="發送", width=10,height=2)b.pack()  mainloop()

效果: