[英]Is there a good way to add snapping to a ttk tkinter scale?
我正在嘗試使用ttk.Scale
小部件制作一個以 ttk 為主題的 Tkinter 滑塊。 問題是,在標准小部件中找到的resolution
屬性已在此處刪除。
我試圖以一種非常簡單的方式做到這一點,即只需將滑塊的值設置為舍入輸出。 例子:
scale = ttk.Scale(frame, orient="horizontal", length=200,
from_=1, to=10, variable=foo,
command=lambda x: scale.set(round(float(x))))
command
部分是這里的所有工作。 它將刻度的值設置為四舍五入的輸出。
問題是,每次按下滑塊時,它都會不斷地吐出錯誤,因為它無法將滑塊放置在適當的位置。 請注意,在視覺和功能上,這個解決方案完美無缺,唯一的“問題”是它會吐出錯誤。 當然,我可以讓這些錯誤保持沉默,但我真的不喜歡這樣處理問題。
這是它反復吐出的錯誤:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\foobar\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
return self.func(*args)
File "C:\foo\bar\main.py", line X, in <lambda>
command=lambda x: scale.set(round(float(x))))
File "C:\Users\foobar\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 3497, in set
self.tk.call(self._w, 'set', value)
_tkinter.TclError
我的問題是:有沒有辦法重復這個功能,但沒有所有錯誤,或者降級回標准 tk 小部件?
根據文檔,只要通過小部件命令更改比例的值,就會觸發command
選項的回調。 因此調用scale.set(...)
將觸發回調,從而導致遞歸問題。
使用關聯的變量foo
更新值將修復它:
command=lambda x: foo.set(round(float(x)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.