这是我的kivy应用程序的截图。我试图让左下角的TextInput
位于它所在的BoxLayout
的中心,我不希望它与布局大小相同,我希望它小得多。有问题的BoxLayout
位于屏幕的下半部分。我试过设置TextInput
的属性center:self.parent.center
,但这不起作用。如您所见,我已经使用self.parent.center这一行将中心坐标从BoxLayout
打印到了TextInput
中,得到了正确的结果。然而,将TextInput
的中心或位置设置为这些坐标并不是将其居中,它不会移动。。。我做错什么了?
py文件:
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class TimeTabler(Widget):
pass
class TimerApp(App):
def build(self):
return TimeTabler()
if __name__ == "__main__":
TimerApp().run()
****kv文件:***
#:kivy 1.0
BoxLayout:
orientation: 'vertical'
size: root.size
BoxLayout:
orientation: 'vertical'
Label:
text: 'TimeTabler'
BoxLayout:
TextInput:
text: '%s' % (self.parent.center) # why does this work here
size_hint: None, None
width: sp(200)
height: sp(30)
center: self.parent.center # but not here
您给了TextInput
size_hint: None, None
,因此BoxLayout不会尝试手动给它正确的大小,它假定默认的大小为100, 100
。只需删除size_hint
行即可修复它。另外,一些小部件有
size: self.size
这样的行。这是毫无意义的,self
指的是小部件本身,很明显这一行什么也不做,因为它只是试图将大小设置为它已经是什么。如果你让你的时间表继承自BoxLayout而不是Widget,事情会更简单。这样就不需要手动设置它的子BoxLayout的大小。
编辑:我好像误解了你的意思,下面是一个使用主持人布局将文本输入居中的示例:
我认为您的问题是BoxLayout即使在设置自己的大小时也会自动设置TextInput的位置。解决这个问题的一个简单方法是在另一个小部件中紧靠文本输入,在本例中是一个负责居中的AnchorLayout。您还可以使用小部件和以前设置TextInput中心的机制。
相关问题 更多 >
编程相关推荐