繁体   English   中英

根据文本更改标签大小

[英]Change the label size depending on the text

我想在应用运行时将文本添加到标签。 它放置在FloatLayout中,后者放置在ScrollView中,以便我可以滚动浏览文本。 我希望FloatLayout的大小默认为1,1,并在添加文本时增加其高度。 我应该使用尺寸提示还是常规坐标系足够? 无论如何,我都无法正常工作。 当我进行一些测试时,我发现标签的text_size属性在添加新文本时不会更改,而是在窗口调整大小时更改。 可能是因为我已将kv文件中的text_size属性设置为等于标签的大小,以获得正确的文本对齐方式(左上角)。 这是我的代码:

from kivy import require
require("1.9.1")

import string

from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.effects.scroll import ScrollEffect
from kivy.uix.screenmanager import Screen, ScreenManager, NoTransition
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.scrollview import ScrollView
from kivy.uix.floatlayout import FloatLayout

nick = ''

class MyScrollView(ScrollView):
    pass

class TextLabel(Label):
    pass

Builder.load_string('''
<MyScrollView>:
    #...canvas instructions

<TextLabel>:
    text_size: self.size
''')

class Chat(Screen):
    pass        

class ChatApp(App):
    def build(self):
        def switch_view(*args, **kwargs):
            global nick
            nick = tx1_intro.text
            lb1_main.text = "Chat with " + nick
            Screens.current = 'main'
            Window.size = (600, 500)

        def msg_in(*args, **kwargs):
            global nick
            msg = tx1_main.text.strip("\n ")
            if msg not in string.whitespace:
                lb2_main.text += "{}: {}\n".format(nick, msg)
            tx1_main.text = ""
            fl_layout1_main.size_hint_y += 1

        Screens = ScreenManager(transition = NoTransition())

        chat = Chat(name = "main")

        tx1_main = TextInput(size_hint = (0.9, 0.155),
                             pos_hint = {"top":0.177,"center_x":0.465}) 

        scr_view_main = MyScrollView(pos_hint = {"top":0.87, "center_x":0.5},
                                   size_hint = (0.97, 0.65),
                                   do_scroll_x = False)

        fl_layout1_main = FloatLayout(size_hint_y = 1)

        lb2_main = TextLabel(size_hint = (0.99, 0.99),
                             pos_hint = {"center_x":0.5, "center_y":0.5},
                             valign = "top",
                             color = (0, 0, 0, 1))                  

        chat.add_widget(scr_view_main)
        scr_view_main.add_widget(fl_layout1_main)
        fl_layout1_main.add_widget(lb2_main)

        Screens.add_widget(chat)

        return Screens

if __name__ == "__main__":
    ChatApp().run()

is the way to find out what you need to type and what is automatic. 就个人而言,我不喜欢FloatLayout ,但是使用是找出您需要输入什么和自动输入内容的方法。 我认为BoxLayoutFloatLayout更实用,并且更适合于快速键入(仅与size_hint一起玩),并且如果您不需要真正需要这种定位的东西,那就没有必要了。

第一个示例只是带有滚动的简单标签,基本上都在kv ,因此最好将其保存并在需要时复制并粘贴(或学习如何操作)。 第二个是可滚动标签,周围带有一些小部件,就像您提供的代码一样,仅需要将其实现到代码中即可。 text_size是很重要的,但是你忘了一两件事- height 当您传递self.size您从一开始就传递了大小,而不是texture_size ,您需要什么。 由于size_hint_y为None,因此您可以使用texture_size手动设置height ,该height在传递一些文本后会自动更新。

简单的可滚动标签:

from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.uix.scrollview import ScrollView
Builder.load_string('''
<ScrollLabel>:
    Label:
        size_hint_y:None
        text_size:self.width,None
        text:'l or emi psum '*1000
        height:self.texture_size[1]
''')
class ScrollLabel(ScrollView):pass
runTouchApp(ScrollLabel())

周围的东西:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scrollview import ScrollView
Builder.load_string('''
<Box>:
    orientation: 'vertical'
    FloatLayout:
        ScrollView:
            Label:
                id: lab
                size_hint_y: None
                text_size: self.width, None
                text: 'l or emi psum '*100
                height:self.texture_size[1]
    Button:
        size_hint_y: None
        height: 100
        on_release: root.ids.lab.text+='lo rem '*100
''')
class Box(BoxLayout): pass
class My(App):
    def build(self):
        return Box()
My().run()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM