我有办法制作2轴滑块吗?它有点像一个tkinter滑块,但它是一个盒子,当你转到右上角时,它将是两个轴的最大值。如果可能的话,我希望x轴在释放后重新回到中间,谢谢?
答案 0 :(得分:1)
它不像tkinter
的内置Scale
小部件那样看起来像您的操作系统的原生滑块,但您至少可以实现该功能。下面创建一个Canvas
,在该画布中创建一个矩形,然后允许您单击并拖动画布内的任何位置以移动矩形。松开鼠标按钮时,它将打印光标的画布坐标。用您的程序需要替换print()
调用。您可以learn more about the Canvas
widget自定义其外观和行为。
import tkinter as tk
class Scale2d(object):
def __init__(self, root):
self.root = root
self.canvas = tk.Canvas(root, height=500, width=500)
self.canvas.pack()
self.canvas.bind('<1>', self.movement) # the magic
self.canvas.bind('<B1-Motion>', self.movement) # similar magic
self.canvas.bind('<ButtonRelease-1>', self.report) # result of magic
self.indicator = self.canvas.create_rectangle(245,245,255,255, fill='black') # dot
def movement(self, event): # move the dot
self.canvas.coords(self.indicator, event.x-5, event.y-5, event.x+5, event.y+5)
def report(self, event): # report the dot
print(event.x, 500-event.y) # 500-event.y to invert y axis
self.canvas.coords(self.indicator, 245, 245, 255, 255) # snap back
root = tk.Tk()
scale2d = Scale2d(root)
root.mainloop()