【问题标题】:How can I receive a corresponding percentage when progressbar is clicked python3 gtk3单击进度条时如何收到相应的百分比python3 gtk3
【发布时间】:2016-05-27 23:59:53
【问题描述】:

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

有人可以帮助我或至少给我一些指导,我该如何实现它?现在我正在使用百分比,因为它比使用时间要简单得多。

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

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

【问题讨论】:

    标签: python-3.x gtk3


    【解决方案1】:

    最简单的解决方案可能是切换到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()
    

    【讨论】:

      【解决方案2】:

      最后我想出了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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-21
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 2015-06-03
        • 2010-11-22
        相关资源
        最近更新 更多