簡體   English   中英

如何在Python中檢索tkinter ttk Scale小部件的整數值?

[英]How to retrieve the integer value of tkinter ttk Scale widget in Python?

誰能建議如何使用Python中“ Scale小部件的值檢索和更新“ Label小部件? 目前,它顯示出非常大的實數。 我試圖鍵入強制轉換值,但這僅在我打印到空閑時有效。 我嘗試了slider.get()但標簽為空。 還嘗試了int(slider.get()) ,當我打印到空閑時它可以工作。

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("Playing with Scales")

mainframe = ttk.Frame(root, padding="24 24 24 24")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))

slider = IntVar()

ttk.Scale(mainframe, from_=0, to_=100, length=300,  variable=slider).grid(column=1, row=4, columnspan=5)
ttk.Label(mainframe, textvariable=slider).grid(column=1, row=0, columnspan=5)

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)


root.mainloop()

在這里,您可以看到非常大的實際價值:

截圖

我沒有控制Scale小部件分辨率的方法,但修改它產生的字符串相當容易。 根據這些ttk文檔 ,Scale小部件返回一個浮點數,但是在我的實驗中,它返回一個字符串,這有點令人討厭。

可以直接將命令綁定到Scale小部件,而不是直接從Scale小部件上附加的slider變量設置Label文本,該命令將將Scale的當前值轉換為浮點數,然后使用所需位數進行格式化; 下面的代碼在小數點后顯示2位數字。

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Playing with Scales")

mainframe = ttk.Frame(root, padding="24 24 24 24")
mainframe.grid(column=0, row=0, sticky=('N', 'W', 'E', 'S'))

slider = tk.StringVar()
slider.set('0.00')

ttk.Scale(mainframe, from_=0, to_=100, length=300, 
    command=lambda s:slider.set('%0.2f' % float(s))).grid(column=1, row=4, columnspan=5)

ttk.Label(mainframe, textvariable=slider).grid(column=1, row=0, columnspan=5)

for child in mainframe.winfo_children(): 
    child.grid_configure(padx=5, pady=5)

root.mainloop()

如果只希望Label顯示整數值,則將slider的初始化更改為

slider.set('0')

並將回調函數更改為

lambda s:slider.set('%d' % float(s))

我對您的代碼做了其他一些小的更改。 首先,我用import tkinter as tk代替了“ star” import; 正如我在最近的回答中提到的,star導入將超過130個名稱引入到您的命名空間中,這會造成很多不必要的混亂。

另一個不太復雜且易於使用的替代方法是使用tkinter.Scale()類的實例,通過該實例,您可以將resolution選項注入所需的任何值。 默認值是您要查找的值,因為它的值為1

暫無
暫無

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

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