【问题标题】:Dynamically reformat tkinter scale value python 2.7动态重新格式化tkinter比例值python 2.7
【发布时间】:2014-08-06 15:39:58
【问题描述】:

我认为我想做的事情很简单,但显然不是。

我想做的是使用 tkinter 比例来控制用户可以输入的范围和值。

在我的例子中,我想输入一个以秒为单位的时间值并以 minutes:seconds 格式显示,这样任何人都可以理解,比如 330 秒 == 5:30。

因为这不是比例小部件的标准格式,所以我想做的是将 mm:ss 格式的时间显示在比例小部件旁边。

在我的示例代码中,我可以看到比例值发生变化,但到目前为止,我无法让 mm:ss 显示随着比例的移动而改变(我必须单击一个按钮才能更新它)。 因为我希望最终结果尽可能地证明白痴,所以我需要 mm:ss 显示随滑块动态变化。

在这个阶段,我似乎已经用尽了我能找到的所有在线示例,但似乎没有一个能达到我想要的效果(转换需要额外按下按钮)。

我敢肯定,当我知道如何做到这一点时,我会感到很愚蠢,但现在我因为试图弄清楚这一点而感到头疼。

有没有人可以分享这种行为的例子?

【问题讨论】:

  • 向我们展示您所指的示例代码会有所帮助。

标签: python tkinter


【解决方案1】:

缩放小部件有一个command 属性,您可以在值更改时使用该属性调用函数。然后,此函数可以将值重新格式化为您想要的任何值。

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        self.scale = tk.Scale(self, orient="horizontal", 
                              from_=0, to=600, 
                              showvalue=False,
                              command=self._on_scale)
        self.scale_label = tk.Label(self, text="")
        self.scale.pack(side="top", fill="x")
        self.scale_label.pack(side="top")

    def _on_scale(self, value):
        value = int(value)
        minutes = value/60
        seconds = value%60
        self.scale_label.configure(text="%2.2d:%2.2d" % (minutes, seconds))

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True);
    root.mainloop()

【讨论】:

  • 这正是我想要的,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
相关资源
最近更新 更多