【问题标题】:Display value of scale in Canvas in Tkinter在 Tkinter 中的 Canvas 中显示比例值
【发布时间】:2015-06-19 12:39:48
【问题描述】:

我正在尝试在 Tkinter 中开发 GUI。我有一个主要代码

from menus import *
from Tkinter import *
from SpeedControl import *

Main = Tk()
Main.tk_setPalette(background='white')
GenerateMenus(Main)
GenerateSlider(Main)
mainloop()

GenerateSlider 的代码是 从 Tkinter 导入 *

def GenerateSlider(master):
    display1 = Canvas(master, width=150, height=80, relief=RAISED, bd=5)
    display1.grid(row=0,column=0)
    display1.create_rectangle(10, 10, 150, 80, fill='dark red')
    slider1 = Scale(master, from_=0, to=100, length=400,
                    tickinterval=10, orient=HORIZONTAL, relief=SUNKEN, bd=5,
                    bg='white', troughcolor='black', sliderrelief=RAISED)
    slider1.grid(row=0,column=1)
    display1.create_text(50,20, font='Helvatica 28', text=slider1.get(), fill='white', anchor=NW)
    display2 = Canvas(master, width=150, height=80, relief=RAISED, bd=5)
    display2.grid(row=1,column=0)
    display2.create_rectangle(10, 10, 150, 80, fill='dark red')
    slider2 = Scale(master, from_=0, to=100, length=400,
                    tickinterval=10, orient=HORIZONTAL, relief=SUNKEN, bd=5,
                    bg='white', troughcolor='black', sliderrelief=RAISED)
    slider2.grid(row=1,column=1)
    display2.create_text(50,20, font='Helvatica 24', text=slider2.get(), fill='white', anchor=NW)

我在这里尝试做的是程序应该将滑块的当前值显示为画布内的文本。初始值显示在画布中,但我需要一种方法来在滑块移动时更新值。

【问题讨论】:

  • 你能在比例移动时创建一个回调函数(command = someFunction 当你创建Scale小部件时),并且在回调调用 display1.update() 内部? (或正在更新的任何显示)

标签: python user-interface tkinter slider tkinter-canvas


【解决方案1】:

让我详细说明我的评论。这就是我的意思(使用类,以及一个适合我目的的简化示例):

from Tkinter import *

class Window():

    def __init__(self, master):

        self.display1 = Canvas(master, width=150, height=80, relief=RAISED, bd=5)
        self.display1.grid(row=0,column=0)
        self.display1.create_rectangle(10, 10, 150, 80, fill='dark red')

        self.slider1 = Scale(master, from_=0, to=100, length=400,
                tickinterval=10, orient=HORIZONTAL, relief=SUNKEN, bd=5,
                bg='white', troughcolor='black', sliderrelief=RAISED, command = self.updateCanvas)
        self.slider1.grid(row=0,column=1)

        self.createdText = self.display1.create_text(50, 20, font = 'Helvatica 28', text = self.slider1.get(), fill = 'white', anchor = NW)

    def updateCanvas(self, sliderVal):

        self.display1.itemconfig(self.createdText, text = sliderVal)

master = Tk()
w = Window(master)
master.mainloop()

编辑:从对updateCanvas 的调用中删除了 lambda,因为 command 用于 Scale 小部件在调用时传递它的值。我可以给updateCanvas 一个自动传递的参数sliderVal,然后我用它来更新文本。还删除了对update() 的调用,因为它是不必要的。

编辑 2:更新了代码以反映 fhdrsdg 的建议,这允许在每次调用更新函数时无需销毁和重新创建文本即可更新文本。

【讨论】:

  • 您可以在创建滑块后立即使用self.createdText = self.display1.create_text(50,20, font='Helvatica 28', text=self.slider1.get(), fill='white', anchor=NW) 创建一次文本,然后使用self.display1.itemconfig(self.createdText, text=sliderVal) 更新updateCanvas 中的文本。这样您就不会在每次滑块更改时删除和创建 Canvas 的文本小部件,而只需更新显示的文本。
  • 将根据此建议进行更新。我根据我对其他小部件的工作知识创建了这个示例,第一次使用 Canvas 小部件!
  • 这段代码有效。感谢您的帮助。这实际上是我第一次创建 Tkinter 项目。
猜你喜欢
  • 2020-07-23
  • 2021-12-28
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多