如何将鼠标位置传递给 Tkinter 中的进度条小部件?

J4K8B

我无法将鼠标的位置传递给在 Tkinter 中创建的进度条小部件滑块。我有代码,用户可以通过它来操纵进度条,但是通过使用下面放置的另一个小部件。我想消除第二个小部件。我无法将鼠标的位置传递给 ttk.Progressbar。

当前滑块:

截屏

问题是摆脱下面的小部件并能够仅通过鼠标操作绿色条。

当前代码:

from tkinter import *
from tkinter import ttk

root = Tk()
label = Label(root, text ='Progress Bar', font = "50")
label.pack(pady=5)

#mouse position
def motion(event):
    x, y = event.x, event.y
    print('{}, {}'.format(x, y)) 

#Progress Bar
progbar = ttk.Progressbar(root, orient=HORIZONTAL, length=220, mode="determinate", max=50.0)
progbar.pack(pady=20)
progbar.start()
progbar.stop()
progbar.bind('<B1-Motion>', motion)
var = IntVar()
progbar.config(variable=var) 

#Scale
scale = ttk.Scale(root, orient=HORIZONTAL, length=220, variable=var, from_ = 0.0, to= 50.0)
scale.pack()

root.geometry("300x150")
root.mainloop()
费利佩·马丁斯

您可以获取传递给函数的x属性并将其除以进度条宽度以获取鼠标相对于进度条的位置。然后,您可以使用该值将进度条更新为该比例。为了使计算更容易,我将进度条的属性更改为 1。eventmotionmax

from tkinter import *
from tkinter import ttk

root = Tk()
label = Label(root, text ='Progress Bar', font="50")
label.pack(pady=5)

var = IntVar()

def motion(event):
    proportion = event.x / event.widget.winfo_width()
    var.set(proportion)

#Progress Bar
progbar = ttk.Progressbar(root, orient=HORIZONTAL, length=220, mode="determinate", max=1)
progbar.pack(pady=20)
progbar.start()
progbar.stop()
progbar.bind('<B1-Motion>', motion)
progbar.config(variable=var)

root.geometry("300x100")
root.mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章