Добрый день для всех! Я столкнулся с проблемой в Kivy Mapview. Приложение в телефоне автоматически увеличивается при прикосновении одним пальцем. Такие методы, как Touch_up () или Touch_down () из библиотеки не работают. Я попытался отключить его с помощью window.config (multitouch = false) - это тоже не помогает. Я не могу найти решение нигде (
При запуске на рабочем столе поведение также неадекватное: после прокрутки зум с мышью через левую кнопку, когда я начинаю перемещать карту, происходит спонтанное масштаб. Как избавиться от этого?import sqlite3
from kivy.app import App
from kivy_garden.mapview import MapMarkerPopup
from kivy.uix.label import Label
from kivy.app import Builder
from kivy.core.window import Window
Window.softinput_mode = "below_target"
Window.fullscreen = False
conn = sqlite3.connect('points.db')
cur = conn.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS objects
(obj_type TEXT, obj_name TEXT, lat FLOAT, lon FLOAT)''')
conn.commit()
conn.close()
class MapApp(App):
def on_start(self):
self.markers = []
def search_point(self, text):
text = text.lower()
conn = sqlite3.connect('points.db')
cur = conn.cursor()
req = f"SELECT * FROM objects WHERE obj_name = '{text}'"
cur.execute(req)
rows = cur.fetchall()
conn.close()
if rows:
for row in rows:
marker_type, marker_name, lat, lon = row
if text in marker_name:
self.root.ids.mapview.center_on(lat, lon)
self.root.ids.input_text.text = ""
self.make_marker(_type=marker_type, name=marker_name, lat=lat, lon=lon)
break
def make_marker(self, _type, name, lat, lon):
marker = MapMarkerPopup(lat=lat, lon=lon, source=f"marker.png")
text_on_marker = Label(text=name, color=(0, 0, 0, 1), size=(100, 40), size_hint=(None, None), font_size=25, bold = 1)
marker.add_widget(text_on_marker)
for pre_marker in self.markers:
self.root.ids.mapview.remove_marker(pre_marker)
self.markers.append(marker)
self.root.ids.mapview.add_marker(marker)
marker.on_release(self.root.ids.mapview)
self.root.ids.mapview.zoom = 15
def build(self):
return Builder.load_file("Map.kv")
if __name__ == "__main__":
MapApp().run()
< /code>
map.kv
#: import MapView kivy_garden.mapview.MapView
#: import MapMarkerPopup kivy_garden.mapview.MapMarkerPopup
# root
GridLayout:
cols:1
# search_layer
GridLayout:
cols:3
size_hint: (1, 0.1)
# inline_box
TextInput:
id: input_text
multiline: False
# search_btn
Button:
name:"search_markers"
id:search_markers
text: "Search"
size_hint_x: 0.25
on_release:
app.search_point(text=input_text.text)
# map_layer
MapView:
id: mapview
size_hint: (1, 1)
zoom: 12
lat: 40.71427
lon: -74.00597
# red +
canvas:
Color:
rgba: 1, 0, 0, 1
# vertical_line
Line:
points: self.center_x, self.center_y+10, self.center_x, self.center_y-10
width: 2
# horizontal_line
Line:
points: self.center_x+10, self.center_y, self.center_x-10, self.center_y
width: 2
< /code>
p.s. Не смотрите на SQLite DB. Сейчас это не имеет значения. Код был упрощен, чтобы справиться с контролем сенсорного экрана. База данных необходима для загрузки пользовательских тегов. Прямо сейчас вся проблема вращается вокруг произвольного масштабирования карты при перетаскивании карты.
Подробнее здесь: https://stackoverflow.com/questions/793 ... app-python