簡體   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