Python之tkinter Scale尺度條 與 Spinbox 輸入控件

Scale 的數值輸入控制

Scale 的基本概念

  Scale 可以翻譯爲尺度。Python的tkinter模塊中有 Widget控件Scale,這是一種圖形接口輸入功能,我們可以移動尺度條產生某一範圍的數字

在這裏插入圖片描述

建立尺度條的方法是Scale(),它的構造方法如下:

Scale(父對象, options, ...)

參數:

  • 第一個參數:父對象,表示這個尺度條將建立在哪一個窗口內
  • 第二個參數:options,參數如下
參數 含義
activebackground 鼠標光標在尺度條上時的背景顏色
borderwidth 3D邊界寬度
默認是兩個像素
bd 3D邊界寬度
默認是兩個像素
bg 背景顏色
command 當使用者更改數值時,會自動執行此方法
cursor 當鼠標光標在尺度條上時的形狀
fg 文字前景色彩
font 字形
from_ 尺度條範圍值的初值
highlightbackground 尺度條獲取焦點時的背景顏色
highlightcolor 尺度條取得焦點時的顏色
label 如果尺度條是水平的,則此標籤出現在左上角,如果尺度條是垂直的,則此標籤出現在右上角
默認是沒有標籤文字
length 默認是100像素
orient 可以設置水平HORIZONTAL或者垂直VERTICAL
默認是水平
relief 可由此更改邊界外觀
默認是FLAT
repeatdelay 可設置需要按住尺度條多久後纔可移動此尺度條
單位是ms
默認是300
resolution 每次更改的數值(相當於每次可以移動的步長)
例如, from_ =2.0, to=4.0,如果將resolution設爲0.5,則尺度可能數值是2.0、2.5、3.0、3.5、4.0
showvalue 正常會顯示尺度條的目前值,如果設爲0則不顯示
state 若設置爲DISABLED,則暫時無法使用此Scale
takefocus 正常時此尺度條可以循環取得焦點,如果設爲0則無法取得焦點
tickinterval 尺度條的標記刻度
例如,from_=2.0,to=3.0, tickinterval=0.25,則刻度是2.0、2.25、2.50、2.75和3.0
to 尺度條範圍值的末端值
throughcolor 槽(trough) 的顏色
variable 設置或取得目前選取的尺度值,它的值類型通常是IntVar或StringVar
width 對於垂直尺度條這是槽的寬度,對於水平尺度條這是槽的高度
Scale 的基本運用

例子

import tkinter

root = tkinter.Tk()

scale1 = tkinter.Scale(root, from_=0, to=10).pack()
# length  水平尺度條的寬度
scale2 = tkinter.Scale(root, from_=0, to=10, length=300, orient=tkinter.HORIZONTAL).pack()

root.mainloop()

運行結果:
在這裏插入圖片描述
例子

import tkinter

root = tkinter.Tk()

scale1 = tkinter.Scale(root,
                       from_=0,                          # 起點值
                       to=10,                            # 終點值
                       troughcolor="lightyellow",        # 槽的顏色
                       width="30",                       # 槽的高度
                       tickinterval=2,                   # 刻度
                       label="刻度尺",                    # 標籤
                       length=300,                       # 長度
                       orient=tkinter.HORIZONTAL)         # 水平
scale1.pack()
root.mainloop()

運行結果:
在這裏插入圖片描述

取得與設置Scale 的尺度值

使用get()方法取得尺度值,使用set()方法設置尺度值

例子

import tkinter

def show():
    print("垂直尺度值 = {}\n水平尺度值 = {}".format(scale1.get(), scale2.get()))
root = tkinter.Tk()

scale1 = tkinter.Scale(root,
                       from_=0,                          # 起點值
                       to=10,                            # 終點值
                       troughcolor="lightyellow",        # 槽的顏色
                       width="20",                       # 槽的高度
                       tickinterval=2,                   # 刻度
                       label="刻度尺",                    # 標籤
                       length=200)                      # 長度

scale1.pack()

scale2 = tkinter.Scale(root,
                       from_=0,                          # 起點值
                       to=10,                            # 終點值
                       troughcolor="lightyellow",        # 槽的顏色
                       width="20",                       # 槽的高度
                       tickinterval=2,                   # 刻度
                       label="刻度尺",                    # 標籤
                       length=200,                       # 長度
                       orient=tkinter.HORIZONTAL)         # 水平
scale2.pack()
button = tkinter.Button(root, text="cheak this", command=show)
button.pack()
root.mainloop()

運行結果:
在這裏插入圖片描述

使用 Scale 設置窗口背景顏色

Scale 控件有一個特點就是在移動時可以自動觸發時間

def show():
	pass

scale = Scale(..., command=show)

例子

import tkinter

def show(source):
    # source 用於接收Scale 傳回來的參數
    red = rSlider.get()
    green = gSlider.get()
    blue = bSlider.get()
    myColor = "#%02x%02x%02x" % (red, green, blue)   # %02x 轉成16進制,字母小寫空缺補零
    root.config(bg=myColor)

root = tkinter.Tk()
root.geometry("300x200")

rSlider = tkinter.Scale(root, from_=0, to=255, command=show)
gSlider = tkinter.Scale(root, from_=0, to=255, command=show)
bSlider = tkinter.Scale(root, from_=0, to=255, command=show)

rSlider.grid(row=0, column=0)
gSlider.grid(row=0, column=1)
bSlider.grid(row=0, column=2)
root.mainloop()

運行結果:
在這裏插入圖片描述

askcolor() 方法

在tkinter 模塊內的 colorchooser 模塊內有askcolor() 方法,這個方法可以開啓色彩對話框,讓我們可以很方便的在此對話框中選擇我們需要的色彩

例子

import tkinter
from tkinter.colorchooser import *

def colorChoose():
    mycolor = askcolor()
    print(type(mycolor), mycolor)
    root.config(bg=mycolor[1])

root = tkinter.Tk()
root.geometry("300x200")

button = tkinter.Button(root, text="Select Color", command=colorChoose)
button.pack()

root.mainloop()

運行結果:
在這裏插入圖片描述
type類型爲

<class 'tuple'> ((255.99609375, 128.5, 0.0), '#ff8000')
容器的應用

我們可以使用Frame框架當做容器,將三個色彩尺度條放在此框架內,方便我們去移動或者去管理

例子

import tkinter

def show(source):
    # source 用於接收Scale 傳回來的參數
    red = rSlider.get()
    green = gSlider.get()
    blue = bSlider.get()
    myColor = "#%02x%02x%02x" % (red, green, blue)   # %02x 轉成16進制,字母小寫空缺補零
    root.config(bg=myColor)

root = tkinter.Tk()
root.geometry("300x200")
frame = tkinter.Frame(root)
frame.pack()

rSlider = tkinter.Scale(frame, from_=0, to=255, command=show)
gSlider = tkinter.Scale(frame, from_=0, to=255, command=show)
bSlider = tkinter.Scale(frame, from_=0, to=255, command=show)

rSlider.grid(row=0, column=0)
gSlider.grid(row=0, column=1)
bSlider.grid(row=0, column=2)
root.mainloop()

運行結果:
在這裏插入圖片描述

Spinbox 控件

Spinbox 控件基本概念

  Spinbox 控件也是一種輸入控件,其實它是一種Entry和 Button的組合體,他允許用戶用鼠標單擊up/down按鈕,或者是按上箭頭/下箭頭達到在某一數值區間內增加數值與減少數值的目的。另外,也可以在此直接輸入數值

構造方法如下:

Spinbox(父對象, options, ...)

參數:

  • 第一個參數:父對象,表示這個Spinbox將建立在哪一個窗口內
  • 第二個參數:options,參數如下
參數 含義
activebackground 鼠標光標在Spinbox 控件上時的背景顏色
borderwidth 3D邊界寬度
默認是兩個像素
bd 3D邊界寬度
默認是兩個像素
bg 背景顏色
command 當使用者更改選項時,會自動執行此方法
cursor 當鼠標光標在Spinbox 控件上時的形狀
disablebackground 在Disabled狀態時的背景顏色
disableforeground 在Disabled狀態時的前景顏色
fg 文字前景色彩
font 字形
format 格式化的字符串
from_ 範圍值的初值
increment 每次單擊up/down按鈕的增值或減值的量
justify 在有多行文本時,最後一行的對齊方式
可取值有LEFT/CENTER/RIGHT(靠左/居中/靠右)
默認是居中對齊
relief 可由此更改邊界外觀
默認是FLAT
repeatdelay 可設置單擊up/down按鈕變換數字的間隔時間。單位是ms
默認是300
state 若設置爲DISABLED,則暫時無法使用此Spinbox
默認是NORMAL,也可以設置READONLY
textvariable 可以設置以變量方式顯示
values 可以是元組或其他序列值
to 範圍值的末端值
width 對於垂直尺度條這是槽的寬度,對於水平尺度條這是槽的高度
wrap 單擊up/down按鈕可以讓數值重新開始
xscrollcommand 在x軸使用滾動條
Spinbox 控件基本運用

例子

import tkinter

root = tkinter.Tk()
root.geometry("200x80")
spinbox = tkinter.Spinbox(root, from_=10, to=30, increment=2)
spinbox.pack(padx=5, pady=20)

root.mainloop()

運行結果:
在這裏插入圖片描述
備註:如果想要用上箭頭/下箭頭鍵更改數值時,需先將插入點放在數值區,也就是輸入時閃爍的光標

get() 方法的應用

可以使用get()方法取得目前Spinbox 的值

例子

import tkinter

def printNum():
    print(spinbox.get())

root = tkinter.Tk()
root.geometry("200x80")
spinbox = tkinter.Spinbox(root, from_=10, to=30, command=printNum)
spinbox.pack(padx=5, pady=20)

root.mainloop()

運行結果:
在這裏插入圖片描述

以序列存儲 Spinbox的數值數據

其實在使用 Spinbox 時也可以不設置初值和終值, 而是將數值存儲在序列數據中。

例如,元組或列表內,當單擊上箭頭/下箭頭按鈕時,相當於是觀察元組或列表內索引(index)內的值

例子

import tkinter

def printNum():
    print(spinbox.get())

root = tkinter.Tk()
root.geometry("200x80")
spinbox = tkinter.Spinbox(root, values=(1, 3, 5, 7, 9), command=printNum)
spinbox.pack(padx=5, pady=20)

root.mainloop()

運行結果:
在這裏插入圖片描述
因爲元組內容是(1, 3, 5, 7, 9),所以程序啓動後出現的值是1,第1次單擊按鈕時的值是3, 第2次單擊按鈕時的值是5

非數值數據

可以使用列表或元組存儲序列資料,其實應用在Spinbox內可以是數值數據也可以是非數值數據,例如,字符串

例子

import tkinter


def printNum():
    print(spinbox.get())


foods = ("餃子", "湯圓", "春捲", "油條", "面窩", "熱乾麪")

root = tkinter.Tk()
root.geometry("200x80")
spinbox = tkinter.Spinbox(root, values=foods, command=printNum)
spinbox.pack(padx=5, pady=20)

root.mainloop()

運行結果:
在這裏插入圖片描述

謝謝觀看,筆者會持續更新,如有錯誤或者建議,請私信我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章