如何在 Kivy 中添加滚动文本小部件?
How to add scrolling text widget in Kivy?
我是基维新人。我想创建一个应用程序来接受用户文本输入,然后显示它。但是当用户输入很长的时候,我希望显示区域可以滚动
我已经做了一些教程,可以分别做这两件事,但我很难把它们放在一起。
这是允许滚动文本的代码:
__version__ = '1.0.1'
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.scrollview import ScrollView
import warnings
import string
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<ScrolllabelLabel>:
Label:
text: root.text
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
''')
class ScrolllabelLabel(ScrollView):
text = StringProperty('srgsdrgsdfh dsfg dvgf vgsdfv srfvsdfsdrfv sevrv sdrfv serv serv serv servsrd vsv srvsdrfvvv' * 10)
runTouchApp(ScrolllabelLabel())
下面是显示您键入的内容的代码:
__version__ = '1.0.1'
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.scrollview import ScrollView
import warnings
import string
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import StringProperty
class SomeApp(App):
def build(self):
grid = GridLayout(cols=1, size_hint_x=None, width="600dp")
self.lbl0 = Label(text='Tap and type a word/phrase below') # create a label instance
grid.add_widget(self.lbl0) # physically add the label onto the layout
self.txt1 = TextInput(text='', multiline=False) # create a text input instance
grid.add_widget(self.txt1) # physically add the text input onto the layout
self.lbl1 = Label(text='Display') # create a label instance
grid.add_widget(self.lbl1) # physically add the label onto the layout
btn1 = Button(text='Press') # create a button instance
btn1.bind(on_press=self.mirror) # binding the button with the function below
grid.add_widget(btn1)
return grid
def mirror(self, userInput):
self.lbl1.text = self.txt1.text
SomeApp().run()
但我无法将它们组合起来:
__version__ = '1.0.1'
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.scrollview import ScrollView
import warnings
import string
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<ScrolllabelLabel>:
Label:
text: root.text
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
''')
class ScrolllabelLabel(ScrollView):
def __init__(self, **kwargs):
self.txt0 = StringProperty()
class SomeApp(App):
def build(self):
grid = GridLayout(cols=1, size_hint_x=None, width="600dp")
self.lbl0 = Label(text='Tap and type a word/phrase below') # create a label instance
grid.add_widget(self.lbl0) # physically add the label onto the layout
self.txt1 = TextInput(text='', multiline=False) # create a text input instance
grid.add_widget(self.txt1) # physically add the text input onto the layout
btn1 = Button(text='Press') # create a button instance
btn1.bind(on_press=self.displayFunc) # binding the button with the function below
grid.add_widget(btn1)
# Add scrolling text
"""self.lbl1 = Label(text='Display') # create a label instance
grid.add_widget(self.lbl1) # physically add the label onto the layout"""
scrollWidget = ScrolllabelLabel(text=self.lbl1.text)
grid.add_widget(scrollWidget)
return grid
def displayFunc(self, userInput):
self.lbl1.text = self.txt1
SomeApp().run()
我收到这个错误:
AttributeError: 'SomeApp' object has no attribute 'lbl1'
您所做的是 multiline=False
因此该应用程序将以这种方式运行,无论您制作多大 TextInput
,它仍然是一行。使用 multiline=True
作为您的默认 TextInput,它会正确包装输入。
然后我看到你已经有一个可滚动标签的主体,所以只需使用默认的,使用默认的 class 并在你的第一个中输入 ScrolllabelLabel
的 text
变量文件与你的输出。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.scrollview import ScrollView
import warnings
import string
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<ScrolllabelLabel>:
Label:
text: root.text
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
''')
class ScrolllabelLabel(ScrollView):
text = StringProperty('')
class SomeApp(App):
def build(self):
grid = GridLayout(cols=1, size_hint_x=None, width="600dp")
self.lbl0 = Label(text='Tap and type a word/phrase below') # create a label instance
grid.add_widget(self.lbl0) # physically add the label onto the layout
self.txt1 = TextInput(text='', multiline=True) # create a text input instance
grid.add_widget(self.txt1) # physically add the text input onto the layout
self.lbl1 = ScrolllabelLabel(text='Display') # create a label instance
grid.add_widget(self.lbl1) # physically add the label onto the layout
btn1 = Button(text='Press') # create a button instance
btn1.bind(on_press=self.mirror) # binding the button with the function below
grid.add_widget(btn1)
return grid
def mirror(self, userInput):
self.lbl1.text = self.txt1.text
SomeApp().run()
我是基维新人。我想创建一个应用程序来接受用户文本输入,然后显示它。但是当用户输入很长的时候,我希望显示区域可以滚动
我已经做了一些教程,可以分别做这两件事,但我很难把它们放在一起。
这是允许滚动文本的代码:
__version__ = '1.0.1'
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.scrollview import ScrollView
import warnings
import string
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<ScrolllabelLabel>:
Label:
text: root.text
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
''')
class ScrolllabelLabel(ScrollView):
text = StringProperty('srgsdrgsdfh dsfg dvgf vgsdfv srfvsdfsdrfv sevrv sdrfv serv serv serv servsrd vsv srvsdrfvvv' * 10)
runTouchApp(ScrolllabelLabel())
下面是显示您键入的内容的代码:
__version__ = '1.0.1'
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.scrollview import ScrollView
import warnings
import string
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import StringProperty
class SomeApp(App):
def build(self):
grid = GridLayout(cols=1, size_hint_x=None, width="600dp")
self.lbl0 = Label(text='Tap and type a word/phrase below') # create a label instance
grid.add_widget(self.lbl0) # physically add the label onto the layout
self.txt1 = TextInput(text='', multiline=False) # create a text input instance
grid.add_widget(self.txt1) # physically add the text input onto the layout
self.lbl1 = Label(text='Display') # create a label instance
grid.add_widget(self.lbl1) # physically add the label onto the layout
btn1 = Button(text='Press') # create a button instance
btn1.bind(on_press=self.mirror) # binding the button with the function below
grid.add_widget(btn1)
return grid
def mirror(self, userInput):
self.lbl1.text = self.txt1.text
SomeApp().run()
但我无法将它们组合起来:
__version__ = '1.0.1'
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.scrollview import ScrollView
import warnings
import string
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<ScrolllabelLabel>:
Label:
text: root.text
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
''')
class ScrolllabelLabel(ScrollView):
def __init__(self, **kwargs):
self.txt0 = StringProperty()
class SomeApp(App):
def build(self):
grid = GridLayout(cols=1, size_hint_x=None, width="600dp")
self.lbl0 = Label(text='Tap and type a word/phrase below') # create a label instance
grid.add_widget(self.lbl0) # physically add the label onto the layout
self.txt1 = TextInput(text='', multiline=False) # create a text input instance
grid.add_widget(self.txt1) # physically add the text input onto the layout
btn1 = Button(text='Press') # create a button instance
btn1.bind(on_press=self.displayFunc) # binding the button with the function below
grid.add_widget(btn1)
# Add scrolling text
"""self.lbl1 = Label(text='Display') # create a label instance
grid.add_widget(self.lbl1) # physically add the label onto the layout"""
scrollWidget = ScrolllabelLabel(text=self.lbl1.text)
grid.add_widget(scrollWidget)
return grid
def displayFunc(self, userInput):
self.lbl1.text = self.txt1
SomeApp().run()
我收到这个错误:
AttributeError: 'SomeApp' object has no attribute 'lbl1'
您所做的是 multiline=False
因此该应用程序将以这种方式运行,无论您制作多大 TextInput
,它仍然是一行。使用 multiline=True
作为您的默认 TextInput,它会正确包装输入。
然后我看到你已经有一个可滚动标签的主体,所以只需使用默认的,使用默认的 class 并在你的第一个中输入 ScrolllabelLabel
的 text
变量文件与你的输出。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.scrollview import ScrollView
import warnings
import string
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<ScrolllabelLabel>:
Label:
text: root.text
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
''')
class ScrolllabelLabel(ScrollView):
text = StringProperty('')
class SomeApp(App):
def build(self):
grid = GridLayout(cols=1, size_hint_x=None, width="600dp")
self.lbl0 = Label(text='Tap and type a word/phrase below') # create a label instance
grid.add_widget(self.lbl0) # physically add the label onto the layout
self.txt1 = TextInput(text='', multiline=True) # create a text input instance
grid.add_widget(self.txt1) # physically add the text input onto the layout
self.lbl1 = ScrolllabelLabel(text='Display') # create a label instance
grid.add_widget(self.lbl1) # physically add the label onto the layout
btn1 = Button(text='Press') # create a button instance
btn1.bind(on_press=self.mirror) # binding the button with the function below
grid.add_widget(btn1)
return grid
def mirror(self, userInput):
self.lbl1.text = self.txt1.text
SomeApp().run()