【发布时间】: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