我添加到无限滚动视图的图像越多,它们变得越小
The more images I add to an infinite scrollview the smaller they get
我正在尝试在 kivy 中制作一个 reader 应用程序。我在滚动视图中显示图像时遇到问题。我添加的图像越多,它们变得越小。
是否有某种动态方式可以让我获取适合全屏大小的图像?
我确实有一些代码,但现在宁愿放弃它。 y 轴上的大小提示似乎有所作为,但我想看看是否有更好的方法。
import os
from kivy.app import App
from kivy.uix.image import AsyncImage
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from kivy.uix.scrollview import ScrollView
from PIL import Image as Image1
path = 'F:\manga\A Strange Life\1\'
Window.clearcolor = (1,1,1,1)
Window.size = (1000, 200)
class MainApp(App):
def images_size(self,img_size, **kwargs):
width, height = Window.size
return width, (img_size[0] * height / width)
def build(self):
root = ScrollView(size=(Window.width,Window.height))
layout = GridLayout(cols=1,size_hint=(1,None),height=self.minimum_height)
for i in range(1,len(os.listdir(path))+1):
img_size = Image1.open(f'{path}{str(i)}.jpg').size
img = AsyncImage(source=f'{path}{str(i)}.jpg',nocache=True)
layout.add_widget(img)
root.add_widget(layout)
return root
MainApp().run()
第一个问题是代码:
layout = GridLayout(cols=1,size_hint=(1,None),height=self.minimum_height)
将失败,因为此时 self.minimum_height
正在尝试访问 MainApp
的 minimum_height
属性(不存在)。使用 minimum_height
是您需要做的,但是您需要绑定代码以在 minimum_height
更改时设置 GridLayout
的 height
。但是,如果您使用 kivy 语言,该绑定会自动为您创建。这是执行此操作的 kv
语言字符串:
#:import Window kivy.core.window.Window
ScrollView:
size_hint: None, None
size: Window.size
GridLayout:
id: grid
cols: 1
size_hint: 1, None
height: self.minimum_height
然后您可以通过 grid
id 访问它,将 Images
添加到 GridLayout
。这是执行上述所有操作的代码的修改版本:
import os
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.image import AsyncImage
from kivy.core.window import Window
from PIL import Image as Image1
path = 'F:\manga\A Strange Life\1\'
Window.clearcolor = (1,1,1,1)
Window.size = (1000, 200)
kv = '''
#:import Window kivy.core.window.Window
ScrollView:
size_hint: None, None
size: Window.size
GridLayout:
id: grid
cols: 1
size_hint: 1, None
height: self.minimum_height
'''
class MainApp(App):
def images_size(self,img_size, **kwargs):
width, height = Window.size
return width, (img_size[0] * height / width)
def build(self):
root = Builder.load_string(kv)
layout = root.ids.grid
for i in range(1,len(os.listdir(path))+1):
img_size = Image1.open(f'{path}{str(i)}.jpg').size
img = AsyncImage(source=f'{path}{str(i)}.jpg',nocache=True, size_hint=(None, None), size=img_size)
layout.add_widget(img)
return root
MainApp().run()
我正在尝试在 kivy 中制作一个 reader 应用程序。我在滚动视图中显示图像时遇到问题。我添加的图像越多,它们变得越小。
是否有某种动态方式可以让我获取适合全屏大小的图像?
我确实有一些代码,但现在宁愿放弃它。 y 轴上的大小提示似乎有所作为,但我想看看是否有更好的方法。
import os
from kivy.app import App
from kivy.uix.image import AsyncImage
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from kivy.uix.scrollview import ScrollView
from PIL import Image as Image1
path = 'F:\manga\A Strange Life\1\'
Window.clearcolor = (1,1,1,1)
Window.size = (1000, 200)
class MainApp(App):
def images_size(self,img_size, **kwargs):
width, height = Window.size
return width, (img_size[0] * height / width)
def build(self):
root = ScrollView(size=(Window.width,Window.height))
layout = GridLayout(cols=1,size_hint=(1,None),height=self.minimum_height)
for i in range(1,len(os.listdir(path))+1):
img_size = Image1.open(f'{path}{str(i)}.jpg').size
img = AsyncImage(source=f'{path}{str(i)}.jpg',nocache=True)
layout.add_widget(img)
root.add_widget(layout)
return root
MainApp().run()
第一个问题是代码:
layout = GridLayout(cols=1,size_hint=(1,None),height=self.minimum_height)
将失败,因为此时 self.minimum_height
正在尝试访问 MainApp
的 minimum_height
属性(不存在)。使用 minimum_height
是您需要做的,但是您需要绑定代码以在 minimum_height
更改时设置 GridLayout
的 height
。但是,如果您使用 kivy 语言,该绑定会自动为您创建。这是执行此操作的 kv
语言字符串:
#:import Window kivy.core.window.Window
ScrollView:
size_hint: None, None
size: Window.size
GridLayout:
id: grid
cols: 1
size_hint: 1, None
height: self.minimum_height
然后您可以通过 grid
id 访问它,将 Images
添加到 GridLayout
。这是执行上述所有操作的代码的修改版本:
import os
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.image import AsyncImage
from kivy.core.window import Window
from PIL import Image as Image1
path = 'F:\manga\A Strange Life\1\'
Window.clearcolor = (1,1,1,1)
Window.size = (1000, 200)
kv = '''
#:import Window kivy.core.window.Window
ScrollView:
size_hint: None, None
size: Window.size
GridLayout:
id: grid
cols: 1
size_hint: 1, None
height: self.minimum_height
'''
class MainApp(App):
def images_size(self,img_size, **kwargs):
width, height = Window.size
return width, (img_size[0] * height / width)
def build(self):
root = Builder.load_string(kv)
layout = root.ids.grid
for i in range(1,len(os.listdir(path))+1):
img_size = Image1.open(f'{path}{str(i)}.jpg').size
img = AsyncImage(source=f'{path}{str(i)}.jpg',nocache=True, size_hint=(None, None), size=img_size)
layout.add_widget(img)
return root
MainApp().run()