当我将 Gtk.GestureClick
分配给 Gtk.Scale
时,没有发出 released
信号。
查看代码示例。
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
class Main():
def on_activate(self, app):
win = Gtk.ApplicationWindow(application=app)
gesture = Gtk.GestureClick.new()
gesture.connect("pressed", self.press)
gesture.connect("released", self.release)
scale = Gtk.Scale()
win.set_child(scale)
scale.add_controller(gesture)
win.present()
def press(self, *_):
print("pressed")
def release(self, *_):
print("released")
app = Gtk.Application(application_id='com.example.GtkApplication')
runner = Main()
app.connect('activate', runner.on_activate)
app.run(None)
最佳答案
我实际上查看了GTK“GestureClick”小部件的源代码,在代码中发现“释放”信号仅在单击事件结束时(gtk_gesture_click_end)发出。该事件与 GTK 手势小部件的“结束”信号相关。因此,作为测试,我修改了“self.release”函数以利用小部件继承的“end”事件,如下所示。
gesture.connect("end", self.release)
在打印“按下”后,它确实在终端上立即打印出“释放”一词,但它是作为单击事件的一部分执行的,并且不会等待鼠标按钮的实际释放。
您可以尝试我的小代码更改以查看效果。我不太愿意将此称为错误,因为此时我对 GTK 手势还不太有经验。不过,请测试一下。此时您可能只需要依赖点击事件。
其他发现。
简单来说,在回顾其他 GTK4 单击手势示例时,“按下”和“释放”手势都可以与其他小部件一起使用。显然,比例小部件有一些特殊之处。我修改了您的示例代码,将标签小部件替换为比例小部件。
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
class Main():
def on_activate(self, app):
win = Gtk.ApplicationWindow(application=app)
gesture = Gtk.GestureClick.new()
gesture.connect("pressed", self.press)
gesture.connect("released", self.release)
label = Gtk.Label(label="This is a label widget")
win.set_child(label)
win.set_default_size(400, 200)
label.add_controller(gesture)
win.present()
def press(self, *_):
print("pressed")
def release(self, *_):
print("released")
app = Gtk.Application(application_id='com.example.GtkApplication')
runner = Main()
app.connect('activate', runner.on_activate)
app.run(None)
以下是在标签小部件上单击并释放鼠标按钮的终端输出结果。
仅供引用,为了确认这个问题似乎与缩放小部件有关,我用 C 语言构建了一个类似的程序,测试缩放小部件与其他小部件。同样,秤小部件不会发出释放信号。至少缩放小部件的特性在不同语言中是一致的。所以看起来底线是缩放小部件不会发出释放信号。我希望额外的信息有帮助。
问候。
关于python-3.x - Gtk4 GestureClick 未发出释放信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72303475/