Python文件
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window
from kivy.config import Config
from kivymd.uix.list import OneLineListItem
#Ukuran window
Config.set('graphics', 'width', '1000')
Config.set('graphics', 'height', '600')
Config.set('graphics', 'resizable', False)
#Set window preview
Window.size = (1000, 600)
class MainApp(MDApp):
def build(self):
return Builder.load_file("interface.kv")
def test(self):
for i in range(20):
item = OneLineListItem(
text=f'Items number {i}'
)
self.root.ids.items.add_widget(item)
MainApp().run() ```
kivy file
#:kivy 2.3.0
FloatLayout: #--------------------------------标题-------------------- 图像: 来源:'ex.png' 大小提示:(0.3,0.3) pos_hint: {'x':-.05,'y': .75}
MDLabel:
text: "Invoice System"
font_size: '50sp'
halign: 'center'
pos_hint: {'y': .4}
#----------------项目------------ ---- MD文本字段: 模式:“填充” 提示文本:“???” 尺寸提示:(.4,.1) pos_hint: {'x': .05, 'y': .65}
MDTextField:
mode: 'fill'
hint_text: "???"
size_hint: (.14, .1)
pos_hint: {'x': .46, 'y': .65}
MDTextField:
mode: 'fill'
hint_text: "???"
size_hint: (.14, .1)
pos_hint: {'x': .61, 'y': .65}
MDFillRoundFlatIconButton:
style: 'filled'
text: "Add"
size_hint: (.1, .1)
pos_hint: {'x': .79, 'y': .65}
#------------ 项目列表 -------------- ----- MDBox布局: md_bg_color: '#B5C0D0' 大小提示:(.846,.37) pos_hint: {'x':.05, 'y': .25} 填充:10 方向:'垂直'
MDScrollView:
MDList:
id: items
#------------ 最后一个按钮 -------------------- MDFFillRoundFlatIconButton: 风格: '填充' 文本:“开具发票” 尺寸提示:(.21,.15) pos_hint: {'x': .35, 'y': .08}
The problem is with the kivy file in the "Item List" section
I tried to create a scroll view inside a container which is a box layout. Inside the box layout, there is a scroll view that contains a list. The list is generated from a "for" loop which produces text to be displayed in the scroll view. However, the scroll view does not display the text generated from the loop.
问题出在 Kivy 代码中,没有将
MDList
对象的高度绑定到其父对象的
ScrollView
对象上。因此,
ScrollView
不知道
MDList
的内容何时超过其边界,因此不会启用滚动。
以下是解决此问题的步骤:
-
导入
BoxLayout
和size_hint_y
: 需要导入BoxLayout
用于设置MDList
的布局,并使用size_hint_y
属性来控制其高度。 -
将
MDList
包裹在BoxLayout
中 : 这将允许控制MDList
的高度,并使其根据其内容动态调整大小。 -
绑定
MDList
的高度 : 需要将MDList
的高度绑定到其内容的高度。这将确保当MDList
中添加更多项目时,ScrollView
会相应地更新其滚动区域。
以下是修改后的
.kv
文件代码:
#:kivy 2.3.0
<pre><code>
FloatLayout:
#--------------------------------标题--------------------
Image:
source: 'ex.png'
size_hint: (0.3, 0.3)
pos_hint: {'x': -.05, 'y': .75}
MDLabel:
text: "Invoice System"
font_size: '50sp'
halign: 'center'
pos_hint: {'y': .4}
#----------------项目--------------------
MDTextField:
mode: 'fill'
hint_text: "???"
size_hint: (.4, .1)
pos_hint: {'x': .05, 'y': .65}
MDTextField:
mode: 'fill'
hint_text: "???"
size_hint: (.14, .1)
pos_hint: {'x': .46, 'y': .65}
MDTextField:
mode: 'fill'
hint_text: "???"
size_hint: (.14, .1)
pos_hint: {'x': .61, 'y': .65}
MDFillRoundFlatIconButton:
style: 'filled'
text: "Add"
size_hint: (.1, .1)
pos_hint: {'x': .79, 'y': .65}
#------------ 项目列表 ----------------------
MDBoxLayout:
md_bg_color: '#B5C0D0'
size_hint: (.846, .37)
pos_hint: {'x': .05, 'y': .25}
padding: 10
orientation: 'vertical'
MDScrollView:
BoxLayout:
id: items_container
orientation: 'vertical'
size_hint_y: None
height: self.minimum_height
MDList:
id: items
# 不需要设置 size_hint_y 或 height
#------------ 最后一个按钮 --------------------
MDFillRoundFlatIconButton:
style: 'filled'
text: "开具发票"
size_hint: (.21, .15)
pos_hint: {'x': .35, 'y': .08}
</code></pre>
通过这些更改,的
MDList
现在应该可以正确滚动以显示所有添加的项目。