2016-07-07 32 views
0

我正在努力使文本輸入框調整文本的大小,以便隨着輸入長度的增長,所有字符仍然可見。我已經能夠使用下面的代碼調整文本的大小。但是,如果我輸入快速,則將第一個字符推到TextInput的填充後面。如何重置文本以適應字體大小的重置?如何保持動態大小的文本躲在基維填充後TextInput

class TeamNameField(TextInput): 
    def __init__(self, **kwargs): 
     super(TeamNameField, self).__init__(**kwargs) 
     self.bind(text=self.checkTextSize) 

    def checkTextSize(self, TeamNameField, text): 
     print(self.right) 
     print(self.text[-1:]) 
     if self.cursor_pos[0] > (self.right - 50): 
      self.font_size -= 10 

enter image description here

我不喜歡使用光標的位置來確定字符串的長度,但它是我想出迄今最好的。

+0

有一個PR修復了不顯示整個角色的情況,因爲它在屏幕截圖中是可見的。嘗試更新到主分支。 – KeyWeeUsr

回答

0

文本輸入使用內部標籤來顯示其文本,標籤具有大小。每次文本更改時,根據標籤紋理寬度更新輸入寬度。例如:

#!/usr/bin/env python2 
from kivy.app import App 
from kivy.uix.textinput import TextInput 
from kivy.lang import Builder 
from kivy.metrics import sp 

gui = ''' 
MyTextInput 
    pos_hint: {"center_x": 0.5, "center_y": 0.5} 
    size_hint: None, None 
    height: sp(50) 
    font_size: sp(30) 
    multiline: False 
''' 


class MyTextInput(TextInput): 

    def on_text(self, obj, text): 
     self.width = self._lines_labels[0].width + sp(30) 


class Test(App): 

    def build(self): 
     return Builder.load_string(gui) 

Test().run()