def generate_GUI(menus): app_gui = TabbedPanel() app_gui.clear_tabs() app_gui.orientation = "vertical" app_gui.do_default_tab = False app_gui.tab_width = 150 for menu_key, sub_menu in menus.items(): main_menu = TabbedPanelHeader(text=menu_key) scroll_pane = ScrollView() scroll_pane.scroll_type = ['bars', 'content'] scroll_pane.bar_pos_y = 'left' scroll_pane.bar_width = 6 scroll_pane.do_scroll_y = True scroll_pane.do_scroll_x = False scroll_pane.scroll_y = 1 menu_grid = GridLayout(cols=1, spacing=2, size_hint_y=None) menu_grid.orientation = "vertical" menu_grid.padding = 10 menu_grid.row_default_height = 1 menu_height = 0 print(">>>" + menu_key) for sub_menu_key, items in sub_menu.items(): menu_grid.add_widget( Label(text=" " + sub_menu_key, size_hint=(None, None), font_size=14, halign="left", valign="middle")) print("\t" + sub_menu_key) for option in items: if "Name" in option: print("\t\t" + option["Name"]) btn = Button(text=option["Name"], size_hint=(0.1, None), background_color=(0.2, 1, 1, 0.8)) btn.bind(on_press=lambda x: webbrowser.open(option["URL"])) else: print("\t\t" + "<EMPTY>") btn = Button(text="<EMPTY>", size_hint=(0.1, None), background_color=(0.2, 1, 1, 0.8)) btn.bind(on_press=lambda x: webbrowser.open(option["URL"])) btn.width = 250 btn.height = 50 menu_grid.add_widget(btn) menu_height += 80 menu_height += 51 menu_grid.height = menu_height scroll_pane.add_widget(menu_grid) main_menu.content = scroll_pane main_menu.orientation = "vertical" # Adding headers to main layout app_gui.add_widget(main_menu) return app_gui
def format_airtable_data(header): # Gridlayout to host menu options and URL buttons formated_data = GridLayout(cols=1, spacing=10, size_hint_y=None) formated_data.orientation = "vertical" formated_data.padding = 10 formated_data.row_default_height = 1 rows = 0 # needed to track the number of items inside the gridlayout # Converting airtable data into usable Kivy GUI labels and Buttons for item in tab_menus: if item["id"] == header: # Creating the Labels if str(item["menu"]) != "N/A": formated_data.add_widget(Label(text=item["menu"],size_hint=(.7,.5))) # Creating a menu option as a Label rows += 1 else: # For menu options that have yet to be given a name formated_data.add_widget(Label(text="Menu name pending",size_hint=(.7,.5))) rows += 1 # Creating the URL Buttons that belong bellow each Label for link in item["link"]: url_name = str(link).split('!')[0] url = str(link).split('!')[1] # Creaing the Button without refrences if url_name != "N/A": button = Button(text=url_name, size_hint=(None, None)) else: # For URL links with no assigned names button = Button(text="Unknown Link", size_hint=(None, None)) button.width = 250 button.height = 50 # Assign each Button a refrence to a created function with their respective URL links # This is equivalent to Kivy script: on_press: root.open_link('www.your_url_link.com') button.bind(on_press=lambda x:Resonance().open_link(url)) formated_data.add_widget(button) rows += 1 formated_data.add_widget(Label()) rows += 1 # Formating the gridlayout to fit the sum of items created # Necessary to indicate to Scrollview if scroll is needed # if grid size > window size allow scroll formated_data.height = rows * 50 return formated_data
def __init__(self, parent, titleheader="Message", message="", options={"OK": ""}, size_hint=(.8,.3), font_size=None, size=None, modal=0, edit_add = False, edit_default_text=""): #def build(self, parent, titleheader="Message", message="", options={"OK": ""}, size_hint=(.8,.2), size=(None, None)): def popup_callback(instance): self.retvalue = instance.text self.popup.dismiss() self.parent = parent self.retvalue = None self.titleheader = titleheader self.message = message self.options = options self.font_size=font_size self.edit_add=edit_add self.edit_default_text=edit_default_text if size: self.size = size else: self.size=(0,0) if size_hint: self.size_hint=size_hint #box = GridLayout(orientation='vertical', cols=1) box = GridLayout(cols=1) box.orientation='vertical' #self.add_widget(box) #box.add_widget(Label(text=self.message, font_size=self.font_size)) box.add_widget(Label(text=self.message)) if self.edit_add: self.edit=TextInput(text=self.edit_default_text) box.add_widget(self.edit) b_list = [] buttonbox = BoxLayout(orientation='horizontal',size_hint=(1, None),height=32) box.add_widget(buttonbox) for b in self.options: b_list.append(Button(text=b, on_press=popup_callback)) #b_list[-1].bind(on_press=self.popup_callback) buttonbox.add_widget(b_list[-1]) if modal: #Допилить self.popup = ModalView() self.popup.title=titleheader self.popup.size_hint=self.size_hint self.popup.size=self.size self.popup.add_widget(box) else: self.popup = Popup(title=titleheader, content=box, size_hint=self.size_hint, size=self.size) #self.popup = Popup(title=titleheader, content=box, size_hint=self.size_hint) self.popup.open() self.popup.bind(on_dismiss=self.OnClose)
from kivy.uix.scrollview import ScrollView #efectos from kivy.uix.effectwidget import EffectWidget from kivy.uix.effectwidget import HorizontalBlurEffect from kivy.uix.effectwidget import VerticalBlurEffect #detector de eventos - se usara para crear efectos personalizados kivy.require('1.9.1') Window.clearcolor = (0, 0.2, 0.4,1) #home home = GridLayout(cols=3,spacing=[10,10],padding=[10,10]) home.orientation = 'vertical' #libreria libreria = GridLayout(cols=2,spacing=[10,10],padding=[10,10]) libreria.orientation = 'vertical' #widget contenedor raiz principal=PageLayout(cols=2,spacing=[10,10],padding=[10,10]) principal.orientation = 'vertical' #barra lateral barra_lateral=GridLayout(cols=2) #estante class tabbed_panel(TabbedPanel): pass
def __init__(self, parent, titleheader="Message", message="", options={"OK": ""}, size_hint=(.8, .3), font_size=None, size=None, modal=0, edit_add=False, edit_default_text=""): #def build(self, parent, titleheader="Message", message="", options={"OK": ""}, size_hint=(.8,.2), size=(None, None)): def popup_callback(instance): self.retvalue = instance.text self.popup.dismiss() self.parent = parent self.retvalue = None self.titleheader = titleheader self.message = message self.options = options self.font_size = font_size self.edit_add = edit_add self.edit_default_text = edit_default_text if size: self.size = size else: self.size = (0, 0) if size_hint: self.size_hint = size_hint #box = GridLayout(orientation='vertical', cols=1) box = GridLayout(cols=1) box.orientation = 'vertical' #self.add_widget(box) #box.add_widget(Label(text=self.message, font_size=self.font_size)) box.add_widget(Label(text=self.message)) if self.edit_add: self.edit = TextInput(text=self.edit_default_text) box.add_widget(self.edit) b_list = [] buttonbox = BoxLayout(orientation='horizontal', size_hint=(1, None), height=32) box.add_widget(buttonbox) for b in self.options: b_list.append(Button(text=b, on_press=popup_callback)) #b_list[-1].bind(on_press=self.popup_callback) buttonbox.add_widget(b_list[-1]) if modal: #Допилить self.popup = ModalView() self.popup.title = titleheader self.popup.size_hint = self.size_hint self.popup.size = self.size self.popup.add_widget(box) else: self.popup = Popup(title=titleheader, content=box, size_hint=self.size_hint, size=self.size) #self.popup = Popup(title=titleheader, content=box, size_hint=self.size_hint) self.popup.open() self.popup.bind(on_dismiss=self.OnClose)