Tkinter的下拉列表Combobox
tk中下拉列表使用ttk.Combobox,代碼如下:
-
#!/usr/bin/env python -
# -*- coding: utf-8 -*- -
-
-
import tkinter as tk -
from tkinter import ttk -
-
win = tk.Tk() -
win.title("Python GUI") # 添加標題 -
-
ttk.Label(win, text="Chooes a number").grid(column=1, row=0) # 添加一個標簽,並將其列設置為1,行設置為0 -
ttk.Label(win, text="Enter a name:").grid(column=0, row=0) # 設置其在界面中出現的位置 column代表列 row 代表行 -
-
# button被點擊之后會被執行 -
def clickMe(): # 當acction被點擊時,該函數則生效 -
action.configure(text='Hello ' + name.get()) # 設置button顯示的內容 -
action.configure(state='disabled') # 將按鈕設置為灰色狀態,不可使用狀態 -
-
# 按鈕 -
action = ttk.Button(win, text="Click Me!", command=clickMe) # 創建一個按鈕, text:顯示按鈕上面顯示的文字, command:當這個按鈕被點擊之后會調用command函數 -
action.grid(column=2, row=1) # 設置其在界面中出現的位置 column代表列 row 代表行 -
-
# 文本框 -
name = tk.StringVar() # StringVar是Tk庫內部定義的字符串變量類型,在這里用於管理部件上面的字符;不過一般用在按鈕button上。改變StringVar,按鈕上的文字也隨之改變。 -
nameEntered = ttk.Entry(win, width=12, textvariable=name) # 創建一個文本框,定義長度為12個字符長度,並且將文本框中的內容綁定到上一句定義的name變量上,方便clickMe調用 -
nameEntered.grid(column=0, row=1) # 設置其在界面中出現的位置 column代表列 row 代表行 -
nameEntered.focus() # 當程序運行時,光標默認會出現在該文本框中 -
-
# 創建一個下拉列表 -
number = tk.StringVar() -
numberChosen = ttk.Combobox(win, width=12, textvariable=number) -
numberChosen['values'] = (1, 2, 4, 42, 100) # 設置下拉列表的值 -
numberChosen.grid(column=1, row=1) # 設置其在界面中出現的位置 column代表列 row 代表行 -
numberChosen.current(0) # 設置下拉列表默認顯示的值,0為 numberChosen['values'] 的下標值 -
-
win.mainloop() # 當調用mainloop()時,窗口才會顯示出來
執行代碼結果如圖:
52490873.png
注:
- 程序執行下拉框中默認顯示的值由下面代碼實現
nameEntered.focus() # 當程序運行時,光標默認會出現在該文本框中
- 在這里下拉框中還可以直接輸入一個值,如果不希望這個地方可以輸入值,可以在創建的時候添加一個參數:
-
state='readonly' # 將下拉列表設置成為只讀模式 -
-
# 完整代碼如下: -
numberChosen = ttk.Combobox(win, width=12, textvariable=number, state='readonly')
修改代碼,需求是當點擊button按鈕時,button上面顯示的字符串是文本框和下拉列表顯示的字符串的拼接,只需要修改一下clickMe函數就可以了,代碼如下:
-
def clickMe(): # 當acction被點擊時,該函數則生效 -
action.configure(text='Hello ' + name.get() + ' ' + numberChosen.get()) # 設置button顯示的內容
代碼執行結果如圖:
54272903.png
文/congzhang(簡書作者)
原文鏈接:http://www.jianshu.com/p/2a931ce70b4b
原文鏈接:http://www.jianshu.com/p/2a931ce70b4b
