python - 在 TextInput 中禁用文本换行
问题描述
有没有办法在 TextInput 小部件中禁用文本换行?也就是说,我仍然希望有换行符,但我不想在段落中换行。所以这似乎multiline=False
不是我要找的
更新:我的意思是 Windows(例如 Windows 7)Microsoft 记事本(格式 - 自动换行)中有“自动换行”选项。我想在 kivy TextInput 中禁用此选项
解决方案
我不做 Windows,但这对我来说听起来像是水平滚动。TextInput
如果您设置为 False,则默认情况下会进行水平滚动,multiline
但当设置multiline
为 True 时则不会。所以这里有一个技巧,可以TextInput
在 a为 TrueScrollView
时提供水平滚动:multiline
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import NumericProperty
from kivy.uix.scrollview import ScrollView
from kivy.uix.textinput import TextInput
class MyTextInput(TextInput):
minimum_width = NumericProperty(1)
def on_cursor(self, instance, newPos):
# determine scroll position of parent ScrollView if multiline is True
if not (isinstance(self.parent, ScrollView) and self.multiline):
return super(MyTextInput, self).on_cursor(instance, newPos)
if newPos[0] == 0:
self.parent.scroll_x = 0
else:
over_width = self.width - self.parent.width
if over_width <= 0.0:
return super(MyTextInput, self).on_cursor(instance, newPos)
view_start = over_width * self.parent.scroll_x
view_end = view_start + self.parent.width
offset = self.cursor_offset()
desired_view_start = offset - 5
desired_view_end = offset + self.padding[0] + self.padding[2] + self.cursor_width + 5
if desired_view_start < view_start:
self.parent.scroll_x = max(0, desired_view_start / over_width)
elif desired_view_end > view_end:
self.parent.scroll_x = min(1, (desired_view_end - self.parent.width) / over_width)
return super(MyTextInput, self).on_cursor(instance, newPos)
def on_text(self, instance, newText):
# calculate minimum width
width_calc = 0
for line_label in self._lines_labels:
width_calc = max(width_calc, line_label.width + 20) # add 20 to avoid automatically creating a new line
self.minimum_width = width_calc
theRoot = Builder.load_string('''
ScrollView:
id: scroller
effect_cls: 'ScrollEffect' # keeps from scrolling to far
MyTextInput:
size_hint: (None, 1)
width: max(self.minimum_width, scroller.width)
''')
class TI_in_SV(App):
def build(self):
return theRoot
TI_in_SV().run()
请注意,MyTextInput
扩展TextInput
.
推荐阅读
- r - 用高程平滑地图;R 与 tmap
- html - 如何使按钮标签在移动视图中可见
- c# - 错误 CS1061 'object' 不包含定义并且没有可访问的扩展方法接受第一个类型为 'object' 的参数
- c# - 使用 Microsoft.Office.Interop 库执行 Office 365 自动化时随机发生错误
- amazon-web-services - 没有 cloudwatch 事件的 AWS 调度 lambda 函数
- scala - Apache Spark 提交 --files java.io.FileNotFoundException
- r - R Studio 中的 ifelse
- c# - XML 文件有一个名为 System 的节点,这在命名空间 System 的代码中被混淆了
- webpack - 捆绑生产时如何调试 webpack?
- database - Neo4j:如何将标签显示为节点?