kivy - GridLayout 中的第一行为空,最后一行是隐藏的,ScrollView

kivy - First row in a GridLayout is blank and the last one is hidden, ScrollView

提问人:Leon Kardaš 提问时间:4/28/2021 最后编辑:Leon Kardaš 更新时间:4/29/2021 访问量:284

问:

我正在尝试在 Kivy 中制作一个可滚动的长列表(例如歌曲列表)。一切正常,除了看起来一切都向下移动了一位(我尝试打印位置,空白位置(第一行)将具有第一行的值,但会输出一个空行,然后第二行也将具有正确的值,但会输出到屏幕第一行的值, 我描述得很差,所以如果有人需要更多信息,我很乐意发布代码)

它不会产生错误,但令人不快,并且会使其余代码无法工作。

这是我可以重现错误的最小代码: 为了简化起见,我没有使用 .kv 文件,还要注意变量: brojPjesmi 是要创建多少行的变量 var1 和 var2 通常是打印到行的变量

from kivy.app import *
from kivy.uix.label import *
from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window
from kivy.uix.gridlayout import GridLayout


brojPjesmi = 20
var1 = 0
var2 = 1
class MyRow(ScrollView):
    def __init__(self, **kwargs):
        super(MyRow, self).__init__(**kwargs)
        self.size_hint=(1,None)
        self.size=(Window.width,Window.height)
        layout = GridLayout(cols = 1,spacing= 10,size_hint_y = None)
        layout.bind(minimum_height = layout.setter('height'))
        for i in range(brojPjesmi):
            self.z = OneRow()
            self.u = self.z.make(var1,var2)
            layout.add_widget(self.u)
        self.add_widget(layout)

class OneRow(GridLayout):
    def make(self,x,y):
        self.cols = 3
        self.rows = 1
        self.height = 25
        self.size_hint_y = None
        self.Treci = Label(text = str(""),size_hint_y= None,size_hint_x =.1)
        self.prviDio = Label(text = str("y"),size_hint_y= None)
        self.drugiDio = Label(text = str("x"),size_hint_y= None)
        self.add_widget(self.Treci)
        self.add_widget(self.prviDio)
        self.add_widget(self.drugiDio)
        return self
class langApp(App):
    def build(self):
        return MyRow()

if __name__ == '__main__':
    langApp().run()

更新: 我认为错误在这 3 行代码中的某个地方:

            self.z = OneRow()
            self.u = self.z.make(var1,var2)
            layout.add_widget(self.u)

因为当我用

    btn = Button(text=str(i), size_hint_y=None, height=40)
    layout.add_widget(btn)

它完美无缺

python oop scroll kivy 网格布局

评论


答:

0赞 John Anderson 4/29/2021 #1

我相信问题出在方法中创建的大小。尝试如下操作:Labelsmake()

    self.Treci = Label(text = str(""), size_hint=(None, None), height=25, width=50)
    self.prviDio = Label(text = str("y"), size_hint=(None, None), height=25, width=50)
    self.drugiDio = Label(text = str(x), size_hint=(None, None), height=25, width=50)