Я не знаю, как изменить активный (выделенный) сегмент MDSegmentedControl в KivyMD, не касаясь его (например, после загрузки данных из базы данных и открытия экрана). Я могу установить для свойства current_active_segment один из MDSegmentedControlItem, но это не повлияет на пользовательский интерфейс. Пример кода ниже:
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.metrics import dp
from kivy.input.providers.mouse import MouseMotionEvent
from kivy.clock import Clock
kvFloatLayout = """
MDScreen:
id: mdscr
MDBoxLayout:
orientation: "vertical"
adaptive_height: True
pos_hint: {"top": 1}
spacing: "12dp"
MDTopAppBar:
id: top_app_bar
pos_hint: {"top": 1}
title: "Test App"
elevation: 4
MDBoxLayout:
orientation: "vertical"
adaptive_height: True
pos_hint: {"top": 1}
padding: "12dp", "0dp", "12dp", "12dp"
spacing: "12dp"
MDRaisedButton:
id: btn_resize
text: "Resize"
on_release: app.seg_resize()
MDRaisedButton
id: btn_change
text: "Change selection"
on_release: app.seg_change_selection()
MDSegmentedControl:
id: seg_options
MDSegmentedControlItem:
id: sci_option1
text: "Option left"
MDSegmentedControlItem:
id: sci_option2
text: "Option right"
"""
class TestApp(MDApp):
def build(self):
return Builder.load_string(kvFloatLayout)
def seg_resize(self):
#Workaround from stackoverflow (size not working in .kv - https://stackoverflow.com/questions/749 ... ntrol-size)
self.root.ids.seg_options.ids.segment_panel.width = (Window.width - dp(24))
def seg_change_selection(self):
sc = self.root.ids.seg_options
print("---sc:")
print(sc)
sci = self.root.ids.sci_option2
print("---sci:")
print(sci)
print("---sc.current_active_segment before:")
print(sc.current_active_segment)
sc.current_active_segment = sci
print("---sc.current_actilve_segment after:")
print(sc.current_active_segment.text)
#A poor workaround with mouse click:
#Clock.schedule_once(self.simulate_mouse_click, 1)
def simulate_mouse_click(self, *args):
x = 0.75*Window.width
y = Window.height - \
self.root.ids.top_app_bar.height - \
self.root.ids.btn_resize.height - \
self.root.ids.btn_change.height - \
dp(12) * 3 - 40
touch = MouseMotionEvent(None, 0, (x,y)) # args are device, id, spos
touch.button = 'left'
touch.pos = (x,y)
touch.x = touch.px = touch.ox = x
touch.y = touch.py = touch.oy = y
print("---touch")
print(str(touch))
Window.dispatch('on_touch_down', touch)
#1/0
TestApp().run()
Есть идеи или обходные пути?
Единственный способ заставить это работать — запланировать щелчок мышью по нужному элементу сегмента, но, конечно, это далеко не хорошее и надежное решение. Вот эта часть кода:
#Clock.schedule_once(self.simulate_mouse_click, 1)
Подробнее здесь: https://stackoverflow.com/questions/778 ... tedcontrol
KivyMD: как изменить активный элемент MDSegmentedControl ⇐ Python
Программы на Python
-
Anonymous
1731401070
Anonymous
Я не знаю, как изменить активный (выделенный) сегмент MDSegmentedControl в KivyMD, не касаясь его (например, после загрузки данных из базы данных и открытия экрана). Я могу установить для свойства current_active_segment один из MDSegmentedControlItem, но это не повлияет на пользовательский интерфейс. Пример кода ниже:
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.metrics import dp
from kivy.input.providers.mouse import MouseMotionEvent
from kivy.clock import Clock
kvFloatLayout = """
MDScreen:
id: mdscr
MDBoxLayout:
orientation: "vertical"
adaptive_height: True
pos_hint: {"top": 1}
spacing: "12dp"
MDTopAppBar:
id: top_app_bar
pos_hint: {"top": 1}
title: "Test App"
elevation: 4
MDBoxLayout:
orientation: "vertical"
adaptive_height: True
pos_hint: {"top": 1}
padding: "12dp", "0dp", "12dp", "12dp"
spacing: "12dp"
MDRaisedButton:
id: btn_resize
text: "Resize"
on_release: app.seg_resize()
MDRaisedButton
id: btn_change
text: "Change selection"
on_release: app.seg_change_selection()
MDSegmentedControl:
id: seg_options
MDSegmentedControlItem:
id: sci_option1
text: "Option left"
MDSegmentedControlItem:
id: sci_option2
text: "Option right"
"""
class TestApp(MDApp):
def build(self):
return Builder.load_string(kvFloatLayout)
def seg_resize(self):
#Workaround from stackoverflow (size not working in .kv - https://stackoverflow.com/questions/74999000/kivymd-mdsegmentedcontrol-size)
self.root.ids.seg_options.ids.segment_panel.width = (Window.width - dp(24))
def seg_change_selection(self):
sc = self.root.ids.seg_options
print("---sc:")
print(sc)
sci = self.root.ids.sci_option2
print("---sci:")
print(sci)
print("---sc.current_active_segment before:")
print(sc.current_active_segment)
sc.current_active_segment = sci
print("---sc.current_actilve_segment after:")
print(sc.current_active_segment.text)
#A poor workaround with mouse click:
#Clock.schedule_once(self.simulate_mouse_click, 1)
def simulate_mouse_click(self, *args):
x = 0.75*Window.width
y = Window.height - \
self.root.ids.top_app_bar.height - \
self.root.ids.btn_resize.height - \
self.root.ids.btn_change.height - \
dp(12) * 3 - 40
touch = MouseMotionEvent(None, 0, (x,y)) # args are device, id, spos
touch.button = 'left'
touch.pos = (x,y)
touch.x = touch.px = touch.ox = x
touch.y = touch.py = touch.oy = y
print("---touch")
print(str(touch))
Window.dispatch('on_touch_down', touch)
#1/0
TestApp().run()
Есть идеи или обходные пути?
Единственный способ заставить это работать — запланировать щелчок мышью по нужному элементу сегмента, но, конечно, это далеко не хорошее и надежное решение. Вот эта часть кода:
#Clock.schedule_once(self.simulate_mouse_click, 1)
Подробнее здесь: [url]https://stackoverflow.com/questions/77810371/kivymd-how-can-i-change-active-item-of-mdsegmentedcontrol[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия