So here is the problem.. Once i changed to Datasheet screen the buttons of MDList gets struck.. Is their any way to fix this
I can't use any other widget other than MDDATATable and i think it is the main problem.. is this a inbuilt bug or is their something wrong in my code.. please clear
from kivy.metrics import dp
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
from kivy.properties import ListProperty
from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable
kv = '''
<Somecls>:
scrn_manager : scrn_manager
MDList:
size_hint : 0.3,1
pos_hint : {'x':0.0, 'top':1}
TwoLineListItem:
text : 'First Screen'
secondary_text : 'Go to home screen'
on_release:
scrn_manager.current = 'Home page'
TwoLineListItem:
text : 'Data Sheet'
secondary_text : 'View Data'
on_release:
scrn_manager.current = 'Data Table'
ScreenManager:
id : scrn_manager
size_hint : 0.7,1
pos_hint : {'x':0.3 , 'top':1}
Screen:
name : 'Home page'
Label:
size_hint : 1,1
text : 'This is just an example'
Screen:
name : 'Data Table'
'''
class Somecls(FloatLayout):
row_data = ListProperty([])
column_data = ListProperty([])
def __init__(self,**kwargs):
super(Somecls, self).__init__(**kwargs)
self.data_table = MDDataTable(
pos_hint = {'x':0.01 , 'top':0.96},
size_hint = (0.8 , 0.96),
use_pagination = True,
column_data = [
("No.", dp(30)),
("Column 1", dp(30)),
("Column 2", dp(30)),
("Column 3", dp(30)),
("Column 4", dp(30)),
("Column 5", dp(30)),
],
row_data = [
(
f"{i + 1}",
"1",
"2",
"3",
"4",
"5",
)
for i in range(49)
])
self.scrn_manager.get_screen('Data Table').add_widget(self.data_table)
class Example(MDApp):
column_data = ListProperty([])
row_data = ListProperty([])
def build(self):
Builder.load_string(kv)
return Somecls()
Example().run()
Any help is apperciated
That is the way MDDataTable
is designed. It is an extension the kivy ModalView
, which means that while it is displayed nothing else is operational. I guess the intent is that you must interact with the MDDataTable
before continuing.
You do not have to use MDDataTable
. Here is a modified version of your code that uses a RecycleGridLayout
inside a RecycleView
:
from kivy.clock import Clock
from kivy.metrics import dp
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
from kivy.properties import ListProperty
from kivymd.app import MDApp
kv = '''
<Somecls>:
scrn_manager : scrn_manager
MDList:
size_hint : 0.3,1
pos_hint : {'x':0.0, 'top':1}
TwoLineListItem:
text : 'First Screen'
secondary_text : 'Go to home screen'
on_release:
scrn_manager.current = 'Home page'
TwoLineListItem:
text : 'Data Sheet'
secondary_text : 'View Data'
on_release:
scrn_manager.current = 'Data Table'
ScreenManager:
id : scrn_manager
size_hint : 0.7,1
pos_hint : {'x':0.3 , 'top':1}
Screen:
name : 'Home page'
Label:
size_hint : 1,1
text : 'This is just an example'
Screen:
name : 'Data Table'
RecycleView:
id: rv
viewclass: 'MDLabel'
RecycleGridLayout:
row_default_height: 40
col_default_width: 200
cols: 6
size_hint: None, None
size: self.minimum_size
'''
class Somecls(FloatLayout):
row_data = ListProperty([])
column_data = ListProperty([])
def __init__(self,**kwargs):
super(Somecls, self).__init__(**kwargs)
Clock.schedule_once(self.setup_data_table)
def setup_data_table(self, dt):
data = []
column_data = [
("No.", dp(30)),
("Column 1", dp(30)),
("Column 2", dp(30)),
("Column 3", dp(30)),
("Column 4", dp(30)),
("Column 5", dp(30)),
]
for col in column_data:
data.append({'text':col[0], 'size_hint_y':None, 'height':col[1], 'halign':'center'})
row_data = [
(
f"{i + 1}",
"1",
"2",
"3",
"4",
"5",
)
for i in range(49)
]
for row in row_data:
for col in row:
data.append({'text':col, 'halign':'center'})
self.ids.rv.data = data
class Example(MDApp):
column_data = ListProperty([])
row_data = ListProperty([])
def build(self):
Builder.load_string(kv)
return Somecls()
Example().run()
It seems i have found a way. Please suggest if it is a great idea.
from kivy.metrics import dp
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
from kivy.properties import ListProperty
from kivymd.uix.list import MDList , TwoLineListItem
from kivymd.uix.card import MDCard
from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable
kv = '''
<Somecls>:
scrn_manager : scrn_manager
ScreenManager:
id : scrn_manager
size_hint : 1,1
pos_hint : {'x':0.0 , 'top':1}
Screen:
name : 'Home page'
MDList:
size_hint : 0.3,1
pos_hint : {'x':0.0, 'top':1}
TwoLineListItem:
text : 'First Screen'
secondary_text : 'Go to home screen'
on_release:
scrn_manager.current = 'Home page'
TwoLineListItem:
text : 'Data Sheet'
secondary_text : 'View Data'
on_release:
scrn_manager.current = 'Data Table'
MDLabel:
size_hint : 1,1
text : 'Home Page'
halign : 'center'
Screen:
name : 'Data Table'
'''
class Somecls(FloatLayout):
row_data = ListProperty([])
column_data = ListProperty([])
def __init__(self, **kwargs):
super(Somecls, self).__init__(**kwargs)
self.card_ = MDCard(size_hint = (0.3,1) , pos_hint = {'x':0 , 'top':1} ,elevation = 0)
self.flt = FloatLayout()
self.data_table = MDDataTable(
pos_hint={'x': 0.31, 'top': 0.96},
size_hint=(0.7, 0.96),
use_pagination=True,
rows_num = 10,
column_data=[
("No.", dp(30)),
("Column 1", dp(30)),
("Column 2", dp(30)),
("Column 3", dp(30)),
("Column 4", dp(30)),
("Column 5", dp(30)),
],
row_data=[
(
f"{i + 1}",
"1",
"2",
"3",
"4",
"5",
)
for i in range(49)
])
self.screen_list = MDList(size_hint = (1,1) , pos_hint = {'x':0.0 , 'top':1} )
self.list_item_1 = TwoLineListItem(text = 'Home Page' , secondary_text = 'Go to home page')
self.screen_list.add_widget(self.list_item_1)
self.list_item_1.bind(on_release = self.func1)
self.list_item_2 = TwoLineListItem(text = 'Data Sheet' , secondary_text = 'Go to datasheet view')
self.screen_list.add_widget(self.list_item_2)
self.list_item_2.bind(on_release = self.func2)
self.scrn_manager.get_screen('Data Table').add_widget(self.data_table)
self.scrn_manager.get_screen('Data Table').add_widget(self.card_)
self.flt.add_widget(self.screen_list)
self.card_.add_widget(self.flt)
def func1(self,instance):
self.scrn_manager.current = 'Home page'
def func2(self,instance):
self.scrn_manager.current = 'Data Table'
class Example(MDApp):
column_data = ListProperty([])
row_data = ListProperty([])
def build(self):
Builder.load_string(kv)
return Somecls()
Example().run()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.