init kivy interface

This commit is contained in:
vincent 2018-08-25 19:14:49 +02:00
parent 62664cfca0
commit 6b8661da2d
2 changed files with 129 additions and 123 deletions

View File

@ -8,14 +8,21 @@ import re
import io import io
from PIL import ImageTk from PIL import ImageTk
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from tkinter import Label,Button,Frame,Tk,Entry,StringVar,LEFT,RIGHT,Scrollbar,VERTICAL,Canvas,Y,BOTH,NW from kivy.app import App
from kivy.app import ObjectProperty
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import Color,Rectangle
class Labbelink (Label): class Labbelink (Label):
def __init__(self,parent,text,link): def __init__(self,parent,text,link):
Label.__init__(self,parent,text=text,fg="blue",cursor="hand2") Label.__init__(self,text=text,fg="blue",cursor="hand2")
self.link=link self.link=link
self.bind("<Button-1>",self._openlink) self.bind("<Button-1>",self._openlink)
@ -26,55 +33,16 @@ class LabelImage(Label):
def __init__(self,parent,url): def __init__(self,parent,url):
raw_data = urllib.request.urlopen(url).read() raw_data = urllib.request.urlopen(url).read()
imagetoinsert=ImageTk.PhotoImage(file=io.BytesIO(raw_data)) imagetoinsert=Image(file=io.BytesIO(raw_data))
Label.__init__(self,parent,image=imagetoinsert) Label.__init__(self,image=imagetoinsert)
self.image = imagetoinsert self.image = imagetoinsert
class ScrollableCanvas(Frame):
def __init__(self, parent, *args, **kw):
Frame.__init__(self, parent, *args, **kw)
canvas=Canvas(self,width=300,height=300,scrollregion=(0,0,500,500))
vbar=Scrollbar(self,orient=VERTICAL)
vbar.pack(side=RIGHT, fill=Y)
vbar.config(command=canvas.yview)
canvas.config(width=200,height=200)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side=LEFT,expand=True,fill=BOTH)
# create a frame inside the canvas which will be scrolled with it
self.interior = interior = Frame(canvas)
interior_id = canvas.create_window(0, 0, window=interior, anchor=NW )
# track changes to the canvas and frame width and sync them,
# also updating the scrollbar
def _configure_interior(event):
# update the scrollbars to match the size of the inner frame
size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
canvas.config(scrollregion="0 0 %s %s" % size)
canvas.yview_moveto(1)
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the canvas's width to fit the inner frame
canvas.config(width=interior.winfo_reqwidth())
interior.bind('<Configure>', _configure_interior)
def _configure_canvas(event):
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the inner frame's width to fill the canvas
canvas.itemconfigure(interior_id, width=canvas.winfo_width())
canvas.bind('<Configure>', _configure_canvas)
def _MouseWhell(event):
canvas.yview_scroll(-1*(event.delta/120), "units")
self.bind_all("<MouseWheel>",_MouseWhell)
class emmisionGUI(BoxLayout):
class emmisionGUI(Frame):
def __init__(self,parent,**kwarg): def __init__(self,parent,**kwarg):
Frame.__init__(self,parent) BoxLayout.__init__(self,parent)
self.image=LabelImage(self,kwarg['img']) self.image=LabelImage(self,kwarg['img'])
self.image.pack() self.image.pack()
self.LabelTitle=Labbelink(self,("emmision ce soir: "+kwarg["title"]),kwarg['href']) self.LabelTitle=Labbelink(self,("emmision ce soir: "+kwarg["title"]),kwarg['href'])
@ -88,83 +56,98 @@ class emmisionGUI(Frame):
self.LabelSynopsys.pack() self.LabelSynopsys.pack()
class Interface: class RootWidget(BoxLayout):
txt_inpt = ObjectProperty(None)
class InterfaceApp(App):
def __init__(self,data): def __init__(self,data):
self.data = data App.__init__(self)
self.fenetre = Tk() self.data=data
self.fenetre.title("recherche de chaine") def build(self):
self.value = StringVar() return RootWidget()
self.label = Label(self.fenetre, text="entrer numero de chaine")
self.entree = Entry(self.fenetre, textvariable=self.value, width=30)
self.frame = Frame(self.fenetre)
self.resultframe = ScrollableCanvas(self.fenetre)
self.bouton_update_base = Button(self.fenetre, text="update la base de chaine", command=self.click_update)
self.bouton = Button(self.frame, text="OK", command=self.click)
self.reset = Button(self.frame, text="reset", command=self.click_reset)
self.label.pack()
self.entree.pack()
self.entree.focus_set()
self.resultframe.pack(expand=1,fill='both')
self.frame.pack()
self.bouton.pack(side=LEFT)
self.reset.pack(side=RIGHT)
self.bouton_update_base.pack()
self.fenetre.bind("<Key-Return>", self.enter)
self.fenetre.bind("<Key-Escape>", self.eventreset)
def enter(self,evt):
self.click()
def eventreset(self,evt):
self.click_reset()
def mainloop(self):
self.fenetre.mainloop()
def click(self):
print(self.value.get())
Arrayvalue=self.value.get().split(" ")
for value in Arrayvalue:
try: #
strlink=geturlprogrammetv(self.data.get_chaine(value)) #class Interface:
link= Labbelink(self.resultframe.interior,self.data.get_chaine(value),strlink) #
link.pack() # def __init__(self,data):
self.resultframe.update() # self.data = data
print(self.data.get_chaine(value)) # self.fenetre = Tk()
emision=parse_emmission(strlink) # self.fenetre.title("recherche de chaine")
if emision: # self.value = StringVar()
if emision == "can't find show": # self.label = Label(self.fenetre, text="entrer numero de chaine")
Label(self.resultframe.interior,text="impssible de parser cette chaine").pack() # self.entree = Entry(self.fenetre, textvariable=self.value, width=30)
else: # self.frame = Frame(self.fenetre)
emmisionGUI(self.resultframe.interior,**emision).pack() # self.resultframe = ScrollableCanvas(self.fenetre)
else: # self.bouton_update_base = Button(self.fenetre, text="update la base de chaine", command=self.click_update)
Label(self.resultframe.interior,text="pas de connection internet impossible de determiner l'émission du soir").pack() # self.bouton = Button(self.frame, text="OK", command=self.click)
# self.reset = Button(self.frame, text="reset", command=self.click_reset)
# self.label.pack()
except KeyError: # self.entree.pack()
print("numero de chaine inconnue") # self.entree.focus_set()
unknow=Label(self.resultframe.interior, text="numero de chaine inconnue") # self.resultframe.pack(expand=1,fill='both')
unknow.pack() # self.frame.pack()
# self.bouton.pack(side=LEFT)
self.value.set("") # self.reset.pack(side=RIGHT)
# self.bouton_update_base.pack()
def click_reset(self): # self.fenetre.bind("<Key-Return>", self.enter)
print("reset") # self.fenetre.bind("<Key-Escape>", self.eventreset)
for child in self.resultframe.interior.winfo_children(): #
child.destroy() #
# def enter(self,evt):
# self.click()
def click_update(self): #
self.data.parsechaine() # def eventreset(self,evt):
labelupdate = Label(self.resultframe.interior, text="update chaine done"+"\r") # self.click_reset()
labelupdate.pack() #
# def mainloop(self):
def _openlink(self,link): # self.fenetre.mainloop()
webbrowser.open_new(link) #
# def click(self):
# print(self.value.get())
# Arrayvalue=self.value.get().split(" ")
# for value in Arrayvalue:
#
#
# try:
# strlink=geturlprogrammetv(self.data.get_chaine(value))
# link= Labbelink(self.resultframe.interior,self.data.get_chaine(value),strlink)
# link.pack()
# self.resultframe.update()
# print(self.data.get_chaine(value))
# emision=parse_emmission(strlink)
# if emision:
# if emision == "can't find show":
# Label(self.resultframe.interior,text="impssible de parser cette chaine").pack()
# else:
# emmisionGUI(self.resultframe.interior,**emision).pack()
# else:
# Label(self.resultframe.interior,text="pas de connection internet impossible de determiner l'émission du soir").pack()
#
#
# except KeyError:
# print("numero de chaine inconnue")
# unknow=Label(self.resultframe.interior, text="numero de chaine inconnue")
# unknow.pack()
#
# self.value.set("")
#
# def click_reset(self):
# print("reset")
# for child in self.resultframe.interior.winfo_children():
# child.destroy()
#
#
# def click_update(self):
# self.data.parsechaine()
# labelupdate = Label(self.resultframe.interior, text="update chaine done"+"\r")
# labelupdate.pack()
#
# def _openlink(self,link):
# webbrowser.open_new(link)
class JSONfile: class JSONfile:
@ -293,4 +276,5 @@ if len(sys.argv) > 1:
else: else:
cli(arg,data.data) cli(arg,data.data)
else: else:
Interface(data).mainloop() interface=InterfaceApp(data)
interface.run()

22
interface.kv Normal file
View File

@ -0,0 +1,22 @@
<RootWidget>:
txt_inpt: txt_inpt
orientation:"vertical"
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
Label:
text:"entrer numéros de chaine"
color:0,0,0,1
TextInput:
id: txt_inpt
row:1
multiline:False
focus:True
Label:
text: txt_inpt.text
color:0,0,0,1