【发布时间】:2020-09-23 09:13:19
【问题描述】:
我正在 kivy 中制作一个可重用的小部件,其中包含几个子小部件。其中一个子小部件是一个按钮,我希望在按钮上放置一个文本,并在按钮右侧对齐一个小图标。我试图通过向按钮添加 StackLayout 来实现它,但是因为按钮是一个小部件,所以 stacklayout 的位置不在按钮内。由于我将在多个地方重用该小部件,因此我不知道如何使位置相对于父小部件。
在当前示例中,根本不显示图像,而文本显示在应用底部。
一个完整的最小工作示例在https://github.com/dolfandringa/kivy_playground/blob/master/button_label_image/
但这是我的小部件的相关代码:
from pathlib import Path
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.uix.stacklayout import StackLayout
ICON = Path(__file__).parent.resolve() / 'caret-down-solid.png'
class MyWidget(StackLayout):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.size_hint_y = None
self.height = '32dp'
self.button = Button()
button_layout = StackLayout()
self.button.add_widget(button_layout)
label1 = Label(text="[color=000000]text1[/color]",
markup=True)
icon = Image(source=str(ICON), size=(16, 16))
button_layout.add_widget(label1)
button_layout.add_widget(icon)
self.add_widget(self.button)
这就是小部件在示例应用程序 kv 文件中的使用方式:
#:import MyWidget widgets
GridLayout:
canvas.before:
Color:
rgb: 1,1,1
Rectangle:
size: self.size
cols: 1
Button:
text: "hello"
size_hint_x: None
size_hint_y: None
MyWidget:
size_hint_x: None
width: root.width*0.5
Button:
text: "hello2"
size_hint_x: None
size_hint_y: None
【问题讨论】: