使用Kivy,我创建了一个自定义按钮类DefaultButton。
Python代码:
class DefaultButton(Button):
def __init__(self, **kwargs):
super(DefaultButton, self).__init__(**kwargs)
size_hint = (None, None)
self.width = 200
self.set_width()
def set_width(self):
if(self.texture_size[0] > self.width)
self.width = self.texture_size[0]
print(self.texture_size)
Kivy代码:
<MainLayout>:
size: self.size
BoxLayout:
pos_hint_y: None
top: self.parent.top
size_hint: 1, None
height: 60
DefaultButton:
text: "really long string (longer than 200px)"
DefaultButton:
text: "short string" #less than 200px
在DefaultButton
类(python代码)中,方法set_width()
旨在自动将按钮的宽度设置为文本长度,但前提是文本长度超过设置的宽度。它检查纹理的宽度(即按钮文本的长度)与当前宽度。如果纹理位于按钮边界之外,则会将其大小调整为texture_width。
我的第一个DefaultButton将调整为其文本的长度,而第二个按钮则不会......
目前,set_width()
方法为每个按钮texture_size
打印'0',因为在self.set_width
方法中调用__init__
,然后初始化DefaultButton对象。有没有办法在实例化后立即在当前实例上调用set_width()
?