python-3.x - Gtk4 GestureClick 未发出释放信号

标签 python-3.x linux user-interface gtk gtk4

当我将 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)

以下是在标签小部件上单击并释放鼠标按钮的终端输出结果。

Press and Release Label

仅供引用,为了确认这个问题似乎与缩放小部件有关,我用 C 语言构建了一个类似的程序,测试缩放小部件与其他小部件。同样,秤小部件不会发出释放信号。至少缩放小部件的特性在不同语言中是一致的。所以看起来底线是缩放小部件不会发出释放信号。我希望额外的信息有帮助。

问候。

关于python-3.x - Gtk4 GestureClick 未发出释放信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72303475/

相关文章:

c++ - 这个元素在 c++ Qt 中被称为什么?

python - 将 .jpg 转换为 .txt

linux - 路由会影响具有绑定(bind)源地址的套接字吗?

linux - 将 busybox 编译为 BFLT 可执行文件

linux - Bash 脚本 : For-Loop Over Newline. .. 语法解释?

user-interface - CloverETL/热情/全局环境基金

c++ - 关于学习 Xlib ("the Linux Petzold"的书籍/资源?)

python - 兼容性问题(python 2 与 python 3)

python-3.x - 值错误: cannot resize this array: it does not own its data

python - 值错误 : Input arrays should have the same number of samples as target arrays. 找到 166 个输入样本和 4 个目标样本