簡體   English   中英

如何從 tkinter Scale 小部件顯示中刪除比例值?

[英]How to remove scale value from tkinter Scale widget display?

我正在嘗試在應用程序中使用 tkinter Scale 小部件,每當我設置 tickinterval 屬性時,slider 下方都會顯示一個值。

有沒有辦法抑制顯示低於 slider 的比例值並仍然指定刻度間隔?

我的用例是創建一個非線性 slider ,其中縮放值 0-6 map 到值列表,如 1、4、10、40、100、400、1000。在這種情況下,顯示小部件的值沒有意義給用戶。

我的另一種選擇是使用 combobox 或一系列單選按鈕。

歡迎提出建議。

這是一個示例程序:

import tkinter as tk

def scaleChanged():
   scaleValue = "Value = " + str(var.get())
   label.config(text = scaleValue)

root = tk.Tk()
root.geometry('300x150+100+100')
var = tk.DoubleVar()
scale = tk.Scale( root, orient=tk.HORIZONTAL, from_=0, to=6, showvalue=0,
                  variable = var, length=180, tickinterval=30)
scale.pack(anchor = tk.CENTER, pady=(20,10))

button = tk.Button(root, text = "Fetch Scale Value", command = scaleChanged)
button.pack(anchor = tk.CENTER, pady=10)

label = tk.Label(root)
label.pack()

root.mainloop()

輸出

您可以設置 tickinterval=0(或將其刪除),使其不會顯示低於 slider 的值。 然后,當您在按鈕中獲取 slider 的值時,使用 0:1... 6:1000 的映射並將其顯示在比例 window 中。

下面是完整的腳本:

import tkinter as tk

def scaleChanged():
   mapping={0:1, 1:4, 2:10, 3:40, 4:100, 5:400, 6:1000}
   scaleValue = "Value = " + str(mapping.get(var.get()))
   label.config(text = scaleValue)


root = tk.Tk()
root.geometry('300x150+100+100')
var = tk.DoubleVar()
scale = tk.Scale( root, orient=tk.HORIZONTAL, from_=0, to=6, showvalue=0,
                  variable = var, length=180, tickinterval=0)
scale.pack(anchor = tk.CENTER, pady=(20,10))

button = tk.Button(root, text = "Fetch Scale Value", command = scaleChanged)
button.pack(anchor = tk.CENTER, pady=10)

label = tk.Label(root)
label.pack()

root.mainloop()

樣品 output:

在此處輸入圖像描述

有沒有辦法抑制顯示低於 slider 的比例值並仍然指定刻度間隔?

不,那里沒有。 關閉刻度值的記錄方法是將刻度tickinterval設置為零。 來自官方文檔:

tickinterval :必須是真實值。 確定顯示在 slider 下方或左側的數字刻度線之間的間距。 這些值都將以相同的小數位數顯示,這足以確保它們都精確到刻度間隔的 20% 以內。 如果為 0,則不顯示刻度線

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM