晚上好!
我正在尝试在文本进入下一行时使TextInput小部件的高度增加。问题是,这是一个图像内部,它也必须扩展。这就是我所说的:
在旁注中,每当我键入某个文本时,空格就会出现在下一行:
The quick brown fox jumped over |
the lazy dog. The quick brown fox|
jumped over the lazy dog. The |
sly brown fox jumped over the lazy|
有没有办法避免这种情况?
以下是带有问题的file.kv文件的一部分:
#:kivy 1.10.0
<Manager>:
Chat:
name: 'chat'
<Chat>:
canvas:
Rectangle:
pos: self.x, 0
size: self.width, self.height
Button:
id: stgs
background_down: './icons/settings-press.png'
background_normal: './icons/settings.png'
border: 0, 0, 0, 0
always_release: True
right: root.right - 20
top: root.top - 10
size: 40, 40
size_hint: None, None
on_release:
root.manager.transition.direction = 'down'
root.manager.current = 'settings'
Button:
id: bck
background_down: './icons/back-press.png'
background_normal: './icons/back.png'
border: 0, 0, 0, 0
x: root.x + 20
top: root.top - 10
size: 40, 40
size_hint: None, None
on_release:
root.manager.transition.direction = 'right'
root.manager.current = 'main'
BoxLayout:
orientation: 'horizontal'
padding: 10, 10, 10, 10
cols: 2
Image:
id: inpimg
source: './icons/user_inp.png'
x: root.x + 10
y: root.y + 10
size: root.width - 40, 40
size_hint: 0.9, None
allow_stretch: True
keep_ratio: False
TextInput:
id: usrinp
valign: 'middle'
halign: 'left'
font_size: 16
multiline: True
x: root.ids['inpimg'].x + 10
y: root.ids['inpimg'].y + 5
background_color: 0, 0, 0, 0
size: root.width - 80, 33
Button:
id: post
foreground_color: 0, 0, 0, 0
background_down: './icons/type1-press.png'
background_normal: './icons/type1.png'
border: 0, 0, 0, 0
size: 40, 40
x: root.width * 14/17 + 5
y: root.y + 20
size_hint: None, None
这是最小的.py文件:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
class Chat(Screen):
pass
class Manager(ScreenManager):
pass
class FileApp(App):
def build(self):
return Manager()
if __name__ == "__main__":
FileApp().run()
如果您知道在图片中放置文本框的更好方法,请告诉我们!我想到的这种方法似乎有点被迫......
可选问题:是否可以使用&#39; .gmd&#39;文件与kivy?
提前谢谢!
答案 0 :(得分:0)
好的,我找到了一些东西。这似乎不是最好的方法,因为内部的文本不能再被点击了,但是如果你找到了解决方法,请告诉我!好的,回到解决方案:
BoxLayout:
orientation: 'horizontal'
padding: 10, 10, 10, 10
cols: 2
Image:
id: inpimg
source: './icons/user_inp.png'
x: root.x + 10
y: root.y + 10
width: root.width - 40
height: max(40, scrlv.height)
size_hint: 0.9, None
allow_stretch: True
keep_ratio: False
ScrollView:
id: scrlv
x: root.ids['inpimg'].x + 10
y: root.ids['inpimg'].y
width: root.width - 80
height: (len(usrinp._lines)+1) * usrinp.line_height
TextInput:
id: usrinp
valign: 'middle'
halign: 'left'
font_size: 16
multiline: True
size_hint: 1, None
height: scrlv.height
background_color: 0, 0, 0, 0
使用height: (len(usrinp._lines)+1 *usrinp.line_height
会自动调整每个换行符上的文本框大小。这是它的外观:
此外,如果您想在一定数量的行后限制大小,您可以这样做:
height: (len(usrinp._lines)+1) * usrinp.line_height if (len(usrinp._lines)+1 <= number_of_lines) else number_of_lines * usrinp.line_height
我必须找到一种重新实现滚动条的方法,因为文本只是通过触摸/点击而拒绝上升。