簡體   English   中英

有沒有一種好方法可以將捕捉添加到 ttk tkinter 比例?

[英]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.

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