Python之tkinter列表框Listbox與滾動條Scrollbar解讀
列表框Listbox簡介
列表框(Listbox)是一個顯示一系列選項的Widget控件,用戶可以進(jìn)行單項或多項的選擇
使用格式如下:
Listbox(父對象, options, ...)
參數(shù):
- 第一個參數(shù):父對象,表示這個列表框?qū)⒔⒃谀囊粋€窗口內(nèi)
- 第二個參數(shù):
options,參數(shù)如下
| 參數(shù) | 含義 |
|---|---|
| borderwidth | 邊界寬度默認(rèn)是兩個像素 |
| bd | 邊界寬度默認(rèn)是兩個像素 |
| background | 背景色彩 |
| bg | 背景色彩 |
| cursor | 當(dāng)鼠標(biāo)光標(biāo)移至列表框上時的形狀 |
| foreground | 前景色彩 |
| fg | 前景色彩 |
| font | 字形 |
| height | 高,單位是字符,默認(rèn)是10 |
| highlightcolor | 當(dāng)列表框取得焦點時的顏色 |
| highlightthinckness | 當(dāng)列表框取得焦點時的厚度 |
| listvariable | 以變量方式處理選項內(nèi)容 |
| relief | 可由此控制列表框外框默認(rèn)是SUNKEN |
| selectbackground | 被選取字符串的背景色彩 |
| selectmode | 可以決定有多少個選項可以被選,以及鼠標(biāo)拖拽如何影響選項 |
| width | 寬,單位是字符寬 |
| xscrollcommand | 在X軸使用滾動條 |
| yscrollcommand | 在Y軸使用滾動條 |
selectmode的參數(shù)
| 參數(shù) | 含義 |
|---|---|
| BROWSE | 這是默認(rèn)值,我們可以選擇一個選項,如果選取一個選項同時拖拽鼠標(biāo),將造成選項最后的位置是被選取的項目位置 |
| SINGLE | 只能選擇一個選項,可以用單擊方式選取,不可用拖拽方式更改所選的項目 |
| MULTIPLE | 可以選擇多個選項,單擊項目可以切換是否選擇該項目 |
| EXTENDED | 單擊第一個項目然后拖拽到最后一個項目,即可選擇這個區(qū)間的一系列選項。單擊可以選擇第一個項目,此時若是按住Shift鍵并單擊另一個項目,可以選取區(qū)間項目 |
Listbox 的初步應(yīng)用
例子:
import tkinter
root = tkinter.Tk()
root.geometry("300x180")
# 建立listbox1
listbox1 = tkinter.Listbox(root)
listbox1.pack(side=tkinter.LEFT, padx=5, pady=5)
# 建立listbox2
listbox2 = tkinter.Listbox(root, height=5, relief='raised')
listbox2.pack(anchor=tkinter.N, side=tkinter.LEFT, padx=5, pady=5)
root.mainloop()運行結(jié)果:

建立列表框項目 insert()
可以使用insert()方法為列表框建立項目,這個方法的使用格式如下
insert(index, elements)
參數(shù):
- 第一個參數(shù):
父index,是項目插入的位置,如果是插在最后面可以使用END - 第二個參數(shù):
elements,插入的字符串
例子:
import tkinter root = tkinter.Tk() # 建立listbox1 listbox1 = tkinter.Listbox(root) listbox1.pack(padx=5, pady=5) # 插入的位置與信息 listbox1.insert(tkinter.END, 'abc') listbox1.insert(tkinter.END, '123') listbox1.insert(tkinter.END, '!$#') root.mainloop()
運行結(jié)果:

其實也可以這樣
listbox1.insert(tkinter.END, 'abc', '123', '!$#')
運行結(jié)果也是一樣的
如果有很多的項目需要插入,我們可以使用循環(huán)的方式來進(jìn)行
例子:
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
root.mainloop()運行結(jié)果:

例子:
重新設(shè)計程序,使列表框可以多選
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.MULTIPLE)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
root.mainloop()運行結(jié)果:

例子:
重新設(shè)計,單擊一個項目,按住Shift可以選擇一個區(qū)間內(nèi)的項目
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
root.mainloop()運行結(jié)果:

前面是單擊并拖拽,后面是使用Shift鍵選擇一個區(qū)間內(nèi)的項目
使用insert(ACTIVE, elements),表示是在目前選項前面加入一個項目,如果尚未選擇選項則此ACTIVE是0
例子:
使用ACTIVE
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
listbox1.insert(tkinter.ACTIVE, '豆皮', '牛肉面', '湯圓')
root.mainloop()運行結(jié)果:

顯示已經(jīng)在最上面了,也就是一次性在最上面插入了三個項目
Listbox的基本操作
下面是一些常用的Listbox 控件操作的方法
| 操作方法 | 含義 |
|---|---|
| size() | 傳回列表項目的數(shù)量 |
| selection_set() | 選取特定索引項 |
| delete() | 刪除特定索引項 |
| get() | 傳回指定索引項 |
| curselection() | 傳回選取項目的索引 |
| selection_include() | 檢查指定索引是否被選取 |
列出列表框的選項數(shù)量 size()
例子:
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
print('數(shù)量是:', listbox1.size())
root.mainloop()運行結(jié)果:
數(shù)量是: 12
選取特定索引項 selection_set()
如果selection_set() 方法內(nèi)含一個參數(shù),表示選取這個索引項,這個功能常被用于在建立Listbox 后,設(shè)定初次選擇的項目,通俗易懂的說,就是一進(jìn)去默認(rèn)選的是哪一個
例子:
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
# 這里設(shè)置默認(rèn)選定的索引項
listbox1.select_set(1)
root.mainloop()運行結(jié)果:

如果設(shè)置兩個索引值,就表示選取區(qū)間選項,第一個參數(shù)是起始索引項,第二個參數(shù)是區(qū)間的結(jié)束索引項
例子:
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
# 這里設(shè)置默認(rèn)選定的索引項
listbox1.select_set(1, 3)
root.mainloop()運行結(jié)果:

刪除特定索引項
如果delete() 方法內(nèi)含一個參數(shù),表示刪除這個索引項
例子
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
# 這里設(shè)置刪除選定的索引項
listbox1.delete(0)
root.mainloop()運行結(jié)果:

可以很自然的看到“熱干面”選項已經(jīng)不見了
如果delete() 有兩個參數(shù)是,表示選取區(qū)間選項,第一個參數(shù)是區(qū)間的起始索引項,第二個參數(shù)是區(qū)間的結(jié)束索引項
例子:
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
# 這里設(shè)置刪除選定的索引項
listbox1.delete(0, 1)
root.mainloop()運行結(jié)果:

可以看到“熱干面、擔(dān)擔(dān)面”兩個選項已經(jīng)刪除了
傳回指定的索引項 get()
如果get() 方法內(nèi)含一個參數(shù),表示傳回這個索引項的元素內(nèi)容
例子:
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
print(listbox1.get(1))
root.mainloop()運行結(jié)果:
擔(dān)擔(dān)面
如果在get() 方法內(nèi)有兩個參數(shù),則表示傳回區(qū)間選項,第一個參數(shù)是區(qū)間的起始索引項,第二個參數(shù)是區(qū)間的結(jié)束索引項,傳回的值用元組方式傳回
例子:
import tkinter
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
print(listbox1.get(1, 3))
root.mainloop()運行結(jié)果:
('擔(dān)擔(dān)面', '炸醬面', '面窩')
傳回所選取項目的索引 curselection()
注意!注意!是索引,不是索引項
例子:
import tkinter
def show():
index = listbox1.curselection()
print(index)
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
button = tkinter.Button(root, text='print', command=show)
button.pack()
root.mainloop()運行結(jié)果:

我們可以結(jié)合get() 方法使用
例子:
def show():
index = listbox1.curselection()
for i in index:
print(listbox1.get(i))運行結(jié)果:

檢查指定索引項是否被選取 selection_includes()
如果指定索引項被選取會傳回True,否則傳回False
例子:
import tkinter
def show():
# 檢查第二個選項有無被選取
print(listbox1.select_includes(1))
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){', '混沌', '糊湯粉', '餃子', '豆皮', '牛肉面', '湯圓']
# 建立listbox1
listbox1 = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
listbox1.pack(padx=5, pady=5)
# 插入的位置與信息
for food in foods:
listbox1.insert(tkinter.END, food)
button = tkinter.Button(root, text='print', command=show)
button.pack()
root.mainloop()運行結(jié)果:

Listbox與事件綁定
虛擬綁定應(yīng)用于單選
當(dāng)Listbox執(zhí)行選取操作時會產(chǎn)生<<ListboxSelection>>虛擬事件,可以由此設(shè)置事件處理程序
例子:
import tkinter
def show(event):
# 取得事件對象object
object = event.widget
# 取得所選的項目索引
index = object.curselection()
# 由索引取得所選的項目,關(guān)聯(lián)到label中
var.set(object.get(index))
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){']
# 顯示區(qū)
var = tkinter.StringVar()
label = tkinter.Label(root, textvariable=var)
label.pack(pady=5)
# 列表框
lb = tkinter.Listbox(root)
for i in foods:
lb.insert(tkinter.END, i)
lb.bind("<<ListboxSelect>>", show)
lb.pack(pady=5)
root.mainloop()運行結(jié)果:

單擊Listbox中選項時會產(chǎn)生虛擬的<<ListboxSelection>>事件,此時可以觸發(fā)itemChanged()方法處理此事件
其實可以省略第四行,直接使用原先的Listbox對象也可以
例子:
def show(event):
# 取得所選的項目索引
index = lb.curselection()
# 由索引取得所選的項目,關(guān)聯(lián)到label中
var.set(lb.get(index))運行結(jié)果是一樣的
或者我們不使用虛擬綁定,直接簡單粗魯?shù)氖褂脝螕暨x項,也行
例子:
lb.bind("<Button-1>", show)運行結(jié)果是一樣的!
注意:這種方式pycharm會報錯,但是依舊可以運行!
虛擬綁定應(yīng)用于多選
例子:
import tkinter
def show(event):
object = event.widget
indexs = object.curselection()
for index in indexs:
print(object.get(index))
print('------------')
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){']
# 列表框
lb = tkinter.Listbox(root, selectmode=tkinter.EXTENDED)
for i in foods:
lb.insert(tkinter.END, i)
lb.bind("<<ListboxSelect>>", show)
lb.pack(pady=5)
root.mainloop()運行結(jié)果:

活用加入和刪除項目
例子:
import tkinter
def add():
varAdd = entry.get()
if (len(varAdd.strip())) == 0:
return
listbox.insert(tkinter.END, varAdd)
entry.delete(0, tkinter.END)
def delete():
index = listbox.curselection()
if len(index) == 0:
return
listbox.delete(index)
root = tkinter.Tk()
# 輸入框
entry = tkinter.Entry(root)
entry.grid(row=0, column=0, padx=5, pady=5)
# 增加按鈕
buttonAdd = tkinter.Button(root, text='增加', width=10, command=add)
buttonAdd.grid(row=0, column=1, padx=5, pady=5)
# 列表顯示框
listbox = tkinter.Listbox(root)
listbox.grid(row=1, column=0, padx=5, pady=5)
# 刪除按鈕
buttonDelete = tkinter.Button(root, text='刪除', width=10, command=delete)
buttonDelete.grid(row=1, column=1, padx=5, pady=5, sticky=tkinter.N)
root.mainloop()運行結(jié)果:

Listbox 項目的排序
例子:
import tkinter
def show():
# 獲取復(fù)選框是否勾選的值,如果勾選,值為True
if var.get():
# 定義排序的變量
rebBool = True
else:
rebBool = False
# 把我們列表框的幾個值獲取并轉(zhuǎn)換成列表,方便排序
listTem = list(listbox.get(0, tkinter.END))
# 排序
sortedList = sorted(listTem, reverse=rebBool)
# 刪除之前存在的列表框的值
listbox.delete(0, tkinter.END)
# 重新插入我們排序好的列表框的值
for i in sortedList:
listbox.insert(tkinter.END, i)
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){']
listbox = tkinter.Listbox(root)
for food in foods:
listbox.insert(tkinter.END, food)
listbox.pack(padx=10, pady=5)
# 創(chuàng)建排序按鈕
button = tkinter.Button(root, text='排序', command=show)
button.pack(side=tkinter.LEFT, padx=10, pady=5)
var = tkinter.BooleanVar()
cheakbutton = tkinter.Checkbutton(root, text='從大到小排序', variable=var)
cheakbutton.pack(side=tkinter.LEFT)
root.mainloop()運行結(jié)果:

拖拽 Listbox 中的項目
例子:
import tkinter
# 處理單擊選項
def show(event):
# nearest可以傳回最接近y坐標(biāo)在Listbox的索引
# 傳回目前選項的索引
listbox.index = listbox.nearest(event.y)
# 處理拖拽選項
def showInfo(event):
# 獲取目前選項的新索引
newIndex = listbox.nearest(event.y)
# 判斷,如果向上拖拽
if newIndex < listbox.index:
# 獲取新位置的內(nèi)容
x = listbox.get(newIndex)
# 刪除新內(nèi)容
listbox.delete(newIndex)
# 將新內(nèi)容插入,相當(dāng)于插入我們移動后的位置
listbox.insert(newIndex + 1, x)
# 把需要移動的索引值變成我們所希望的索引,達(dá)到了移動的目的
listbox.index = newIndex
elif newIndex > listbox.index:
# 獲取新位置的內(nèi)容
x = listbox.get(newIndex)
# 刪除新內(nèi)容
listbox.delete(newIndex)
# 將新內(nèi)容插入,相當(dāng)于插入我們移動后的位置
listbox.insert(newIndex - 1, x)
# 把需要移動的索引值變成我們所希望的索引,達(dá)到了移動的目的
listbox.index = newIndex
root = tkinter.Tk()
foods = ['熱干面', '擔(dān)擔(dān)面', '炸醬面', '面窩', '油條', '豆?jié){']
listbox = tkinter.Listbox(root)
for food in foods:
listbox.insert(tkinter.END, food)
listbox.bind('<Button-1>', show)
listbox.bind('<B1-Motion>', showInfo)
listbox.pack(padx=10, pady=5)
root.mainloop()運行結(jié)果:

程序中用到的方法
nearest(event.y)
上述代碼行,可以傳回最接近y坐標(biāo)在Listbox中的索引。當(dāng)有單擊操作時會觸發(fā)getIndex()方法,第4行可以傳回目前選項的索引,在拖拽過程中會觸發(fā)gragJob()方法,在第7行可以傳回新選項的索引,因為在拖拽過程中,這個方法會不斷的被觸發(fā),所以至于被觸發(fā)多少次視移動速度而定
假如移動擔(dān)擔(dān)面,它的索引是1, 咱們向下拖拽,整個流程如下
- 新索引位置為2
- 獲得索引內(nèi)容 ‘面窩’,參照第27行
- 刪除新內(nèi)容 ‘面窩’,參照第29行
- 將 ‘面窩’ 內(nèi)容插入在索引1的位置,相當(dāng)于插入到我們移動前的位置,參照第31行
- 這個時候把新的索引位置傳給 ‘擔(dān)擔(dān)面’ ,根據(jù)索引來變換位置,變成了2,這樣就達(dá)到了移動的目的了,參照第33行
滾動條的設(shè)計
在默認(rèn)環(huán)境中Listbox 是沒有滾動條的,但是如果選項太多,將造成部分選項無法顯示,可以將滾動條Scrollbar控件加入Listbox中
注:Scrollbar控件除了可以應(yīng)用在Listbox上,也可以應(yīng)用在Text和Canvas上
使用格式如下:
Scrollbar(父對象, options, ...)
參數(shù):
- 第一個參數(shù):父對象,表示這個滾動條將建立在哪一個窗口內(nèi)
- 第二個參數(shù):
options,參數(shù)如下
| 參數(shù) | 含義 |
|---|---|
| activebackground | 當(dāng)光標(biāo)經(jīng)過滾動條時,滾動條和方向箭頭的顏色 |
| bg 或 background | 當(dāng)光標(biāo)沒有經(jīng)過滾動條時,滾動條和方向箭頭的顏色 |
| bd 或 borderwidth | 邊界寬度默認(rèn)是兩個像素 |
| command | 滾動條移動時所觸發(fā)的方法 |
| cursor | 當(dāng)鼠標(biāo)光標(biāo)在滾動條上時的形狀 |
| highlightbackground | 當(dāng)滾動條沒有獲得焦點時的顏色 |
| highlightcolor | 當(dāng)滾動條取得焦點時的顏色 |
| highlightthinckness | 當(dāng)取得焦點時的厚度默認(rèn)是1 |
| jump | 每次短距離的拖拽滾動條時都會觸發(fā)command的方法如果設(shè)為1,則只有放開鼠標(biāo)按鍵時,才會觸發(fā)command的方法默認(rèn)是0 |
| orient | 可設(shè)置HORIZONTAL/VERTICAL,分別是水平軸/垂直軸 |
| repeatdelay | 可以設(shè)置按住滾動條移動的停滯時間單位是ms默認(rèn)是300ms |
| takefocus | 正常可以用Tab鍵的方式切換滾動條成為焦點如果設(shè)置為0,則取消此設(shè)置 |
| troughcolor | 滾動條槽的顏色 |
| width | 寬,單位是字符寬 |
例子:
import tkinter
root = tkinter.Tk()
sc = tkinter.Scrollbar(root)
sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
# 列表動,滾動條跟著動
lb = tkinter.Listbox(root, yscrollcommand=sc.set)
for i in range(50):
lb.insert(tkinter.END, "列表 " + str(i))
lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH, expand=True)
# 滾動條動,列表跟著動
sc.config(command=lb.yview)
root.mainloop()運行結(jié)果:

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用Keras庫中的LSTM模型生成新文本內(nèi)容教程
Python語言使用金庸小說文本庫,對文本進(jìn)行預(yù)處理,然后使用Keras庫中的LSTM模型創(chuàng)建和訓(xùn)練了模型,根據(jù)這個模型,我們可以生成新的文本,并探索小說的不同應(yīng)用2024-01-01
Python實現(xiàn)數(shù)據(jù)地址實體抽取
大家好,本篇文章主要講的是Python實現(xiàn)數(shù)據(jù)地址實體抽取,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02
30分鐘搭建Python的Flask框架并在上面編寫第一個應(yīng)用
這篇文章主要介紹了如何搭建Python的Flask框架并在上面編寫一個簡單的登錄模版應(yīng)用,代碼數(shù)量少、充分體現(xiàn)了Flask框架的輕量與開發(fā)高效的特點,需要的朋友可以參考下2015-03-03
Django框架配置mysql數(shù)據(jù)庫實現(xiàn)過程
這篇文章主要介紹了Django框架配置mysql數(shù)據(jù)庫實現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04

