更新:此接缝是版本问题。对于python 3.6.1的点击事件不会触发,但是到目前为止我已经测试过2.7。
更新:布莱恩的回答确实解决了我的问题,但是事件没有正常工作,但是在我的3.6.1版本的python上,没有触发点击的事件的问题仍然是一个问题。
Python版本= 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
我正在尝试编写一个事件处理程序,以便在按住鼠标按钮时重复执行某些操作。我一直在搜索文档和互联网,但我找不到任何仅按住鼠标左键的参考。
是否有专门用于按住鼠标左键的事件?有一个偶数用于释放<ButtonRelease-1>
但是没有一个用于点击和保持事件的接缝。
我已尝试过<Button-1>
及其所有同义事件,以防万一,但没有运气。该事件仅在发布时触发,但不会在我想要的情况下触发。我甚至不需要一个持续按住按钮的事件,我只需要一个偶数按下按钮。
欢迎文档,因为我无法找到任何文件。
更新:
这是一个示例代码。它仅在释放按钮时打印。请记住,我正在尝试按滚动条上的箭头按钮并更改滚动速度。
滚动条手柄按滚动箭头的方式与按钮不同吗?
import tkinter as tk
root = tk.Tk()
textbox = tk.Text(root, height = 10)
textbox.grid(row=0, column=0)
scrolling = False
yscroll = tk.Scrollbar(root, command=textbox.yview,orient="vertical", repeatinterval=10, repeatdelay=30)
textbox.configure(yscrollcommand = yscroll.set)
yscroll.grid(row=0, column=1, sticky="ns")
for i in range(1000):
textbox.insert(tk.END, "{}\n".format(i))
def scrolling_active(arrow):
global scrolling
root.bind('<ButtonRelease-1>', stop_scrolling())
print(arrow)
if scrolling == True:
if arrow == "arrow1":
textbox.tk.call(textbox._w,'yview', 'scroll', -100, 'units')
if arrow == "arrow2":
textbox.tk.call(textbox._w,'yview', 'scroll', 100, 'units')
root.after(100, lambda a = arrow: scrolling_active(a))
def start_scrolling(event):
global scrolling
scrolling = True
scrolling_active(yscroll.identify(event.x, event.y))
def stop_scrolling():
global scrolling
scrolling = False
yscroll.bind("<Button-1>", start_scrolling)
root.mainloop()
答案 0 :(得分:1)
没有按下按钮的事件。只有按下和释放按钮的事件。
如果您需要在按钮关闭时进行跟踪,可以在印刷机上设置标记并在版本上取消设置。
在您的代码中,您有一个错误。请考虑以下代码:
MySQL
它在功能上与此相同:
NetezzaSQL
要进行绑定,您必须删除root.bind('<ButtonRelease-1>', stop_scrolling())
:
result=stop_scrolling()
root.bind('<ButtonRelease-1>`, None)
您还需要()
来接受事件对象:
root.bind('<ButtonRelease-1>', stop_scrolling)
此外,无需致电stop_scrolling
。您可以在tkinter对象(def stop_scrolling(event):
global scrolling
scrolling = False
)
textbox.tk.call
方法
答案 1 :(得分:1)
我知道有点晚了,但是我想做完全一样的事情(将图像拖到画布中以创建操纵杆控制器^^)。
阅读文档http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm时发现了此事件:'<B1-Motion>'
这是我所做的工作示例:
from tkinter import *
root = Tk()
root.geometry('800x600')
image1 = PhotoImage(file = 'images/button.png')
x_img,y_img = 250,250
canvas = Canvas(root, width = 500, height = 400, bg = 'white')
canvas.pack()
imageFinal = canvas.create_image(x_img, y_img, image = image1)
def move(event):
global x_img,y_img
x, y = event.x, event.y
print('{}, {}'.format(x, y))
canvas.move(imageFinal, x-x_img,y-y_img)
x_img = x
y_img = y
canvas.update()
canvas.bind('<B1-Motion>', move)
root.mainloop()
答案 2 :(得分:0)
您应该能够在最初点击鼠标时绑定到<ButtonPress-1>
,然后调用重复功能,直到<ButtonRelease-1>
停止它,如您所述。