init kivy interface

This commit is contained in:
vincent 2018-08-25 19:14:49 +02:00
parent f1dbacc033
commit 85c2f03bac
2 changed files with 129 additions and 123 deletions

View File

@ -8,14 +8,21 @@ import re
import io
from PIL import ImageTk
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):
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.bind("<Button-1>",self._openlink)
@ -26,55 +33,16 @@ class LabelImage(Label):
def __init__(self,parent,url):
raw_data = urllib.request.urlopen(url).read()
imagetoinsert=ImageTk.PhotoImage(file=io.BytesIO(raw_data))
Label.__init__(self,parent,image=imagetoinsert)
imagetoinsert=Image(file=io.BytesIO(raw_data))
Label.__init__(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(Frame):
class emmisionGUI(BoxLayout):
def __init__(self,parent,**kwarg):
Frame.__init__(self,parent)
BoxLayout.__init__(self,parent)
self.image=LabelImage(self,kwarg['img'])
self.image.pack()
self.LabelTitle=Labbelink(self,("emmision ce soir: "+kwarg["title"]),kwarg['href'])
@ -88,83 +56,98 @@ class emmisionGUI(Frame):
self.LabelSynopsys.pack()
class Interface:
class RootWidget(BoxLayout):
txt_inpt = ObjectProperty(None)
class InterfaceApp(App):
def __init__(self,data):
self.data = data
self.fenetre = Tk()
self.fenetre.title("recherche de chaine")
self.value = StringVar()
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)
App.__init__(self)
self.data=data
def build(self):
return RootWidget()
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))
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 Interface:
#
# def __init__(self,data):
# self.data = data
# self.fenetre = Tk()
# self.fenetre.title("recherche de chaine")
# self.value = StringVar()
# 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))
# 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:
@ -292,4 +275,5 @@ if len(sys.argv) > 1:
else:
cli(arg,data.data)
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