0
|
1 import Tkinter as tk
|
|
2 import xmlrpclib, socket, time
|
|
3
|
|
4 class MusicTime:
|
|
5 def __init__(self, server, port):
|
|
6 self.player = xmlrpclib.Server("http://%s:%d" % (server, port))
|
|
7 def get_music_time(self):
|
|
8 playtime = None
|
|
9 while not playtime:
|
|
10 try:
|
|
11 playtime = self.player.gettime()
|
|
12 except socket.error, e:
|
|
13 print "Server error %s, waiting" % e
|
|
14 time.sleep(2)
|
|
15 return playtime
|
|
16
|
|
17 class MusicTimeTk(tk.Frame, MusicTime):
|
|
18 def __init__(self, master, server, port):
|
|
19 tk.Frame.__init__(self)
|
|
20 MusicTime.__init__(self, server, port)
|
|
21 self.timevar = tk.DoubleVar()
|
|
22 self.timelabel = tk.Label(self, textvariable=self.timevar, bd=2,
|
|
23 relief='raised', width=10, padx=2, pady=2, anchor='w')
|
|
24 self.timelabel.pack(expand=1, fill='both')
|
|
25 def print_time(evt, *args):
|
|
26 self.update_time()
|
|
27 print self.timevar.get(), evt.keysym
|
|
28 self.timelabel.bind('<KeyPress>', print_time)
|
|
29 self.timelabel.bind('<1>', print_time)
|
|
30 self.timelabel.focus()
|
|
31 self.update_time()
|
|
32 def update_time(self):
|
|
33 self.timevar.set(self.get_music_time())
|
|
34 self.after(100, self.update_time)
|
|
35
|
|
36 if __name__ == "__main__":
|
|
37 from optik import OptionParser
|
|
38 parser = OptionParser()
|
|
39 parser.add_option("-s", "--server", default='dash')
|
|
40 parser.add_option("-p", "--port", default=8040, type='int')
|
|
41 options, args = parser.parse_args()
|
|
42
|
|
43 root = tk.Tk()
|
|
44 root.title("Time")
|
|
45 MusicTimeTk(root, options.server, options.port).pack(expand=1, fill='both')
|
|
46 try:
|
|
47 tk.mainloop()
|
|
48 except KeyboardInterrupt:
|
|
49 root.destroy()
|