def on_enter(self, *args): store = JsonStore('config.json') id_topic = self.ids.id_topic.text url = domain + '/app/detail/' + id_topic r = requests.get(url) try: r.raise_for_status() data = r.json() # get some random questions from JSON for key, entry in store.find(active_questions=True): count_questions = store.get(key).get('number') try: questions = random.sample(data, count_questions) except ValueError as err: questions = data TalkingScreen.questions = questions # pass Objects to TalkingScreen class i = 1 for x in questions: q = str(i) + '. ' + x.get('name') + ' ?' label = MDLabel(text=q) self.ids.box.add_widget(label) i += 1 btn = MDRaisedButton(text='Start', pos_hint={'center_x': 0.5}) self.ids.my_btn.add_widget(btn) btn.bind(on_press=self.go_to_talking) except requests.exceptions.HTTPError as err: print('Http error: ', err)
def __init__(self, **kwargs): self.register_event_type('on_release') kw = kwargs.copy() kw.pop('buttons', None) super(SettingButtons, self).__init__(**kw) for button in kwargs['buttons']: btn_widget = MDRaisedButton(text=button['title']) btn_widget.ID = button['id'] self.add_widget(btn_widget) btn_widget.bind(on_release=self.on_button_pressed)
def action(self, button): item = [] if type(button.parent.parent.parent).__name__ == 'History': for data in self.left_check_list: if data.state == 'down': item.append(data.parent.parent) else: item.append(button.parent.parent.parent) item_data = str(item[0].text + ' ' + item[0].secondary_text) if button.icon == 'content-copy': Clipboard.copy(item_data) elif button.icon == 'history': self.main.pages.pages_list[ current_page[0]].entry.text = item_data.split()[0] self.parent.dismiss() elif button.icon == 'qrcode': image = Image(source="") imgIO = io.BytesIO() qrcode.make(item_data).save(imgIO, ext='png') imgIO.seek(0) imgData = io.BytesIO(imgIO.read()) image.texture = CoreImage(imgData, ext='png').texture image.reload() dialog = ModalView(size_hint=(None, None), size=image.texture.size) dialog.add_widget(image) dialog.open() elif button.icon in ['delete', 'delete-sweep']: dialog_yes = MDFlatButton(text="yes") dialog_no = MDRaisedButton(text="no") dialog = MDDialog(text="Delete {} item{}?".format( len(item), '' if len(item) == 1 else 's'), buttons=[dialog_no, dialog_yes]) with open('history.json', 'r') as file: data = json.load(file) for item_ in item: data.pop(item_.time) dialog_no.bind(on_release=dialog.dismiss) dialog_yes.bind(on_release=dialog.dismiss) dialog_yes.bind(on_release=lambda button: json.dump( data, open('history.json', 'w'), indent=4)) dialog_yes.bind(on_release=self.item_check) dialog.bind(on_dismiss=self.refresh) dialog.open()
def show_popup(title, message): """ Function to display popup messages. """ layout = MDGridLayout(cols=1, padding=10, spacing=10) popup_label = MDLabel(text=message, font_size=20, bold=True, pos_hint={"center_x": .5, "center_y": .5}, theme_text_color="Custom", text_color=[1, 1, 1, 1], halign="center") popup_button = MDRaisedButton(text="OK", size_hint=(1, None), height=50, bold=True, font_size=20, pos_hint={"center_x": .5, "center_y": .5}, md_bg_color=[.06, .47, .47, 1]) layout.add_widget(popup_label) layout.add_widget(popup_button) popup = Popup(title=title, content=layout, size_hint=(None, None), size=(350, 350), auto_dismiss=False) popup.open() popup_button.bind(on_press=popup.dismiss)
def delete(self, app, text_color): """ code for deleting from database goes here """ conn = self.connect_database(self.db_file) res = self.delete_from_database(self.table_name, conn, self.condition) conn.close() if res: if self.id_ == "fee": if self.delete_table(self.db_file, self.table_name + "_" + self.data["sem"]): self.success = True res_text = "Successfully deleted!" if self.callback is not None: self.callback() ##userlog dnt = strftime("%d-%m-%Y %H:%M:%S") uname = self.data["uname"] activity = activities["delete_fee"].format( self.data["name"], self.data["sem"]) create_log(dnt, uname, activity) else: res_text = "Error in deletion!" else: self.success = True res_text = "Successfully deleted!" if self.callback is not None: self.callback() else: res_text = "Error in deletion!" self.ids.container.clear_widgets() layout = GridLayout(cols=1) self.ids.container.add_widget(layout) layout.add_widget( Label(text=res_text, font_size=self.height / 25 + self.width / 25)) anc_layout = AnchorLayout() layout.add_widget(anc_layout) raised = MDRaisedButton() raised.text = "Ok" raised.bind(on_release=self.dismiss) raised.md_bg_color = app.theme_cls.accent_color raised.text_color = text_color raised.elevation_normal = 10 anc_layout.add_widget(raised)
def show_dialog(self): bt1 = MDFlatButton(text="CANCEL") bt2 = MDRaisedButton(text="OK") bt1.bind(on_release=self.close) bt2.bind(on_release=self.test) self.dialog = MDDialog( text="Are you sure?", size_hint=[.7, .7], buttons=[ bt1, bt2, ], ) self.dialog.open()
def update_settings(self, key, value): self.settings[key] = value self.write_to_config() if key == constants.CONFIG_ENABLE_DARK_MODE_KEY: exit_button = MDRaisedButton(text="Exit App") exit_button.bind(on_press=close_app) restart_popup = MDDialog( title="To update changes, you must restart app.", size_hint=(0.75, 0.75), buttons=[exit_button], ) restart_popup.open()
class LoginScreen(MDScreen): def request(self, *args): email = self.input_email.text senha = self.input_senha.text def on_success(req, res): print(str(res)) def on_error(*args): print(str(args)) def on_redirect(*args): print(f'redirect: {str(args)}') self.req = UrlRequest("http://127.0.0.1:5000/", on_success=on_success, on_error=on_error, verify=False, on_redirect=on_redirect, req_body=dumps({ 'email': email, 'senha': senha }), req_headers={'Content-Type': 'application/json'}) def __init__(self, **kwargs): super(LoginScreen, self).__init__(**kwargs) self.card = MDCard() self.card.text = "Valida" self.box = BoxLayout() self.box.orientation = 'vertical' self.card.add_widget(self.box) self.button_login = MDRaisedButton(text="Login") self.input_senha = MDTextField(password=True) self.button_login.bind(on_press=self.request) self.card.padding = "20dp" self.input_email = MDTextField() self.input_email.hint_text = "E-mail" self.input_senha.hint_text = "Senha" self.box.add_widget(self.input_email) self.box.add_widget(self.input_senha) self.box.add_widget(self.button_login) self.add_widget(self.card)
class AlarmDismissPopup: """ Creates a MDDialog to dismiss the alarm and holds logic to show dialog, dismiss dialog and shut off alarm. """ def __init__(self, audio_player, config_handler): """ Creates an AlarmDismissPopup """ self.popup_layout = MDGridLayout(cols=1, padding=10) self.dismiss_button = MDRaisedButton(text="Dismiss") self.dismiss_button.bind(on_press=self.dismiss) dialog_text = "[color=000000]Dismiss Alarm[/color]" if config_handler.get_setting(CONFIG_ENABLE_DARK_MODE_KEY): "[color=ffffff]Dismiss Alarm[/color]" self.alarm_popup = MDDialog( title=dialog_text, size_hint=(0.75, 0.75), buttons=[self.dismiss_button], ) self.alarm_popup.on_touch_up(self.dismiss) self.is_open = False self.audio_player = audio_player def dismiss(self, *args): """ Dismisses the alarm popup and silences the alarm. :param args: Args sent by Kivy :return: None """ self.alarm_popup.dismiss() self.is_open = False self.audio_player.stop_alarm() def open(self): """ Opens the alarm dismissal popup :return: None """ self.alarm_popup.open() self.is_open = True
class TESTSCREEN(BoxLayout): def __init__(self, master, **kwargs): super().__init__(**kwargs) self.master = master icons = iter([ "../manga_nelo_icon.png", "../rawdevart_logo.png", "../kissmanga_logo.png", "../manga_nelo_icon.png" ]) menu_items = [{ "right_content_cls": RightContentCls(site), "icon": next(icons), "text": site } for site in ["manganelo", "rawart", "kissmanga", "idk"]] self.btn = MDRaisedButton(text="press me", pos_hint={ "center_x": .5, "center_y": .5 }) self.btn.bind(on_press=lambda x: self.menu.open()) self.menu = MDDropdownMenu(caller=self.btn, items=menu_items, width_mult=4) self.menu.bind(on_release=self.menu_callback) self.add_widget(self.btn) # Had to install dev version for callback to work def menu_callback(self, instance_menu, instance_menu_item): #print(instance_menu, instance_menu_item.text) for i in instance_menu_item.children: for j in i.children: for k in j.children: print(k, type(k)) if isinstance(k, MangaCheckBox): if not k.active: k.active = True toast( f"Manga will be searched on the site: {instance_menu_item.text}" ) else: k.active = False
def on_enter(self, *args): dbs = db.child(self.temp_email).child("data").get() grid = self.ids['grid_banner'] grid.clear_widgets() loading = self.ids['loading'] try: for self.i in dbs.each(): # ~~~~~~~ Banner ~~~~~~~~ card = MDCard(size_hint=(.9, .5)) layout = FloatLayout(pos_hint={'center_x': .5, 'center_y': .5}) card.add_widget(layout) # ~~~~~~~ ID Data ~~~~~~~~ ids = self.i.val()['ids'] dataid = MDRaisedButton(text=f'{ids}', pos_hint={ 'center_x': .28, 'top': 1 }) layout.add_widget(dataid) # ~~~~~~~ Nama Data ~~~~~~~~ nama = self.i.val()['nama'] datanama = MDLabel(text=nama, font_style='H6', halign='left', pos_hint={ 'center_x': .55, 'center_y': .8 }) layout.add_widget(datanama) # ~~~~~~~ Keterangan Data ~~~~~~~~ keterangan = self.i.val()['keterangan'] dataket = MDLabel(text=keterangan, font_style='Body1', halign='left', size_hint=(.8, .3), pos_hint={ 'center_x': .47, 'center_y': .5 }) bgket = MDRectangleFlatButton(size_hint=(.9, .45), pos_hint={ 'center_x': .5, 'top': .7 }, disabled=True) layout.add_widget(bgket) layout.add_widget(dataket) # ~~~~~~~ Keluar atau Masuk ~~~~~~~~ io = self.i.val()['io'] dataio = MDLabel(text=io, font_style='Button', halign='right', pos_hint={ 'center_x': .45, 'top': .65 }) layout.add_widget(dataio) # ~~~~~~~ Jenis Data ~~~~~~~~ jenis = self.i.val()['jenis'] datajenis = MDLabel(text=jenis, font_style='Button', halign='left', pos_hint={ 'center_x': .55, 'top': .65 }) layout.add_widget(datajenis) # ~~~~~~~ tgl Data ~~~~~~~~ tgl = self.i.val()['tgl'] datatgl = MDLabel(text=tgl, font_style='Button', halign='right', pos_hint={ 'center_x': .45, 'center_y': .8 }) layout.add_widget(datatgl) # ~~~~~~~ Jumlah Uang ~~~~~~~~ jumlah = self.i.val()['jumlah'] matauang = self.i.val()['mata_uang'] datajumlah = MDLabel(text=matauang + ' ' + jumlah + '', font_style='Button', halign='right', pos_hint={ 'center_x': .45, 'top': .55 }) layout.add_widget(datajumlah) # ~~~~~~~ Button Delete ~~~~~~~~ hapus = Hapus(id=f'{ids}', text='Hapus', on_release=self.delete) clear = MDRaisedButton(text='Tutup') delete_dialog = MDDialog(title='Apakah Anda Yakin ?', size_hint=(0.95, 1), buttons=[hapus, clear]) hapus.bind(on_release=delete_dialog.dismiss) delete = MDIconButton(icon='trash-can', pos_hint={ 'center_x': .9, 'top': 1 }, on_release=delete_dialog.open) clear.bind(on_release=delete_dialog.dismiss) layout.add_widget(delete) # ~~~~~~~ Button Delete ~~~~~~~~ # edit_menu = print('Teredit') edit = Edit(id=f'{ids}', icon='pencil', pos_hint={ 'center_x': .8, 'top': 1 }, on_release=self.edited) layout.add_widget(edit) grid.add_widget(card) loading.active = False except: Snackbar(text="Data Kosong").show() loading.active = False
class Test(MDGridLayout, MDApp, Widget): '''這是螢幕主畫面(不包含一開始進去tutorial,tutorial在650多行那邊的on_start()''' '''這邊到300行出頭是一開始進去後會難到的配置,300多行後會是按完Run之後會秀出來的畫面''' progress_bar = ObjectProperty() def __init__(self, **kwargs): super(Test, self).__init__(**kwargs) self.click = 0 # ---以下定義點擊前三名按鈕時的次數--- self.add1 = 0 self.add1_shop_list = [] self.add1_temp_list = [] self.add1_rent_list = [] self.add1_bound = [] self.bound1 = GeoJsonMapLayer() self.add2 = 0 self.add2_shop_list = [] self.add2_temp_list = [] self.add2_rent_list = [] self.add2_bound = [] self.bound2 = GeoJsonMapLayer() self.add3 = 0 self.add3_shop_list = [] self.add3_temp_list = [] self.add3_rent_list = [] self.add3_bound = [] self.bound3 = GeoJsonMapLayer() # from geopy.geocoders import Nominatim # self.geolocator = Nominatim(user_agent="Brian_map") # self.wid = Widget() self.progress_bar = MDProgressBar() self.popup = MDDialog(title='數據加載中,請稍後!', #content = self.progress_bar ) self.popup.auto_dismiss = False self.popup.add_widget(self.progress_bar) self.popup.children[1].size_hint = [1, 1] self.popup.children[1].children[5].font_size = 40 self.popup.children[1].children[5].font_name = 'msjhbd.ttc' self.popup.size_hint = [0.5, 0.5] self.popup.background_color = [0.5, 0.5, 0.5, 0.75] self.progress_bar.value = 1 self.popup.bind(on_open=self.puopen) # 主畫面切成左右兩欄 self.cols = 3 # 左欄是一個Gridlayout,有四列 self.left = MDGridLayout(rows=6, size_hint=[0.4, 1], spacing=[0, 3]) # 創建地圖 self.map = FarmersMapView() # 左欄最上方要來做店租範圍 self.left.one = MDGridLayout(size=[590, 657], rows=2, size_hint=[1, 0.2], md_bg_color=[0.39, 0.4, 0.72, 1], padding=[35, -20, 35, -20], spacing=[0, -30]) # 把標籤裝進去最上層 self.left.one.add_widget( Label(text='選擇月租範圍', font_size='20sp', font_name='msjhbd.ttc', size_hint_y=0.18)) # 新增一層容器準備裝三個東西 self.left.one.box = BoxLayout(spacing=8, size_hint_y=0.15) # 盒子裝進一個下限input、一上限input、一個'-'tag self.lower_bound = MDTextFieldRect(x=275, hint_text="$下限", font_name='msjhbd.ttc', pos_hint={'y': 0.45}, size_hint=[1.5, 0.5], use_bubble=True, use_handles=True) self.upper_bound = MDTextFieldRect(hint_text="$上限", font_name='msjhbd.ttc', pos_hint={'y': 0.45}, center_x=275.76, center_y=508.20, size_hint=[1.5, 0.5], use_bubble=True, use_handles=True) self.dash_sign = MDFlatButton(text='-', font_size=30, size_hint=[1, 0.49], pos_hint={'y': 0.45}) self.dash_sign.md_bg_color = [1, 1, 1, 1] self.left.one.box.add_widget(self.lower_bound) self.left.one.box.add_widget(self.dash_sign) self.left.one.box.add_widget(self.upper_bound) # 盒子裝回上層 self.left.one.add_widget(self.left.one.box) # 新增行政區選單 self.left.six = MDGridLayout(size=[590, 657], rows=2, size_hint=[1, 0.25], md_bg_color=[0.39, 0.4, 0.72, 1], padding=[35, -5, 35, 5], spacing=[0, -10]) self.left.six.add_widget( Label(text='行政區選擇', font_size='20sp', font_name='msjhbd.ttc', height=32, size_hint=[1, 0.1])) self.left.six.box = BoxLayout(size_hint_y=0.15, center_y=390) from kivy.uix.spinner import Spinner district = [ "中區", "東區", "西區", "南區", "北區", "西屯區", "南屯區", "北屯區", "豐原區", "大里區", "太平區", "清水區", "沙鹿區", "大甲區", "東勢區", "梧棲區", "烏日區", "神岡區", "大肚區", "大雅區", "后里區", "霧峰區", "潭子區", "龍井區", "外埔區", "和平區", "石岡區", "大安區", "新社區" ] self.spinner = Spinner( text='行政區', values=[n for n in district], size_hint=(None, None), size=(95, 44), #pos_hint = {'right':0.2}, font_name='msjhbd.ttc', background_color=[1, 0, 0, 1]) self.spinner.option_cls.font_name = 'msjhbd.ttc' self.spinner.option_cls.background_color = [1, 0, 0, 1] #self.spinner.values[0].font_name = 'msjhbd.ttc' self.spinner.dropdown_cls.max_height = self.spinner.height * 7 + 7 * 4 #self.spinner.center_x = 160 #self.left.six.box.add_widget(BoxLayout(size_hint_y=0.5, size_hint_x=0.5, width=100)) self.left.six.box.add_widget( MDGridLayout(md_bg_color=[0.39, 0.4, 0.72, 1], size_hint=[None, 0.5])) self.left.six.box.add_widget(self.spinner) self.left.six.add_widget(self.left.six.box) #self.left.six.box.children[0].center = (160, 522.1339285) #self.spinner.pos_hint = {'right':0.9} #self.spinner.center_x = 150 # 這裡是畫面左欄第二格 self.left.two = MDGridLayout(rows=2, size_hint=[1, None], size=[365, 170], md_bg_color=[0.39, 0.4, 0.72, 1]) #self.left.two.center_y = 400 # 把"指標排序"標籤裝進第二格子的上方 self.left.two.add_widget( Label(text='指標排序', font_size='20sp', font_name='msjhbd.ttc', height=32, size_hint=[1, 0.1])) # 左欄第二格下方增加一個grid容器 self.left.two.grid = MDGridLayout(rows=3, size_hint=[1, 0.26], padding=[30, 0, 20, 0]) self.left.two.grid.size_hint = [1, 0.26] self.left.two.add_widget(self.left.two.grid) # 準備三個box放入此grid self.left.two.box1 = BoxLayout(size_hint=[1, None], size=[365, 40], spacing=13) self.left.two.box2 = BoxLayout(size_hint=[1, None], size=[365, 40], spacing=13) self.left.two.box3 = BoxLayout(size_hint=[1, None], size=[365, 40], spacing=13) self.left.two.grid.add_widget(self.left.two.box1) self.left.two.grid.add_widget(self.left.two.box2) self.left.two.grid.add_widget(self.left.two.box3) # 處理第一個box的標籤(全用按鈕取代)、輸入 self.left.two.btn1 = MDRaisedButton(text=' 人口特性 ', font_name='msjhbd.ttc', font_size='16sp') self.left.two.btn1.md_bg_color = [0.55, 0.63, 0.99, 1] self.left.two.input1 = MDTextFieldRect(hint_text='請輸入1、2、3:', size_hint=[1, None], size=[94, 37], font_name='msjhbd.ttc') self.left.two.input1.size_hint_x = None self.left.two.input1.width = 120 self.left.two.box1.add_widget(self.left.two.btn1) self.left.two.box1.add_widget(self.left.two.input1) self.left.two.btn3 = MDRaisedButton(text=' 薪資所得 ', font_name='msjhbd.ttc', font_size='16sp') self.left.two.btn3.md_bg_color = [0.68, 0.82, 0.96, 1] self.left.two.input3 = MDTextFieldRect(hint_text='請輸入1、2、3:', size_hint=[1, None], size=[94, 37], font_name='msjhbd.ttc') self.left.two.input3.size_hint_x = None self.left.two.input3.width = 120 self.left.two.box2.add_widget(self.left.two.btn3) self.left.two.box2.add_widget(self.left.two.input3) self.left.two.btn5 = MDRaisedButton(text=' 人口消長 ', font_name='msjhbd.ttc', font_size='16sp') self.left.two.btn5.md_bg_color = [0.5, 0.87, 0.98, 1] self.left.two.input5 = MDTextFieldRect(hint_text='請輸入1、2、3:', size_hint=[1, None], size=[94, 37], font_name='msjhbd.ttc') self.left.two.input5.size_hint_x = None self.left.two.input5.width = 120 self.left.two.box3.add_widget(self.left.two.btn5) self.left.two.box3.add_widget(self.left.two.input5) # 這裡是畫面左欄第三格 self.left.three = MDGridLayout(rows=2, md_bg_color=[0.39, 0.4, 0.72, 1], size_hint=[1, 0.57]) # 把"指標排序"標籤裝進第二格子的上方 self.left.three.add_widget( Label(text='選擇競爭對手', font_size='20sp', font_name='msjhbd.ttc', height=32, size_hint=[1, 0.06])) # 左欄第三格下方增加一個grid容器 self.left.three.grid = MDGridLayout(rows=5, size_hint=[1, 0.26], spacing=3, padding=[30, 0, 40, 0]) self.left.three.add_widget(self.left.three.grid) # 準備五個box放入此grid self.left.three.box1 = BoxLayout(size_hint=[1, 0.05]) self.left.three.box2 = BoxLayout(size_hint=[1, 0.05]) self.left.three.box3 = BoxLayout(size_hint=[1, 0.05]) self.left.three.box4 = BoxLayout(size_hint=[1, 0.05]) #self.left.three.box5 = BoxLayout(size_hint=[1, 0.4]) self.left.three.box6 = BoxLayout() self.left.three.grid.add_widget(self.left.three.box1) self.left.three.grid.add_widget(self.left.three.box2) self.left.three.grid.add_widget(self.left.three.box3) self.left.three.grid.add_widget(self.left.three.box4) # 處理第一個box的標籤(全用按鈕取代)、勾選 self.left.three.btn1 = MDRaisedButton(text=' 早餐店 ', font_name='msjhbd.ttc', size_hint=[None, 0.9], font_size='16sp') self.left.three.btn1.md_bg_color = [0.55, 0.63, 0.99, 1] self.left.three.input1 = MDCheckbox() self.left.three.input1.x = 140 self.left.three.input1.selected_color = (1, 1, 1, 1) self.left.three.input1.unselected_color = (1, 1, 1, 1) self.left.three.box1.add_widget(self.left.three.btn1) self.left.three.box1.add_widget(self.left.three.input1) # 處理第二個box的標籤(全用按鈕取代)、勾選 self.left.three.btn2 = MDRaisedButton(text='便當、自助餐店', font_name='msjhbd.ttc', size_hint=[None, 0.9], font_size='16sp') self.left.three.btn2.md_bg_color = [0.48, 0.81, 0.78, 1] self.left.three.input2 = MDCheckbox() self.left.three.input2.x = 140 self.left.three.input2.selected_color = (1, 1, 1, 1) self.left.three.input2.unselected_color = (1, 1, 1, 1) self.left.three.box2.add_widget(self.left.three.btn2) self.left.three.box2.add_widget(self.left.three.input2) # 處理第三個box的標籤(全用按鈕取代)、勾選 self.left.three.btn3 = MDRaisedButton(text='麵店、小吃店 ', font_name='msjhbd.ttc', size_hint=[None, 0.9], font_size='16sp') self.left.three.btn3.md_bg_color = [0.68, 0.82, 0.96, 1] self.left.three.input3 = MDCheckbox() self.left.three.input3.x = 140 self.left.three.input3.selected_color = (1, 1, 1, 1) self.left.three.input3.unselected_color = (1, 1, 1, 1) self.left.three.box3.add_widget(self.left.three.btn3) self.left.three.box3.add_widget(self.left.three.input3) # 處理第四個box的標籤(全用按鈕取代)、勾選 self.left.three.btn4 = MDRaisedButton(text=' 餐館餐廳 ', font_name='msjhbd.ttc', size_hint=[None, 0.9], font_size='16sp') self.left.three.btn4.md_bg_color = [0.62, 0.84, 0.51, 1] self.left.three.input4 = MDCheckbox() self.left.three.input4.x = 140 #self.left.three.input4.color = [1,1,1,2] self.left.three.input4.selected_color = (1, 1, 1, 1) self.left.three.input4.unselected_color = (1, 1, 1, 1) self.left.three.box4.add_widget(self.left.three.btn4) self.left.three.box4.add_widget(self.left.three.input4) self.run_button = MDRaisedButton(text='Run') # 製作廟宇按鈕 self.left.four = MDGridLayout(rows=2, size_hint=[1, None], size=[365, 90], md_bg_color=[0.39, 0.4, 0.72, 1]) self.left.four.add_widget( Label(text='廟宇出現與否', font_size='20sp', font_name='msjhbd.ttc', height=32, size_hint=[1, 0.025])) self.left.four.box = BoxLayout(size_hint=[1, 0.025], padding=[30, -20, 40, 5]) self.left.four.add_widget(self.left.four.box) self.left.four.btn = MDRaisedButton(text=' 廟宇 ', font_name='msjhbd.ttc', size_hint=[None, 0.8], font_size='16sp') self.left.four.input = MDCheckbox() self.left.four.input.selected_color = (1, 1, 1, 1) self.left.four.input.unselected_color = (1, 1, 1, 1) self.left.four.box.add_widget(self.left.four.btn) self.left.four.box.add_widget(self.left.four.input) # 把每一層加回去 self.left.add_widget(self.left.one) self.left.add_widget(self.left.six) self.left.add_widget(self.left.two) self.left.add_widget(self.left.three) self.left.add_widget(self.left.four) self.add_widget(self.left) self.add_widget(self.map) # 測試用的按鈕 #self.run_button = MDRaisedButton(text='Run') self.left.five = MDGridLayout(size_hint=[1, 0.1], md_bg_color=[0.39, 0.4, 0.72, 1]) self.left.five.add_widget(self.run_button) self.run_button.bind(on_release=self.popup.open) self.left.add_widget(self.left.five) self.run_button.right = 270 self.run_button.ripple_alpha = 0.7 self.run_button.radius = [10, 10, 10, 10] self.run_button.md_bg_color = [1, 1, 1, 1] self.run_button.text_color = [0, 0, 0, 1] #self.left.six.box.children[0].right = 150 #self.left.six.box.right = 390 #self.left.six.box.children[0].pos_hint = {'right':0.001, 'left':0.9} #self.left.four.box.pos_hint = {'top':0.5} def add_shop(self, neigh, clist, password): shop_list = gd.get_shop_codata(neigh, clist) # print(shop_list) #self.add1 += 1 #print(self.add1) print('###add_shop_func###') if shop_list == ['no data']: print('') else: for shop in shop_list: lon = float(shop['coor'][1]) lat = float(shop['coor'][0]) marker = MapMarkerPopup(lat=lat, lon=lon, source="競爭對手_標點.png") marker.add_widget( Button(text=neigh + '\n' + shop['name'] + '\n' + shop['class'], font_name='msjhbd.ttc', font_size=15, size_hint=[None, None], size=[150, 150])) self.map.add_marker(marker) if (password == 1): self.add1_shop_list.append(marker) elif (password == 2): self.add2_shop_list.append(marker) elif (password == 3): self.add3_shop_list.append(marker) #print(self.add1) # else: # for marker in self.add1_shop_list: # self.map.remove_marker(marker) #print('sucess') def clear_shop(self, password): print('###clear_shop_func###') if (password == 1): print("clear1!") for marker in self.add1_shop_list: self.map.remove_marker(marker) self.add1_shop_list.clear() elif (password == 2): print("clear2!") for marker in self.add2_shop_list: self.map.remove_marker(marker) self.add2_shop_list.clear() elif (password == 3): for marker in self.add3_shop_list: self.map.remove_marker(marker) self.add3_shop_list.clear() def add_temp(self, neigh, boolt, password): print('###add_temp_func###') temp_list = gd.get_temp_codata(neigh) # print(temp_list) if boolt == True: if temp_list == ['no data']: print('') else: for temp in temp_list: lon = float(temp['coor'][1]) lat = float(temp['coor'][0]) marker = MapMarkerPopup(lat=lat, lon=lon, source="廟_標點.png") marker.add_widget( Button(text=neigh + '\n' + temp['name'], font_name='msjhbd.ttc', font_size=15, size_hint=[None, None], size=[100, 100])) self.map.add_widget(marker) if (password == 1): self.add1_temp_list.append(marker) elif (password == 2): self.add2_temp_list.append(marker) print('hoooooo') elif (password == 3): self.add3_temp_list.append(marker) else: print("") def clear_temp(self, password): print('###clear_temp_func###') if (password == 1): print("clear1!") for marker in self.add1_temp_list: print(marker) self.map.remove_marker(marker) self.add1_temp_list.clear() elif (password == 2): print("clear2!") for marker in self.add2_temp_list: print(marker) self.map.remove_marker(marker) self.add2_temp_list.clear() elif (password == 3): for marker in self.add3_temp_list: print(marker) self.map.remove_marker(marker) self.add3_temp_list.clear() def add_rent(self, password, neigh, Min_price=0, Max_price=100000000): print('###add_rent_func###') # print(Min_price, Max_price) rent_list = gd.get_rent_codata(neigh) # print(rent_list) if rent_list == ['no data']: print('') else: cou = 1 for rent in rent_list: if (int(rent['price']) >= Min_price) & (int(rent['price']) <= Max_price): lon = float(rent['coor'][1]) lat = float(rent['coor'][0]) marker = MapMarkerPopup(lat=lat, lon=lon, source="店面_標點.png") rent_button = Button(text=neigh + '\n' + '店面' + str(cou) + '\n' + rent['size'] + '\n' + '$' + rent['price'] + '/月', font_name='msjhbd.ttc', font_size=15, size_hint=[None, None], size=[100, 100]) rent_button.bind( on_press=partial(webbrowser.open, rent['web'])) marker.add_widget(rent_button) self.map.add_widget(marker) cou += 1 if (password == 1): self.add1_rent_list.append(marker) elif (password == 2): self.add2_rent_list.append(marker) elif (password == 3): self.add3_rent_list.append(marker) def clear_rent(self, password): print('###clear_rent_func###') if (password == 1): print("clear1!") for marker in self.add1_rent_list: self.map.remove_marker(marker) self.add1_rent_list.clear() elif (password == 2): print("clear2!") for marker in self.add2_rent_list: self.map.remove_marker(marker) self.add2_rent_list.clear() elif (password == 3): for marker in self.add3_rent_list: self.map.remove_marker(marker) self.add3_rent_list.clear() # def add_border(self, filename): # import os, sys # import json # with open(os.path.realpath(sys.argv[0]).strip(sys.argv[0])+"data\\"+"鄰里邊界\\"+filename, 'r', encoding = 'utf-8') as f: # data = json.load(f) # for i in data['features'][0]['geometry']['coordinates'][0]: # lon = i[0] # lat = i[1] # marker = MapMarkerPopup(lon=lon, lat=lat, source='邊界.png') # self.map.add_widget(marker) def add_boundary(self, password): print('###add_boundary_func###') print('我要密碼') print(password) # if(self.add1 == 1 and password == 1): # self.bound1 = GeoJsonMapLayer() # elif(self.add2 == 1 and password == 2): # self.bound2 = GeoJsonMapLayer() # if(self.add3 == 1 and password == 3): # self.bound3 = GeoJsonMapLayer() #self.bound3 = GeoJsonMapLayer() # if(password == 1): # print('1號邊界成功') # #print("梧棲區\\" + self.rank1.text + ".json") # self.bound1.source = os.path.realpath(sys.argv[0]).strip(sys.argv[0]) + "梧棲區\\" + self.rank1.text + ".json" # self.add1_bound.append(self.bound1) # self.map.add_layer(self.bound1) if (password == 1): self.bound1.source = os.path.realpath(sys.argv[0]).strip( sys.argv[0] ) + "data\\" + "鄰里邊界\\" + self.spinner.text + "\\" + self.rank1.text + ".json" self.add1_bound.append(self.bound1) self.map.add_layer(self.bound1) elif (password == 2): self.bound2.source = os.path.realpath(sys.argv[0]).strip( sys.argv[0] ) + "data\\" + "鄰里邊界\\" + self.spinner.text + "\\" + self.rank2.text + ".json" self.add2_bound.append(self.bound2) self.map.add_layer(self.bound2) elif (password == 3): self.bound3.source = os.path.realpath(sys.argv[0]).strip( sys.argv[0] ) + "data\\" + "鄰里邊界\\" + self.spinner.text + "\\" + self.rank3.text + ".json" self.add3_bound.append(self.bound3) self.map.add_layer(self.bound3) # elif(password == 3): # print(password) # self.bound3.source = os.path.realpath(sys.argv[0]).strip(sys.argv[0]) + "梧棲區\\" + self.rank3.text + ".json" # self.add3_bound.append(self.bound3) # self.map.add_layer(self.bound3) # if(password == 1): # self.bound1.source = os.path.realpath(sys.argv[0]).strip(sys.argv[0]) + "梧棲區\\" + self.rank1.text + ".json" # #print(bound1.source) # self.add1_bound.append(self.bound1) # print("我是密碼" + str(password)) # print(self.rank1.text) # elif(password == 2): # self.bound2.source = os.path.realpath(sys.argv[0]).strip(sys.argv[0]) + "梧棲區\\" + self.rank2.text + ".json" # #print(self.bound2.source) # self.add2_bound.append(self.bound2) # print("我是密碼" + str(password)) # print(self.rank2.text) # elif(password == 3): # self.bound3.source = os.path.realpath(sys.argv[0]).strip(sys.argv[0]) + "梧棲區\\" + self.rank3.text + ".json" # self.add3_bound.append(self.bound3) # print("我是密碼" + str(password)) # if(password == 1): # self.map.add_layer(self.bound1) # elif(password == 2): # self.map.add_layer(self.bound2) # elif(password == 3): # self.map.add_layer(self.bound3) def remove_boundary(self, password): print('###remove_boundary_func###') #target = None # if(password == 1): # for a in self.add1_bound: # self.map.remove_layer(a) # self.add1_bound.clear() if (password == 1): for b in self.add1_bound: self.map.remove_layer(b) self.add1_bound.clear() elif (password == 2): for b in self.add2_bound: self.map.remove_layer(b) self.add2_bound.clear() elif (password == 3): for b in self.add3_bound: self.map.remove_layer(b) self.add3_bound.clear() # elif(password == 3): # for c in self.add3_bound: # self.map.remove_layer(c) # self.add3_bound.clear() #print(target, end=',,') #self.map.remove_layer(target[0]) #target.clear() #print(target, end=',,') '''pressed定義Run之後處理數據並放到資訊卡上的事件''' acard = None def pressed(self, instance): print(self.spinner.text) #print(self.spinner.text) top3_rank = final_combiner.final_rank([ int(self.left.two.input1.text), int(self.left.two.input3.text), int(self.left.two.input5.text) ]) if not self.acard: self.rank1 = ThreeLineIconListItem( text=top3_rank[0][0], secondary_text='人口特性:' + str(top3_rank[0][1]), tertiary_text='新資所得:' + str(top3_rank[0][2]), text_color=[1, 1, 1, 1]) self.rank1.add_widget(IconLeftWidget(icon='numeric-1-box')) self.rank1.bg_color = [0, 0, 0, 0] self.rank1.children[1].children[2].font_name = 'msjhbd.ttc' self.rank1.children[1].children[1].font_name = 'msjhbd.ttc' self.rank1.children[1].children[0].font_name = 'msjhbd.ttc' self.rank1.children[1].children[2].font_size = '18' more_rank1 = MDLabel(text='人口消長:' + str(top3_rank[0][3])) more_rank1.font_name = 'msjhbd.ttc' more_rank1.font_style = 'Body1' more_rank1.font_size = 16 more_rank1.color = [0, 0, 0, 0.7] self.rank1.children[1].add_widget(more_rank1) self.rank1.children[1].size_hint = [1, None] self.rank1.children[1].children[3].pos = [56, 280] self.rank1.children[0].children[0].children[0].color = [1, 1, 1, 1] self.rank1.children[0].children[0].children[0].pos_hint = { 'left': 0.1 } self.rank1.children[0].padding = [-10, 0, 0, 0] self.rank1.children[1].children[3].theme_text_color = 'Custom' self.rank1.children[1].children[3].text_color = [1, 1, 1, 1] self.rank1.children[1].children[2].theme_text_color = 'Custom' self.rank1.children[1].children[2].text_color = [1, 1, 1, 1] self.rank1.children[1].children[1].theme_text_color = 'Custom' self.rank1.children[1].children[1].text_color = [1, 1, 1, 1] self.rank1.children[1].children[0].theme_text_color = 'Custom' self.rank1.children[1].children[0].text_color = [1, 1, 1, 1] # 從另一個預先寫好、計算各里指標分數的模組final_combiner引進final_rank函數,取得前三名的區域及其各項指標分數後用top3_rank變數紀錄起來 # 接著改寫、擴充kivy套件內的工具(ThreeLineIconListItem),做成資訊卡,同時使其擁有按鈕的特性讓使用者做點選 self.rank2 = ThreeLineIconListItem( text=top3_rank[1][0], secondary_text='人口特性:' + str(top3_rank[1][1]), tertiary_text='新資所得:' + str(top3_rank[1][2])) self.rank2.add_widget(IconLeftWidget(icon='numeric-2-box')) self.rank2.bg_color = [0, 0, 0, 0] self.rank2.children[1].children[2].font_size = '18' self.rank2.children[1].children[2].font_name = 'msjhbd.ttc' self.rank2.children[1].children[1].font_name = 'msjhbd.ttc' self.rank2.children[1].children[0].font_name = 'msjhbd.ttc' more_rank2 = MDLabel(text='人口消長:' + str(top3_rank[1][3])) more_rank2.font_name = 'msjhbd.ttc' more_rank2.font_style = 'Body1' more_rank2.font_size = 16 more_rank2.color = [0, 0, 0, 0.54] self.rank2.children[1].add_widget(more_rank2) self.rank2.children[1].size_hint = [1, None] self.rank2.children[0].children[0].children[0].color = [1, 1, 1, 1] self.rank2.children[0].children[0].children[0].pos_hint = { 'left': 0.1 } self.rank2.children[0].padding = [-10, 0, 0, 0] self.rank2.children[1].children[3].theme_text_color = 'Custom' self.rank2.children[1].children[3].text_color = [1, 1, 1, 1] self.rank2.children[1].children[2].theme_text_color = 'Custom' self.rank2.children[1].children[2].text_color = [1, 1, 1, 1] self.rank2.children[1].children[1].theme_text_color = 'Custom' self.rank2.children[1].children[1].text_color = [1, 1, 1, 1] self.rank2.children[1].children[0].theme_text_color = 'Custom' self.rank2.children[1].children[0].text_color = [1, 1, 1, 1] self.rank3 = ThreeLineIconListItem( text=top3_rank[2][0], secondary_text='人口特性:' + str(top3_rank[2][1]), tertiary_text='新資所得:' + str(top3_rank[2][2])) self.rank3.add_widget(IconLeftWidget(icon='numeric-3-box')) self.rank3.bg_color = [0, 0, 0, 0] self.rank3.children[1].children[2].font_size = '18' self.rank3.children[1].children[2].font_name = 'msjhbd.ttc' self.rank3.children[1].children[1].font_name = 'msjhbd.ttc' self.rank3.children[1].children[0].font_name = 'msjhbd.ttc' more_rank3 = MDLabel(text='人口消長:' + str(top3_rank[2][3])) more_rank3.font_name = 'msjhbd.ttc' more_rank3.font_style = 'Body1' more_rank3.font_size = 16 more_rank3.color = [0, 0, 0, 0.54] self.rank3.children[1].add_widget(more_rank3) self.rank3.children[1].size_hint = [1, None] self.rank3.children[0].children[0].children[0].color = [1, 1, 1, 1] self.rank3.children[0].children[0].children[0].pos_hint = { 'left': 0.1 } self.rank3.children[0].padding = [-10, 0, 0, 0] self.rank3.children[1].children[3].theme_text_color = 'Custom' self.rank3.children[1].children[3].text_color = [1, 1, 1, 1] self.rank3.children[1].children[2].theme_text_color = 'Custom' self.rank3.children[1].children[2].text_color = [1, 1, 1, 1] self.rank3.children[1].children[1].theme_text_color = 'Custom' self.rank3.children[1].children[1].text_color = [1, 1, 1, 1] self.rank3.children[1].children[0].theme_text_color = 'Custom' self.rank3.children[1].children[0].text_color = [1, 1, 1, 1] self.rank1.size = [352, 100] self.rank2.size = [352, 100] self.rank3.size = [352, 100] self.click += 1 self.rank1.children[1].padding = [56, 16, 24, 7] self.rank2.children[1].padding = [56, 4, 24, 7] self.rank3.children[1].padding = [56, 4, 24, 7] self.rank1.children[1].children[0].adaptive_height = True self.rank1.children[1].pos = [0, 180] self.rank2.children[1].children[1].adaptive_height = True self.rank2.children[1].pos = [0, 130] self.rank3.children[1].children[1].adaptive_height = True self.add_widget( MDGridLayout(cols=1, size_hint=[0.285, 1], md_bg_color=[0.39, 0.4, 0.72, 1])) self.children[0].add_widget(self.rank1) self.children[0].add_widget(self.rank2) self.children[0].add_widget(self.rank3) self.rank1.bind(on_release=self.add_renk1_marker) self.rank2.bind(on_release=self.add_renk2_marker) self.rank3.bind(on_release=self.add_renk3_marker) ''' 當初設計沒有想好架構,導致要再次定義pressed事件(第二次之後的Run),如果是如果是第二次點擊Run之後要重新更新資訊卡的內容''' def second_pressed(self, instance): for i in range(1, 4): self.clear_shop(i) self.clear_temp(i) self.clear_rent(i) self.remove_boundary(i) self.add1 = 0 self.add2 = 0 self.add3 = 0 #self.map.children[0].unload() top3_rank = final_combiner.final_rank([ int(self.left.two.input1.text), int(self.left.two.input3.text), int(self.left.two.input5.text) ]) self.rank1.children[1].children[3].text = top3_rank[0][0] self.rank1.children[1].children[2].text = "人口特性:" + str( top3_rank[0][1]) self.rank1.children[1].children[1].text = "新資所得:" + str( top3_rank[0][2]) self.rank1.children[1].children[0].text = "人口消長:" + str( top3_rank[0][3]) self.rank2.children[1].children[3].text = top3_rank[1][0] self.rank2.children[1].children[2].text = "人口特性:" + str( top3_rank[1][1]) self.rank2.children[1].children[1].text = "新資所得:" + str( top3_rank[1][2]) self.rank2.children[1].children[0].text = "人口消長:" + str( top3_rank[1][3]) self.rank3.children[1].children[3].text = top3_rank[2][0] self.rank3.children[1].children[2].text = "人口特性:" + str( top3_rank[2][1]) self.rank3.children[1].children[1].text = "新資所得:" + str( top3_rank[2][2]) self.rank3.children[1].children[0].text = "人口消長:" + str( top3_rank[2][3]) self.rank1.bind(on_release=self.add_renk1_marker) self.rank2.bind(on_release=self.add_renk2_marker) self.rank3.bind(on_release=self.add_renk3_marker) def add_renk1_marker(self, instance): # print(len(self.map.children[2])) cla_list = [ self.left.three.btn1.text.strip(), self.left.three.btn2.text.strip(), self.left.three.btn3.text.strip(), self.left.three.btn4.text.strip() ] ch_list = [ self.left.three.input1.active, self.left.three.input2.active, self.left.three.input3.active, self.left.three.input4.active ] #print(cla_list, ch_list) act_list = [] for cont in range(4): if ch_list[cont] == True: act_list.append(cla_list[cont]) #print(self.rank1.text) self.add1 += 1 if (self.add1 % 2 == 1): self.add_boundary(1) self.add_shop(self.rank1.text, act_list, 1) self.add_temp(self.rank1.text, self.left.four.input.active, 1) self.add_rent(1, self.rank1.text, int(self.lower_bound.text), int(self.upper_bound.text)) # location = self.geolocator.geocode("梧棲區大庄里") # self.map.center_on(location.latitude , location.longitude) self.map.center_on(24.2454073, 120.54976945174974) elif (self.add1 % 2 == 0): self.remove_boundary(1) self.clear_shop(1) self.clear_temp(1) self.clear_rent(1) # filename = self.rank1.text + ".json" # self.add_border(filename) self.map.zoom = 13 # from geopy.geocoders import Nominatim # geolocator = Nominatim(user_agent="Brian_map") def add_renk2_marker(self, instance): cla_list = [ self.left.three.btn1.text.strip(), self.left.three.btn2.text.strip(), self.left.three.btn3.text.strip(), self.left.three.btn4.text.strip() ] ch_list = [ self.left.three.input1.active, self.left.three.input2.active, self.left.three.input3.active, self.left.three.input4.active ] act_list = [] for cont in range(4): if ch_list[cont] == True: act_list.append(cla_list[cont]) self.add2 += 1 if (self.add2 % 2 == 1): self.add_boundary(2) self.add_shop(self.rank2.text, act_list, 2) self.add_temp(self.rank2.text, self.left.four.input.active, 2) self.add_rent(2, self.rank2.text, int(self.lower_bound.text), int(self.upper_bound.text)) # location = self.geolocator.geocode("梧棲區大村里") # self.map.center_on(location.latitude , location.longitude) self.map.center_on(24.2549239, 120.5316259) elif (self.add2 % 2 == 0): self.remove_boundary(2) self.clear_shop(2) self.clear_temp(2) self.clear_rent(2) def add_renk3_marker(self, instance): cla_list = [ self.left.three.btn1.text.strip(), self.left.three.btn2.text.strip(), self.left.three.btn3.text.strip(), self.left.three.btn4.text.strip() ] ch_list = [ self.left.three.input1.active, self.left.three.input2.active, self.left.three.input3.active, self.left.three.input4.active ] act_list = [] for cont in range(4): if ch_list[cont] == True: act_list.append(cla_list[cont]) self.add3 += 1 if (self.add3 % 2 == 1): self.add_boundary(3) self.add_shop(self.rank3.text, act_list, 3) self.add_temp(self.rank3.text, self.left.four.input.active, 3) self.add_rent(3, self.rank3.text, int(self.lower_bound.text), int(self.upper_bound.text)) # location = self.geolocator.geocode("梧棲區大村里") # self.map.center_on(location.latitude , location.longitude) self.map.center_on(24.2570033, 120.53346300048884) elif (self.add3 % 2 == 0): self.remove_boundary(3) self.clear_shop(3) self.clear_temp(3) self.clear_rent(3) '''進度條跑到滿格時,要讓他reset變1''' def progress_reset(self, run): self.progress_bar.value = 1 '''讓進度條要一直往右跑,如果滿了就要關掉進度條畫面''' def next(self, dt): self.progress_bar.value += 6 if self.progress_bar.value >= 100: Clock.schedule_once(self.popup.dismiss, 0.5) if self.click == 0: Clock.schedule_once(self.pressed, 0.6) else: Clock.schedule_once(self.second_pressed, 0.6) #else: Clock.unschedule(self.new) Clock.schedule_once(self.progress_reset, 0.6) '''定義進度條跑的速率''' def puopen(self, instance): self.new = Clock.schedule_interval(self.next, 1 / 20)
class user_menu_operations(): #This function loads the basic ui for creating,editing and deleting user data def users_loader(self): #Create three buttons and bind their respective functions to them self.change = MDRaisedButton(text='Change account details') self.change.bind( on_press=partial(user_menu_operations.account_changer, self)) self.add = MDRaisedButton(text='Add New Account') self.add.bind(on_press=partial(user_menu_operations.new_user, self)) self.remove = MDRaisedButton(text='Remove current user') self.remove.bind(on_press=partial(user_menu_operations.remover, self)) Mainscreenvar = sm.get_screen("MainScreen") #add all the three buttons to the main user interface Mainscreenvar.ids.container.add_widget(self.change) Mainscreenvar.ids.container.add_widget(self.add) Mainscreenvar.ids.container.add_widget(self.remove) #This function displays the popup for changing details of an user def account_changer(self, caller): self.popup_card = MDCard( size=(400, 400), size_hint=(None, None), md_bg_color=(0.1, 0.1, 0.1, 1), radius=(20, 20, 20, 20), ) self.layout = ModalView( size=(500, 500), size_hint=(None, None), background_color=(0, 0, 0, .9), background='atlas://data/images/defaulttheme/action_item') self.layout.add_widget(self.popup_card) #Create an object that holds the main ui using the template User_details self.user_details = User_Details() #set the current logged in user's username and password self.user_details.ids.user_name.text = current_user self.user_details.ids.password.text = current_password #bind the save function to the save button from the ui self.user_details.ids.save.bind( on_press=partial(user_menu_operations.saver, self, 1)) self.popup_card.add_widget(self.user_details) #dispay the popup self.layout.open() #This function displays a popup that allows the user to create a new user account def new_user(self, caller): self.popup_card = MDCard( size=(400, 400), size_hint=(None, None), md_bg_color=(0.1, 0.1, 0.1, 1), radius=(20, 20, 20, 20), ) self.layout = ModalView( size=(500, 500), size_hint=(None, None), background_color=(0, 0, 0, .9), background='atlas://data/images/defaulttheme/action_item') self.layout.add_widget(self.popup_card) self.user_details = User_Details() self.user_details.ids.save.bind( on_press=partial(user_menu_operations.saver, self, 2)) self.popup_card.add_widget(self.user_details) self.layout.open() #This function saves any changes and any new user account details def saver(self, op_id, caller): data = (caller.parent.ids.user_name.text, caller.parent.ids.password.text) #if we are updating data we delete data that is already inside the table if op_id == 1: mycursor.execute("DELETE FROM users WHERE user_id = %s", (current_user, )) mydb.commit() #we insert new values into the table mycursor.execute("INSERT INTO users VALUES(%s,%s)", data) mydb.commit() if op_id == 1: #if we are updating existing details we rename the table of notes with new user name mycursor.execute("ALTER TABLE " + current_user + " RENAME TO " + caller.parent.ids.user_name.text) #clear the widgets on screen sm.get_screen("MainScreen").ids.container.clear_widgets() #reset the screen to the login screen sm.current = ('LoginScreen') else: #if new user is being added we create a new table in their name mycursor.execute( "CREATE TABLE " + caller.parent.ids.user_name.text + "(id double, content text, date date, color int(2))") #close the popup window self.layout.dismiss() #This function is called when the current user account has to be deleted def remover(self, caller): #First we delete the user name from the user table mycursor.execute("DELETE FROM users WHERE user_id = %s", (current_user, )) mydb.commit() #Then we drop the table that stores all the users sticky notes mycursor.execute("DROP TABLE " + current_user) #clear screen sm.get_screen("MainScreen").ids.container.clear_widgets() #reset to login screen sm.current = 'LoginScreen'
class Test(MDGridLayout, MDApp, Widget): progress_bar = ObjectProperty() def __init__(self, **kwargs): super(Test, self).__init__(**kwargs) self.click = 0 # rect_color = Color(1,0,0,1) # rect_color1 = Color(0,1,1,0.6) # rect = Rectangle(pos=(100,10), size=(400,300)) # rect1 = Rectangle(pos=(400,50), size=(400,300)) # self.wid = Widget() self.progress_bar = MDProgressBar() self.popup = Popup(title='數據加載中,請稍後!', content=self.progress_bar) self.popup.title_size = 30 self.popup.title_font = 'msjhbd.ttc' self.popup.size_hint = [0.5, 0.5] self.popup.background_color = [0.5, 0.5, 0.5, 0.75] self.progress_bar.value = 1 self.popup.bind(on_open=self.puopen) # 主畫面切成左右兩欄 self.cols = 3 #self.origin = MDGridLayout(cols=2, padding=[35, 0, 35, 0]) # 左欄是一個Gridlayout,有四列 self.left = MDGridLayout(rows=5, size_hint=[0.4, 1], spacing=[0, 3]) # 創建地圖 self.map = FarmersMapView() # 左欄最上方要來做店租範圍 self.left.one = MDGridLayout(size=[590, 657], rows=2, size_hint=[1, 0.2], md_bg_color=[0.39, 0.4, 0.72, 1], padding=[35, -20, 35, -20], spacing=[0, -30]) # 把標籤裝進去最上層 self.left.one.add_widget( Label(text='選擇店租範圍', font_size='20sp', font_name='msjhbd.ttc', size_hint_y=0.18)) # 新增一層容器準備裝三個東西 self.left.one.box = BoxLayout(spacing=8, size_hint_y=0.15) # 盒子裝進一個下限input、一上限input、一個'-'tag self.lower_bound = MDTextFieldRect(x=275, hint_text="$下限", font_name='msjhbd.ttc', pos_hint={'y': 0.45}, size_hint=[1, 0.5], use_bubble=True, use_handles=True) self.upper_bound = MDTextFieldRect(hint_text="$上限", font_name='msjhbd.ttc', pos_hint={'y': 0.45}, center_x=275.76, center_y=508.20, size_hint=[1, 0.5], use_bubble=True, use_handles=True) self.dash_sign = MDFlatButton(text='-', font_size=30, size_hint=[1, 0.49], pos_hint={'y': 0.45}) self.dash_sign.md_bg_color = [1, 1, 1, 1] self.left.one.box.add_widget(self.lower_bound) self.left.one.box.add_widget(self.dash_sign) self.left.one.box.add_widget(self.upper_bound) # 盒子裝回上層 self.left.one.add_widget(self.left.one.box) # 這裡是畫面左欄第二格 self.left.two = MDGridLayout(rows=2, size_hint=[1, None], size=[365, 180], md_bg_color=[0.39, 0.4, 0.72, 1]) #self.left.two.center_y = 400 # 把"指標排序"標籤裝進第二格子的上方 self.left.two.add_widget( Label(text='指標排序', font_size='20sp', font_name='msjhbd.ttc', height=32, size_hint=[1, 0.1])) # 左欄第二格下方增加一個grid容器 self.left.two.grid = MDGridLayout(rows=3, size_hint=[1, 0.26], padding=[30, 0, 20, 0]) self.left.two.grid.size_hint = [1, 0.26] self.left.two.add_widget(self.left.two.grid) # 準備三個box放入此grid self.left.two.box1 = BoxLayout(size_hint=[1, None], size=[365, 40], spacing=13) self.left.two.box2 = BoxLayout(size_hint=[1, None], size=[365, 40], spacing=13) self.left.two.box3 = BoxLayout(size_hint=[1, None], size=[365, 40], spacing=13) self.left.two.grid.add_widget(self.left.two.box1) self.left.two.grid.add_widget(self.left.two.box2) self.left.two.grid.add_widget(self.left.two.box3) # 處理第一個box的標籤(全用按鈕取代)、輸入 self.left.two.btn1 = MDRaisedButton(text=' 人口特性 ', font_name='msjhbd.ttc', font_size='16sp') self.left.two.btn1.md_bg_color = [0.55, 0.63, 0.99, 1] self.left.two.input1 = MDTextFieldRect(hint_text='排序:', size_hint=[1, None], size=[94, 37], font_name='msjhbd.ttc') self.left.two.input1.size_hint_x = None self.left.two.input1.width = 120 #self.left.two.input1.right = 310 self.left.two.box1.add_widget(self.left.two.btn1) self.left.two.box1.add_widget(self.left.two.input1) # self.left.two.btn2 = MDRaisedButton(text='薪資所得', font_name='msjhbd.ttc', font_size='16sp') # self.left.two.btn2.md_bg_color = [0.48, 0.81, 0.78, 1] # self.left.two.input2 = TextInput(hint_text='排序:', size_hint=[1,None], size=[94,37], font_name='msjhbd.ttc') # self.left.two.box1.add_widget(self.left.two.btn2) # self.left.two.box1.add_widget(self.left.two.input2) # 處理第二個box的標籤(全用按鈕取代)、輸入 self.left.two.btn3 = MDRaisedButton(text=' 薪資所得 ', font_name='msjhbd.ttc', font_size='16sp') self.left.two.btn3.md_bg_color = [0.68, 0.82, 0.96, 1] self.left.two.input3 = MDTextFieldRect(hint_text='排序:', size_hint=[1, None], size=[94, 37], font_name='msjhbd.ttc') self.left.two.input3.size_hint_x = None self.left.two.input3.width = 120 self.left.two.box2.add_widget(self.left.two.btn3) self.left.two.box2.add_widget(self.left.two.input3) # self.left.two.btn4 = MDRaisedButton(text='生活指數', font_name='msjhbd.ttc', font_size='16sp') # self.left.two.btn4.md_bg_color = [0.62, 0.84, 0.51, 1] # self.left.two.input4 = TextInput(hint_text='排序:', size_hint=[1,None], size=[94,37], font_name='msjhbd.ttc') # self.left.two.box2.add_widget(self.left.two.btn4) # self.left.two.box2.add_widget(self.left.two.input4) # 處理第三個box的標籤(全用按鈕取代)、輸入 self.left.two.btn5 = MDRaisedButton(text=' 人口消長 ', font_name='msjhbd.ttc', font_size='16sp') self.left.two.btn5.md_bg_color = [0.5, 0.87, 0.98, 1] self.left.two.input5 = MDTextFieldRect(hint_text='排序:', size_hint=[1, None], size=[94, 37], font_name='msjhbd.ttc') self.left.two.input5.size_hint_x = None self.left.two.input5.width = 120 self.left.two.box3.add_widget(self.left.two.btn5) self.left.two.box3.add_widget(self.left.two.input5) # self.left.two.btn6 = MDRaisedButton(text='薪資所得', font_name='msjhbd.ttc', font_size='16sp') # self.left.two.btn6.md_bg_color = [0.81, 0.88, 0.39, 1] # self.left.two.input6 = TextInput(hint_text='排序:', size_hint=[1,None], size=[94,37], font_name='msjhbd.ttc') # self.left.two.box3.add_widget(self.left.two.btn6) # self.left.two.box3.add_widget(self.left.two.input6) # 這裡是畫面左欄第三格 self.left.three = MDGridLayout(rows=2, md_bg_color=[0.39, 0.4, 0.72, 1], size_hint=[1, 0.57]) # 把"指標排序"標籤裝進第二格子的上方 self.left.three.add_widget( Label(text='選擇競爭對手', font_size='20sp', font_name='msjhbd.ttc', height=32, size_hint=[1, 0.06])) # 左欄第三格下方增加一個grid容器 self.left.three.grid = MDGridLayout(rows=5, size_hint=[1, 0.26], spacing=3, padding=[30, 0, 40, 0]) self.left.three.add_widget(self.left.three.grid) # 準備五個box放入此grid self.left.three.box1 = BoxLayout(size_hint=[1, 0.05]) self.left.three.box2 = BoxLayout(size_hint=[1, 0.05]) self.left.three.box3 = BoxLayout(size_hint=[1, 0.05]) self.left.three.box4 = BoxLayout(size_hint=[1, 0.05]) #self.left.three.box5 = BoxLayout(size_hint=[1, 0.4]) self.left.three.box6 = BoxLayout() self.left.three.grid.add_widget(self.left.three.box1) self.left.three.grid.add_widget(self.left.three.box2) self.left.three.grid.add_widget(self.left.three.box3) self.left.three.grid.add_widget(self.left.three.box4) #self.left.three.grid.add_widget(self.left.three.box5) #self.left.three.grid.add_widget(self.left.three.box6) # 處理第一個box的標籤(全用按鈕取代)、勾選 self.left.three.btn1 = MDRaisedButton(text=' 早餐店 ', font_name='msjhbd.ttc', size_hint=[None, 0.9], font_size='16sp') self.left.three.btn1.md_bg_color = [0.55, 0.63, 0.99, 1] self.left.three.input1 = MDCheckbox() self.left.three.input1.x = 140 #self.left.three.input1.color = [1,1,1,2] self.left.three.input1.selected_color = (1, 1, 1, 1) self.left.three.input1.unselected_color = (1, 1, 1, 1) self.left.three.box1.add_widget(self.left.three.btn1) self.left.three.box1.add_widget(self.left.three.input1) # 處理第二個box的標籤(全用按鈕取代)、勾選 self.left.three.btn2 = MDRaisedButton(text='便當、自助餐店', font_name='msjhbd.ttc', size_hint=[None, 0.9], font_size='16sp') self.left.three.btn2.md_bg_color = [0.48, 0.81, 0.78, 1] self.left.three.input2 = MDCheckbox() self.left.three.input2.x = 140 #self.left.three.input2.color = [1,1,1,2] self.left.three.input2.selected_color = (1, 1, 1, 1) self.left.three.input2.unselected_color = (1, 1, 1, 1) self.left.three.box2.add_widget(self.left.three.btn2) self.left.three.box2.add_widget(self.left.three.input2) # 處理第三個box的標籤(全用按鈕取代)、勾選 self.left.three.btn3 = MDRaisedButton(text='麵店、小吃店 ', font_name='msjhbd.ttc', size_hint=[None, 0.9], font_size='16sp') self.left.three.btn3.md_bg_color = [0.68, 0.82, 0.96, 1] self.left.three.input3 = MDCheckbox() self.left.three.input3.x = 140 #self.left.three.input3.color = [1,1,1,2] self.left.three.input3.selected_color = (1, 1, 1, 1) self.left.three.input3.unselected_color = (1, 1, 1, 1) self.left.three.box3.add_widget(self.left.three.btn3) self.left.three.box3.add_widget(self.left.three.input3) # 處理第四個box的標籤(全用按鈕取代)、勾選 self.left.three.btn4 = MDRaisedButton(text=' 餐館餐廳 ', font_name='msjhbd.ttc', size_hint=[None, 0.9], font_size='16sp') self.left.three.btn4.md_bg_color = [0.62, 0.84, 0.51, 1] self.left.three.input4 = MDCheckbox() self.left.three.input4.x = 140 #self.left.three.input4.color = [1,1,1,2] self.left.three.input4.selected_color = (1, 1, 1, 1) self.left.three.input4.unselected_color = (1, 1, 1, 1) self.left.three.box4.add_widget(self.left.three.btn4) self.left.three.box4.add_widget(self.left.three.input4) # 處理第五個box的標籤(全用按鈕取代)、勾選 # self.left.three.btn5 = MDRaisedButton(text='咖啡館', font_name='msjhbd.ttc', size_hint=[None, 1], font_size='16sp') # self.left.three.btn5.md_bg_color = [0.62, 0.84, 0.51, 1] # self.left.three.input5 = CheckBox() # self.left.three.input5.color = [1,1,1,2] # self.left.three.box5.add_widget(self.left.three.btn5) # self.left.three.box5.add_widget(self.left.three.input5) self.run_button = MDRaisedButton(text='Run') #self.left.three.box6.add_widget(self.run_button) # 製作廟宇按鈕 self.left.four = MDGridLayout(rows=2, size_hint=[1, None], size=[365, 110], md_bg_color=[0.39, 0.4, 0.72, 1]) self.left.four.add_widget( Label(text='廟宇出現與否', font_size='20sp', font_name='msjhbd.ttc', height=32, size_hint=[1, 0.04])) self.left.four.box = BoxLayout(size_hint=[1, 0.035], padding=[30, 0, 40, 0]) self.left.four.add_widget(self.left.four.box) self.left.four.btn = MDRaisedButton(text=' 廟宇 ', font_name='msjhbd.ttc', size_hint=[None, 1], font_size='16sp') self.left.four.input = MDCheckbox() self.left.four.input.selected_color = (1, 1, 1, 1) self.left.four.input.unselected_color = (1, 1, 1, 1) self.left.four.box.add_widget(self.left.four.btn) self.left.four.box.add_widget(self.left.four.input) # 把每一層加回去 self.left.add_widget(self.left.one) self.left.add_widget(self.left.two) self.left.add_widget(self.left.three) self.left.add_widget(self.left.four) self.add_widget(self.left) self.add_widget(self.map) #self.add_widget(self.right) #self.add_widget(self.right) # 測試用的按鈕 #self.run_button = MDRaisedButton(text='Run') self.run_button.bind(on_release=self.popup.open) self.left.add_widget(self.run_button) #elf.left.add_widget(self.run_button) def add_shop(self, neigh, clist): shop_list = gd.get_shop_codata(neigh, clist) # print(shop_list) if shop_list == ['no data']: print('no shop data') else: for shop in shop_list: lon = float(shop['coor'][1]) lat = float(shop['coor'][0]) marker = MapMarkerPopup(lat=lat, lon=lon, source="競爭對手_標點.png") marker.add_widget( Button(text=neigh + '\n' + shop['name'] + '\n' + shop['class'], font_name='msjhbd.ttc', font_size=15, size_hint=[None, None], size=[150, 150])) self.map.add_widget(marker) def add_temp(self, neigh, boolt): temp_list = gd.get_temp_codata(neigh) # print(temp_list) if boolt == True: if temp_list == ['no data']: print('no temple data') else: for temp in temp_list: lon = float(temp['coor'][1]) lat = float(temp['coor'][0]) marker = MapMarkerPopup(lat=lat, lon=lon, source="廟_標點.png") marker.add_widget( Button(text=neigh + '\n' + temp['name'], font_name='msjhbd.ttc', font_size=15, size_hint=[None, None], size=[100, 100])) self.map.add_widget(marker) else: print("do not show temple") def add_rent(self, neigh, Min_price=0, Max_price=100000000): print(Min_price, Max_price) rent_list = gd.get_rent_codata(neigh) # print(rent_list) if rent_list == ['no data']: print('no rent data') else: cou = 1 for rent in rent_list: if (int(rent['price']) >= Min_price) & (int(rent['price']) <= Max_price): lon = float(rent['coor'][1]) lat = float(rent['coor'][0]) marker = MapMarkerPopup(lat=lat, lon=lon, source="店面_標點.png") rent_button = Button(text=neigh + '\n' + '店面' + str(cou) + '\n' + rent['size'] + '\n' + '$' + rent['price'] + '/月', font_name='msjhbd.ttc', font_size=15, size_hint=[None, None], size=[100, 100]) rent_button.bind( on_press=partial(webbrowser.open, rent['web'])) marker.add_widget(rent_button) self.map.add_widget(marker) cou += 1 acard = None def pressed(self, instance): print([ int(self.left.two.input1.text), int(self.left.two.input3.text), int(self.left.two.input5.text) ]) a = final_combiner.final_rank([ int(self.left.two.input1.text), int(self.left.two.input3.text), int(self.left.two.input5.text) ]) print(a) if not self.acard: #bb = ThreeLineIconListItem(text=self.left.two.input1.text, secondary_text='22', tertiary_text='333') #bb.add_widget(IconLeftWidget(icon='language-python')) #bb.bg_color = [0.5,1,1,1] print(a) self.rank1 = ThreeLineIconListItem( text=a[0][0], secondary_text='人口特性:' + str(a[0][1]), tertiary_text='新資所得:' + str(a[0][2])) # , size = [352, 100] self.rank1.add_widget(IconLeftWidget(icon='numeric-1-box')) self.rank1.bg_color = [0.5, 0.5, 0.5, 0.5] self.rank1.children[1].children[2].font_name = 'msjhbd.ttc' self.rank1.children[1].children[1].font_name = 'msjhbd.ttc' self.rank1.children[1].children[0].font_name = 'msjhbd.ttc' self.rank1.children[1].children[2].font_size = '18' more_rank1 = MDLabel(text='人口消長:' + str(a[0][3])) more_rank1.font_name = 'msjhbd.ttc' more_rank1.font_style = 'Body1' more_rank1.font_size = 16 more_rank1.color = [0, 0, 0, 0.54] self.rank1.children[1].add_widget(more_rank1) self.rank1.children[1].size_hint = [1, None] self.rank1.children[1].children[3].pos = [56, 280] self.rank2 = ThreeLineIconListItem( text=a[1][0], secondary_text='人口特性:' + str(a[1][1]), tertiary_text='新資所得:' + str(a[1][2])) #rank2.children[1].add_widget(MDLabel(text='新資所得' + str(a[1][2]), font_name='msjhbd.ttc', font_size=16, font_style='Body1')) #rank2.add_widget(tertiary_text='新資所得' + str(a[1][2])) self.rank2.add_widget(IconLeftWidget(icon='numeric-2-box')) self.rank2.bg_color = [0.5, 0.5, 0.5, 0.5] self.rank2.children[1].children[2].font_size = '18' self.rank2.children[1].children[2].font_name = 'msjhbd.ttc' self.rank2.children[1].children[1].font_name = 'msjhbd.ttc' self.rank2.children[1].children[0].font_name = 'msjhbd.ttc' more_rank2 = MDLabel(text='人口消長:' + str(a[1][3])) more_rank2.font_name = 'msjhbd.ttc' more_rank2.font_style = 'Body1' more_rank2.font_size = 16 more_rank2.color = [0, 0, 0, 0.54] self.rank2.children[1].add_widget(more_rank2) self.rank2.children[1].size_hint = [1, None] self.rank3 = ThreeLineIconListItem( text=a[2][0], secondary_text='人口特性:' + str(a[2][1]), tertiary_text='新資所得:' + str(a[2][2])) #rank2.children[1].add_widget(MDLabel(text='新資所得' + str(a[1][2]), font_name='msjhbd.ttc', font_size=16, font_style='Body1')) #rank2.add_widget(tertiary_text='新資所得' + str(a[1][2])) self.rank3.add_widget(IconLeftWidget(icon='numeric-3-box')) self.rank3.bg_color = [0.5, 0.5, 0.5, 0.5] self.rank3.children[1].children[2].font_size = '18' self.rank3.children[1].children[2].font_name = 'msjhbd.ttc' self.rank3.children[1].children[1].font_name = 'msjhbd.ttc' self.rank3.children[1].children[0].font_name = 'msjhbd.ttc' more_rank3 = MDLabel(text='人口消長:' + str(a[2][3])) more_rank3.font_name = 'msjhbd.ttc' more_rank3.font_style = 'Body1' more_rank3.font_size = 16 more_rank3.color = [0, 0, 0, 0.54] self.rank3.children[1].add_widget(more_rank3) self.rank3.children[1].size_hint = [1, None] # rank2.children[1].(MDLabel(text='新資所得' + str(a[1][2]))) # rank2.children[1].children[3].font_name = 'msjhbd.ttc' # rank2.children[1].children[3].font_size = 16 # rank2.children[1].children[3].font_style = 'Body1' self.rank1.size = [352, 100] self.rank2.size = [352, 100] self.rank3.size = [352, 100] #rank1.children[1].pos_hint = {'y': 1} self.click += 1 self.rank1.bind(on_release=self.add_renk1_marker) self.rank2.bind(on_release=self.add_renk2_marker) self.rank3.bind(on_release=self.add_renk3_marker) # self.acard = MDDialog( # #title="Discard draft?", # type="simple", # items=[ # rank1, # rank2, # rank3 # ], # buttons=[ # MDFlatButton( # text=" ", text_color=self.theme_cls.primary_color # ), # MDRectangleFlatIconButton( # text="I know!", text_color=self.theme_cls.primary_color, font_name='msjhbd.ttc', on_release=self.dialog_vanish # ) # ], # #center = [640, 480] # ) # self.acard.center = [640, 480] # self.acard.background_color = [0,0,0,0] # self.acard.md_bg_color = [0.9607,0.9607,0.9607,0.6] # self.acard.auto_dismiss = False # #self.rank1 = TwoLineIconListItem(text=self.left.two.input1.text, icon='crown') # #self.rank1 = FourLineIconListItem(text=self.left.two.input1.text, text_color=[0,0,0,1]) # #self.rank1.add_widget(IconLeftWidget(icon='language-python')) # #self.rank1.bg_color=[0.5,0.5,0.5,0.5] # self.acard.size_hint = [0.25, 0.5] # self.acard.children[0].size_hint = [1, 1.1] # self.acard.children[0].children[2].children[0].spacing = [0, 3] # 這式調整各rank之間距離 # self.acard.children[0].children[2].size_hint = [1,1] # 這是調scrollview的size比例,不要有捲動行為 # self.acard.children[0].children[2].bar_width = 5 # self.acard.children[0].children[2].bar_color = [0.5, 0.5, 0.7, 1] #self.acard.children[0].children[2].children[0].children[2].size_hint = [1, 1] #self.acard.children[0].children[2].children[0].size_hint = [1,1] # 這是調 #self.acard.children[0].children[2].children[0].add_widget(self.rank1) self.rank1.children[1].padding = [56, 16, 24, 7] self.rank2.children[1].padding = [56, 4, 24, 7] self.rank3.children[1].padding = [56, 4, 24, 7] self.rank1.children[1].children[0].adaptive_height = True self.rank1.children[1].pos = [0, 180] self.rank2.children[1].children[1].adaptive_height = True self.rank2.children[1].pos = [0, 130] self.rank3.children[1].children[1].adaptive_height = True #rank1.children[1].children[0].valign = 'top' #rank1.children[1].children[0].y = 224 #self.acard. # self.acard.center_y = 480 # self.acard.pos_hint = {'top':0.99, 'right':1} # self.wid.add_widget(self.rank1) # self.wid.add_widget(self.rank2) # self.r.add_widget(self.rank3) self.add_widget( MDGridLayout(cols=1, size_hint=[0.285, 1], md_bg_color=[0.39, 0.4, 0.72, 1])) self.children[0].add_widget(self.rank1) self.children[0].add_widget(self.rank2) self.children[0].add_widget(self.rank3) def second_pressed(self, instance): self.map.children[0].unload() a = final_combiner.final_rank([ int(self.left.two.input1.text), int(self.left.two.input3.text), int(self.left.two.input5.text) ]) self.rank1.children[1].children[3].text = a[0][0] self.rank1.children[1].children[2].text = "人口特性:" + str(a[0][1]) self.rank1.children[1].children[1].text = "新資所得:" + str(a[0][2]) self.rank1.children[1].children[0].text = "人口消長:" + str(a[0][3]) self.rank2.children[1].children[3].text = a[1][0] self.rank2.children[1].children[2].text = "人口特性:" + str(a[1][1]) self.rank2.children[1].children[1].text = "新資所得:" + str(a[1][2]) self.rank2.children[1].children[0].text = "人口消長:" + str(a[1][3]) self.rank3.children[1].children[3].text = a[2][0] self.rank3.children[1].children[2].text = "人口特性:" + str(a[2][1]) self.rank3.children[1].children[1].text = "新資所得:" + str(a[2][2]) self.rank3.children[1].children[0].text = "人口消長:" + str(a[2][3]) self.rank1.bind(on_release=self.add_renk1_marker) self.rank2.bind(on_release=self.add_renk2_marker) self.rank3.bind(on_release=self.add_renk3_marker) def add_renk1_marker(self, instance): # print(len(self.map.children[2])) cla_list = [ self.left.three.btn1.text.strip(), self.left.three.btn2.text.strip(), self.left.three.btn3.text.strip(), self.left.three.btn4.text.strip() ] ch_list = [ self.left.three.input1.active, self.left.three.input2.active, self.left.three.input3.active, self.left.three.input4.active ] act_list = [] for cont in range(4): if ch_list[cont] == True: act_list.append(cla_list[cont]) self.add_shop(self.rank1.text, act_list) self.add_temp(self.rank1.text, self.left.four.input.active) self.add_rent(self.rank1.text, int(self.lower_bound.text), int(self.upper_bound.text)) def add_renk2_marker(self, instance): cla_list = [ self.left.three.btn1.text.strip(), self.left.three.btn2.text.strip(), self.left.three.btn3.text.strip(), self.left.three.btn4.text.strip() ] ch_list = [ self.left.three.input1.active, self.left.three.input2.active, self.left.three.input3.active, self.left.three.input4.active ] act_list = [] for cont in range(4): if ch_list[cont] == True: act_list.append(cla_list[cont]) self.add_shop(self.rank2.text, act_list) self.add_temp(self.rank2.text, self.left.four.input.active) self.add_rent(self.rank2.text, int(self.lower_bound.text), int(self.upper_bound.text)) def add_renk3_marker(self, instance): cla_list = [ self.left.three.btn1.text.strip(), self.left.three.btn2.text.strip(), self.left.three.btn3.text.strip(), self.left.three.btn4.text.strip() ] ch_list = [ self.left.three.input1.active, self.left.three.input2.active, self.left.three.input3.active, self.left.three.input4.active ] act_list = [] for cont in range(4): if ch_list[cont] == True: act_list.append(cla_list[cont]) self.add_shop(self.rank3.text, act_list) self.add_temp(self.rank3.text, self.left.four.input.active) self.add_rent(self.rank3.text, int(self.lower_bound.text), int(self.upper_bound.text)) def dialog_vanish(self, obj): self.acard.dismiss() #self.add_widget(Button(text ='Download', on_release = self.pop)) # the function which works when you clicj = k the button #self.popup.open() def progress_reset(self, run): self.progress_bar.value = 1 #self.add_widget(MDRaisedButton(text='hi',md_bg_color=[1,0,0,1])) #self.canvas.add(rect_color) # self.canvas.add(rect) #rect_color1 #rect1 # Add a red color #Color(1., 0, 0) # Add a rectangle # Button(text='ho') #Color(1., 0, 0) #self.canvas.open() # To continuesly increasing the value of pb. def next(self, dt): self.progress_bar.value += 6 if self.progress_bar.value >= 100: Clock.schedule_once(self.popup.dismiss, 0.5) if self.click == 0: Clock.schedule_once(self.pressed, 0.6) else: Clock.schedule_once(self.second_pressed, 0.6) #else: Clock.unschedule(self.event) Clock.schedule_once(self.progress_reset, 0.6) def puopen(self, instance): self.event = Clock.schedule_interval(self.next, 1 / 20)