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