gpt4 book ai didi

python - 在 Kivy 中使用 RecycleView 的自定义小部件的对齐问题

转载 作者:行者123 更新时间:2023-12-05 07:36:47 37 4
gpt4 key购买 nike

所以我有了这个聊天应用程序,就像我使用 Kivy 的RecycleView 实例化自定义小部件(名为“Row”)制作的结构一样,我随心所欲地传递值。

如果 Row 自定义小部件仅包含一个 Label 子部件,它工作正常,当我添加一个 Image 和一个 Button(稍后我将解释原因)时,存在奇怪的间距和定位问题 这不应该存在,因为我正在使用 BoxLayout 并尝试了适当的 size_hint: 和 height: 技术来使它们看起来正确。

相关KV代码:

<Row@BoxLayout>:
orientation: 'vertical'
text: ''
source: 'res/icon.png'
buttontext: ''
Label:
markup: True
text_size: self.size
text: root.text
Image:
size: self.size
source: root.source
allow_stretch: True
Button:
text: root.buttontext #contains a link
on_press: app.root.stuff(self.text) #opens that link

# Relevant Screen where I am using the RecycleView
<ChatBotScreen>
BoxLayout:
ti_userinput: ti_userinput
orientation: 'vertical'
ScrollView:
size_hint_y: 85
RecycleView:
id: chatbase_list
viewclass: 'Row'
data: []
RecycleBoxLayout:
padding: "15dp", "45dp", "15dp", "15dp"
default_size: None, dp(25)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'

TextInput:
size_hint_y: None
height: "40dp"
id: ti_userinput
multiline: False
on_text_validate: root.on_user_enter_text()

由于我的自定义小部件 Row 扩展了 BoxLayout 并且我使用的是垂直方向,为什么子小部件(标签、图像和按钮)不重叠?

这是我调用以在 RecycleView 中传递数据的类和函数

    class ChatBotScreen(Screen):
nickname = StringProperty()
rvList = []

def display_bot_output(self, botOutput):
# Initialize an empty dictionary
tempDict = {}
textToDisplay = '' + botOutput

# Update the dictionary with properties:values and then pass it as a list to RecycleView's data
tempDict.update({'text':textToDisplay, 'buttontext':'https://google.com'})
self.rvList.append(tempDict)
self.ids.chatbase_list.data = self.rvList

我想在屏幕上显示的是:

  • 我通过 Label 中的 textToDisplay 变量发送的文本

  • 在Label下面,应该显示图片的来源,我可以传,如果没有传来源,则不显示图片

  • 在图像下方,应该显示一个带链接的按钮,我通过 buttontext 传递它,如果没有传递,则不应显示任何按钮。

我能够渲染除间距之外的所有内容,所有内容都搞砸了。

截图如下:

这里我首先发送了只有标签文本信息和图像的数据,因此按钮文本是空的(它仍然显示),然后我发送了另一个数据(第二行小部件)和标签文本信息、图像以及一个按钮文本(这是谷歌链接)。

all comes on top of each other

非常感谢任何帮助。谢谢!

最佳答案

<ChatBotScreen>
BoxLayout:
ti_userinput: ti_userinput
orientation: 'vertical'
ScrollView:
# to have the screen get bigger not lliek what you have
size: root.size
RecycleView:
id: chatbase_list
viewclass: 'Row'
data: []
RecycleBoxLayout:
padding: "15dp", "45dp", "15dp", "15dp"
default_size: None, dp(25)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
# add this so you can scroll
row_default_height: 60
orientation: 'vertical'

TextInput:
size_hint_y: None
height: "40dp"
id: ti_userinput
multiline: False
on_text_validate: root.on_user_enter_text()

关于python - 在 Kivy 中使用 RecycleView 的自定义小部件的对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950989/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com