2016-07-07 5 views
0

Ich arbeite daran, den Text in einem Texteingabefeld so zu skalieren, dass alle Zeichen immer noch sichtbar sind, wenn die Länge der Eingabe zunimmt. Ich konnte die Größe des Textes mit dem unten stehenden Code ändern. Wenn ich jedoch zu schnell tippe, wird das erste Zeichen hinter die Auffüllung der TextInput geschoben. Wie könnte der Text zurückgesetzt werden, um die Schriftgröße zurückzusetzen?Wie man Text mit dynamischer Größe hinter dem Padding von Kivy TextInput versteckt

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

Ich ziehe nicht die Cursorposition mit der Länge der Saite zu bestimmen, aber es ist das Beste, was ich mit so weit habe kommen.

+0

Es gab ein PR, das behebt, das ganze Zeichen nicht zu zeigen, wie es in Ihrem Screenshot sichtbar ist. Versuchen Sie, zum Hauptzweig zu aktualisieren. – KeyWeeUsr

Antwort

0

Die Texteingabe verwendet ein internes Etikett, um den Text anzuzeigen, und die Beschriftungen haben Größen. Ändern Sie die Eingabebreite jedes Mal, wenn sich der Text ändert, basierend auf der Texturbreite der Beschriftung. Beispiel:

#!/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() 
Verwandte Themen