如何在单击进度条时收到相应的百分比python3 gtk3

时间:2016-05-27 23:59:53

标签: python-3.x gtk3

我正在为python3和GTK3中的Kodi编写一个非常简单轻巧的遥控器。我已经能够添加随着播放进度而更新的进度条,但我希望能够点击进度条的特定部分并寻找相应的视频部分。

有人可以帮助我,或者至少给我一点方向如何实现它?现在我正在使用百分比,因为它比使用时间更简单。

我现在唯一需要的是当我点击进度条的1/3(显然在进度条的整个长度上)时,输出为0.33

我想我必须错过一些非常简单的东西,但我找不到它是什么。我找到了一个使用EventBox的例子,但它只通知了一个鼠标移动手势,并且无法给出具体的数字。

2 个答案:

答案 0 :(得分:0)

最简单的解决方案可能是切换到Gtk.Scale,因为它已经支持您需要的一切。在更改时打印它的简单比例看起来像这样(在python 2.7中):

class GtkWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Dialog Example")

        min_val = 0.0
        max_val = 100.0
        adjustment = Gtk.Adjustment.new(0.0, min_val, max_val, 1.0, 10.0, 10.0)
        scale = Gtk.Scale.new(Gtk.Orientation.HORIZONTAL, adjustment)
        scale.connect("value-changed", self.on_value_changed)
        self.add(scale)

    def on_value_changed(self, scale):
        print scale.get_value()

win = GtkWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

答案 1 :(得分:0)

最后,我想出了python3和GTK3的答案。

我在这里发布了整个代码:https://github.com/elpraga/kodi-cli 我将在此发布相关位:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
import subprocess

...

    self.progressbar = Gtk.ProgressBar(text="Kodi is not playing at the moment")
    self.progresseventbox = Gtk.EventBox()
    self.progressbar.set_show_text(True)

...

    grid.attach(self.youtube_entry, 0, 0, 4, 1)
    grid.attach_next_to(self.progresseventbox, self.youtube_entry, Gtk.PositionType.BOTTOM, 4, 1)
    self.progresseventbox.add(self.progressbar)

...

    self.progresseventbox.connect("button-press-event", self.on_mouse_click)

...

def on_mouse_click(self, widget, event):
    width = self.progresseventbox.get_allocated_width()
    percentage = event.x / width * 100
    percentage = str(percentage)
    output = (subprocess.check_output(["kodi-cli", "-g", percentage]))
    # Let's get some response from kodi-cli
    output = (subprocess.check_output(["kodi-cli", "-g"]))
    output = output.decode('ascii')
    # http://stackoverflow.com/questions/1798465/python-remove-last-3-characters-of-a-string
    self.output_text.set_text(output)

...

Screenshot of the clickable progress bar I used after all