2016-05-27 8 views
1

私はPython3とGTK3でKodi用の非常にシンプルで軽量なリモコンを書いています。私はすでに進行状況の進行とともに更新されるプログレスバーを追加することができましたが、プログレスバーの特定の部分をクリックしてビデオの対応する部分を探すことができるようにしたいと考えています。プログレスバーがクリックされたときに対応するパーセンテージを受け取る方法python3 gtk3

誰かが私を助けてくれますか、少なくとも私はそれを達成するにはどうすればよいでしょうか?今のところ、私はパーセンテージで作業しています。これは、時間をかけて作業するよりはるかに簡単です。

私は今のために必要な唯一の事私は私がすることがあると思い、私は(明らかに応じてプログレスバーの全長に)プログレスバー

の1/3をクリックすると、出力として0.33を得ることです非常に単純な何かを欠いているが、私はそれが何かを見つけることができません。 EventBoxを使用した例が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

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() 
関連する問題