![]() |
|---|
| © Karobben |
由於語法渲染問題而影響閱讀體驗, 請移步博客閱讀~
本文GitPage地址
CryptoWatch-Kivy 1.13Kivy 2.0.0Kivy-Garden 0.1.4kivy-garden.wordcloud 1.0.0kivymd 0.104.2.dev0
Quick Review
tree
.├── bin│ └── KarobbenTB-1.3-armeabi-v7a-debug.apk├── buildozer.spec├── favicon.ico├── font│ ├── ArtificialBox-WdD4.ttf| ...│ └── JingDianFanJiaoZhuan-1.ttf├── Layout│ ├── filechooser.kv│ ├── menu.kv│ ├── Navigation_Draw.kv│ ├── Navigation_Tabs.kv│ └── Seq.kv├── lib│ └── bio_seq.py├── libWidget│ ├── filechooser.py│ ├── main.py│ ├── menu.py│ └── Seq.py├── logo.png└── main.py
Function for Close Tab
Added to widget
mkdir configtouch config/home.jsontouch config/Navi.json
Navi.json
{"Seq":{"icon":"篆体","title":"Sequencs Tools","font":"font/HuaKangXinZhuanTi-1"},"editor":{"icon":"Text Editor","title":"editor", "font":"font/FangZhengHeiTiFanTi-1"}}
+ self.List = json.load(open('config/Navi.json'))+ L = [i for i in self.List.keys()]+ for x in L:+ print(x)+ text = f"[font={self.List[x]['font']}]{self.List[x]['icon']}[/font]"+ X = MDRectangleFlatButton(text =text)+ #X.font = self.List[x]['font']+ X.on_release = lambda Dic = x:self.add_tag(Dic)+ self.Widget_navi.ids.nav_button.add_widget(X)#from libWidget.Seq import FunctionWidget as tmp+ Home_dic = json.load(open('config/home.json'))+ for i in list(Home_dic.keys())[::-1]:+ def HomeTabUpdate(self, Dic):+ if Dic != None:+ List = [icon.text.split("]")[0].replace("[ref=","") for icon in self.Widget_tabs.ids.tabs.get_tab_list()]+[self.List[Dic]['icon']]+ List.remove("")+ else:+ List = [icon.text.split("]")[0].replace("[ref=","") for icon in self.Widget_tabs.ids.tabs.get_tab_list()]+ List = list(set(List))+ Result = []+ for icon in List:+ for Key in self.List.keys():+ if self.List[Key]['icon']==icon:+ Result += [Key]+ Home_dic = {x:self.List[x] for x in Result}+ with open("config/home.json",'w') as F:+ F.write(json.dumps(Home_dic))def add_tag(self, Dic):...+ self.HomeTabUpdate(Dic)def on_ref_press(self,instance_tabs,instance_tab_label,instance_tab,instance_tab_bar,instance_carousel,):+ self.HomeTabUpdate(Dic=None)
from kivy.uix.screenmanager import Screenfrom kivymd.uix.button import MDRectangleFlatButtonfrom kivy.lang import Builderfrom kivy.uix.floatlayout import FloatLayoutfrom kivymd.uix.tab import MDTabsBasefrom kivy.core.window import WindowBasefrom kivymd.icon_definitions import md_iconsfrom kivymd.app import MDAppfrom libWidget.filechooser import ConfirmPopupimport jsonWindowBase.softinput_mode = "below_target"# Function libsdef OPEN(file):return open(file).read()class Tab(FloatLayout, MDTabsBase):'''Class implementing content for a tab.'''class MainApp(MDApp):ConfirmPopup = ConfirmPopup()#Editor = Editor()PATH = "."def change_text(self, Files):#self.the_time.text = str(Files)self.Button_test.text = Files[0]print("main screen", str(Files))def build(self):screen = Screen()screen.change_text = self.change_text# loading Navigation (left)self.Widget_navi = Builder.load_string(OPEN("Layout/Navigation_Draw.kv"))# loading navigation tagsself.Widget_tabs = Builder.load_string(OPEN("Layout/Navigation_Tabs.kv"))#self.Widget_tabs.ids.tabs.on_ref_press = self.on_ref_press(*args)# loading The Function pages# Loading Sequencs function pagescreen.add_widget(self.Widget_tabs)screen.add_widget(self.Widget_navi)return screen# Functions for Navigation Tadef on_start(self):from lib.bio_seq import Bio as FunBioSeqFun = FunBioSeq()print(Fun.List())def PP():print(Function_page.ids.seq_input.text)Function_page.ids.seq_result.text = Function_page.ids.seq_input.text.upper()Fun = FunBioSeq()self.List = json.load(open('config/Navi.json'))'''Navigation test'''Num = 0L = [i for i in self.List.keys()]for x in L:print(x)text = f"[font={self.List[x]['font']}]{self.List[x]['icon']}[/font]"X = MDRectangleFlatButton(text =text)#X.font = self.List[x]['font']X.on_release = lambda Dic = x:self.add_tag(Dic)self.Widget_navi.ids.nav_button.add_widget(X)'''locals()["Btn_".format(self.List[i]['icon'])] = MDRectangleFlatButton(text=self.List[i]['icon'],font_name = self.List[i]['font'],on_release =lambda x = i:self.add_tag(i))self.Widget_navi.ids.nav_button.add_widget(locals()["Btn_".format(self.List[i]['icon'])])'''#from libWidget.Seq import FunctionWidget as tmpHome_dic = json.load(open('config/home.json'))for i in list(Home_dic.keys())[::-1]:tmp_tab = Tab(text=f"[ref={self.List[i]['icon']}][color=#fa937f][font=font/heydings-icons-1]{'X'}[/font][/color][/ref] [font={self.List[i]['font']}]{self.List[i]['icon']}[/font]")Module = __import__('libWidget.'+i, globals(), locals(), [], 0)Fun = eval("Module."+i+".FunctionWidget()")screen_tmp = Screen()screen_tmp.name = iscreen_tmp.add_widget(Fun.main())tmp_tab.add_widget(screen_tmp)self.Widget_tabs.ids.tabs.add_widget(tmp_tab)def add_tag(self, Dic):print(Dic)name_tab = self.List[Dic]['icon']Tag_title = f"[ref={name_tab}][font=font/heydings-icons-1][color=#fa937f]{'X'}[/color][/font][/ref][font=./font/JingDianFanJiaoZhuan-1][font={self.List[Dic]['font']}]{name_tab}[/font]"tmp_tab =Tab( text = Tag_title)Module = __import__('libWidget.'+Dic, globals(), locals(), [], 0)Fun = eval("Module."+Dic+".FunctionWidget()")screen_tmp = Screen()screen_tmp.name = "Test"screen_tmp.add_widget(Fun.main())tmp_tab.add_widget(screen_tmp)self.Widget_tabs.ids.tabs.add_widget(tmp_tab)self.Widget_tabs.ids.tabs.switch_tab(Tag_title)self.Widget_navi.ids.nav_drawer.set_state("close")# Update Tages in First pageself.HomeTabUpdate(Dic)def HomeTabUpdate(self, Dic):if Dic != None:List = [icon.text.split("]")[0].replace("[ref=","") for icon in self.Widget_tabs.ids.tabs.get_tab_list()]+[self.List[Dic]['icon']]List.remove("")else:List = [icon.text.split("]")[0].replace("[ref=","") for icon in self.Widget_tabs.ids.tabs.get_tab_list()]List = list(set(List))Result = []for icon in List:for Key in self.List.keys():if self.List[Key]['icon']==icon:Result += [Key]Home_dic = {x:self.List[x] for x in Result}with open("config/home.json",'w') as F:F.write(json.dumps(Home_dic))# Functions for Navigation Tab Switchdef on_tab_switch(self, instance_tabs, instance_tab, instance_tab_label, tab_text):'''Called when switching tabs.:type instance_tabs: <kivymd.uix.tab.MDTabs object>;:param instance_tab: <__main__.Tab object>;:param instance_tab_label: <kivymd.uix.tab.MDTabsLabel object>;:param tab_text: text or name icon of tab;'''instance_tab.ids.label.text = tab_textdef on_ref_press(self,instance_tabs,instance_tab_label,instance_tab,instance_tab_bar,instance_carousel,):'''The method will be called when the ``on_ref_press`` eventoccurs when you, for example, use markup text for tabs.:param instance_tabs: <kivymd.uix.tab.MDTabs object>:param instance_tab_label: <kivymd.uix.tab.MDTabsLabel object>:param instance_tab: <__main__.Tab object>:param instance_tab_bar: <kivymd.uix.tab.MDTabsBar object>:param instance_carousel: <kivymd.uix.tab.MDTabsCarousel object>'''# Removes a tab by clicking on the close icon on the left.for instance_tab in instance_carousel.slides:if instance_tab.text == instance_tab_label.text:instance_tabs.remove_widget(instance_tab_label)breakself.HomeTabUpdate(Dic=None)MainApp().run()
We can also add a json for initializing the home page so we can reload the tabs we keeped in last time.
home.json
{"Font":{"icon":"篆体","title":"Fonttoo Tools","font":"font/HuaKangXinZhuanTi-1"}}
Enjoy~
由於語法渲染問題而影響閱讀體驗, 請移步博客閱讀~
本文GitPage地址
GitHub: Karobben
Blog:Karobben
BiliBili:史上最不正經的生物狗

