Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于媒体搜索的GTK滑块_Gtk - Fatal编程技术网

用于媒体搜索的GTK滑块

用于媒体搜索的GTK滑块,gtk,Gtk,我使用GtkHScale(一个滑块)在媒体播放器中执行搜索。我将小部件的“value_changed”信号连接到一个回调,以便用户可以查找。我还设置了一个计时器,它将每250ms更新一次小部件,以便它显示轨迹中的当前位置。不幸的是,无论用户是单击滑块还是计时器更新滑块,GTK都会触发“value_changed”信号。我尝试在“clicked”(单击)信号中进行搜索,并启动了回调,但它始终搜索到开头通过连接按钮按下事件和按钮释放事件信号,您可以跟踪用户是否正在移动滑块。当用户按下鼠标按钮时,您希

我使用GtkHScale(一个滑块)在媒体播放器中执行搜索。我将小部件的“value_changed”信号连接到一个回调,以便用户可以查找。我还设置了一个计时器,它将每250ms更新一次小部件,以便它显示轨迹中的当前位置。不幸的是,无论用户是单击滑块还是计时器更新滑块,GTK都会触发“value_changed”信号。我尝试在“clicked”(单击)信号中进行搜索,并启动了回调,但它始终搜索到开头

通过连接按钮按下事件和按钮释放事件信号,您可以跟踪用户是否正在移动滑块。当用户按下鼠标按钮时,您希望阻止来自播放机的更新,以便在用户尝试搜索时不会移动滑块。在按钮释放处理程序中,您可以取消阻止更新。

一种技术是围绕对gtk_range_set_value()的调用,使用g_信号处理程序_block/unblock[1]调用播放更新。这允许在不触发特定值更改处理程序的情况下更新滑块的值和UI

Python GTK+3示例显示的值仅在交互式清理时调用:

from gi.repository import Gtk, GLib

def on_value_changed(hscale):
    print('value-changed: %s' % hscale.get_value())

def on_timeout(hscale, handler_id):
    # Block value-changed handler during timed playback updates.
    with hscale.handler_block(handler_id):
        hscale.set_value(hscale.get_value() + 1)
    return True

hscale = Gtk.HScale()
hscale.set_range(0, 100)
handler_id = hscale.connect('value-changed', on_value_changed)

window = Gtk.Window()
window.set_size_request(500, 50)
window.add(hscale)
window.connect('destroy', Gtk.main_quit)
window.show_all()

GLib.timeout_add(100, on_timeout, hscale, handler_id)

Gtk.main()
[1]