当文本变大时,在kivy(python)中仅包含一个Label的ScrollView中不显示文本

ercv8c1e  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(110)

我正在使用Kivy(2.2.1)框架用Python(3.9-64)编写一个应用程序。我在ScrollView中有一个标签,它有很多行。只要文本在屏幕上占用的空间不是太大,滚动就可以正常工作。如果减小字体大小,我可以查看行数更多文本。如果文本在给予字体大小下太长,则不显示文本。
BEE是MWE。当我在我的Windows机器上测试时(如果我改变显示分辨率,行为不会改变),如果字体大小为11或更小(代码中的self.fontSizeSmall),则显示文本(1000行,但可以通过更改代码中m变量的值来设置更多或更少),而不是12或更大。
行为是相同的(虽然我不知道确切的文本长度和字体大小)在我的Android应用程序在三星手机上时,建立在Ubuntu上使用builddozer。
如果你能帮忙的话,我将不胜感激。我在StackOverflow上发现了几个类似的问题,但是大多数都没有使用单个标签,我必须承认我没有很好地理解解决方案。
代码如下:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window

m = 200

class MainApp(App):
    def build(self):
        
        self.fontSize=24
        self.fontSizeSmall=12
        self.widgetsFontSize=[]
        self.widgetsFontSizeSmall=[]
                
        main_layout = BoxLayout(orientation="vertical")
        self.zgodovina=""
        
        for i in range(m):
            self.zgodovina= """

Some multilne, but not too long text.
Repeated multplie times.
In acctual app these are log entires.
There can be really a lot of them
""" + self.zgodovina
        scrollViewHist=ScrollView(size_hint=(None,5), size=(Window.width, Window.height))
        self.ZgodovinaLabel=Label(text=self.zgodovina,size_hint=(None, None), padding=[10,0], font_size=self.fontSizeSmall)
        self.ZgodovinaLabel.bind(texture_size=self.ZgodovinaLabel.setter('size'))
        self.ZgodovinaLabel.bind(size_hint_min_x=self.ZgodovinaLabel.setter('width'))
        scrollViewHist.add_widget(self.ZgodovinaLabel)
        self.widgetsFontSizeSmall.append(self.ZgodovinaLabel)
        main_layout.add_widget(scrollViewHist)
        
        
        fontPlusButton=Button(text="Font +", font_size=self.fontSize)
        fontPlusButton.bind(on_press=self.fontPlus)
        main_layout.add_widget(fontPlusButton)
        self.widgetsFontSize.append(fontPlusButton)

        fontMinusButton=Button(text="Font -", font_size=self.fontSize)
        fontMinusButton.bind(on_press=self.fontMinus)
        main_layout.add_widget(fontMinusButton)
        self.widgetsFontSize.append(fontMinusButton)
        
        return main_layout

    def fontPlus(self, instance):
       self.fontSize=self.fontSize+2
       self.fontSizeSmall=self.fontSizeSmall+1
       print(self.fontSizeSmall)
       for iWidget in self.widgetsFontSize:
           iWidget.font_size=self.fontSize
       for iWidget in self.widgetsFontSizeSmall:
           iWidget.font_size=self.fontSizeSmall

    def fontMinus(self, instance):
       self.fontSize=self.fontSize-2
       self.fontSizeSmall=self.fontSizeSmall-1       
       print(self.fontSizeSmall)
       for iWidget in self.widgetsFontSize:
           iWidget.font_size=self.fontSize
       for iWidget in self.widgetsFontSizeSmall:
           iWidget.font_size=self.fontSizeSmall        
           
       
MainApp().run()
xdnvmnnf

xdnvmnnf1#

您超过了Label中支持的最大纹理大小。您可以使用以下命令访问该最大值:

from kivy.graphics.opengl import glGetIntegerv, GL_MAX_TEXTURE_SIZE
print('max texture size:', glGetIntegerv(GL_MAX_TEXTURE_SIZE)[0])

任何尺寸大于GL_MAX_TEXTURE_SIZE的纹理都将被忽略。也许使用一个BoxLayout,将文本分散在多个Labels中会起作用。

相关问题