【问题标题】:kivy - First row in a GridLayout is blank and the last one is hidden, ScrollViewkivy - GridLayout 中的第一行是空白的,最后一行是隐藏的,ScrollView
【发布时间】:2021-04-29 04:10:52
【问题描述】:

我正在尝试在 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 grid-layout


    【解决方案1】:

    我认为问题在于make() 方法中创建的Labels 的大小。尝试类似:

        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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 2014-07-08
      • 2017-10-14
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      相关资源
      最近更新 更多