如何将鼠标位置传递给 Tkinter 中的进度条小部件?
How to pass mouse position to progress bar widget in Tkinter?
我无法将鼠标位置传递给在 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 坐标相对于小部件宽度的百分比。然后您可以将该百分比乘以最大值以获得适当的值。
它可能看起来像这样:
def motion(event):
width = progbar.winfo_width()
max_value = int(progbar.cget("max"))
percent = min(max(event.x/width, 0), max_value)
value = int(percent * max_value)
var.set(value)
可以得到传给motion
函数的event
的x
属性除以进度条宽度得到鼠标相对于进度条。然后,您可以使用该值将进度条更新为该比例。为了方便计算,我把进度条的max
属性改为1.
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()
我无法将鼠标位置传递给在 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 坐标相对于小部件宽度的百分比。然后您可以将该百分比乘以最大值以获得适当的值。
它可能看起来像这样:
def motion(event):
width = progbar.winfo_width()
max_value = int(progbar.cget("max"))
percent = min(max(event.x/width, 0), max_value)
value = int(percent * max_value)
var.set(value)
可以得到传给motion
函数的event
的x
属性除以进度条宽度得到鼠标相对于进度条。然后,您可以使用该值将进度条更新为该比例。为了方便计算,我把进度条的max
属性改为1.
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()