如何解决Kivy size_hint不适用于所有布局
我刚刚从Youtube学习Kivy,所有布局,按钮,小部件中的size_hint属性均不起作用。如何解决此问题?
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.graphics import Ellipse,Color,Line
from random import randint
class PaintApp(App):
def build(self):
rootWindow=Widget()
self.painter=PaintWindow()
# clearBtn=Button(text="Clear",color=(1,1),font_size="30sp",background_color=(0,1,pos =(300,250))
print(f"SIZE OF PAINTER: {self.painter.width},{self.painter.height}")
#####################################################################################################
'''
This Button's size_hint is not working on running on my device or due to some kivy issue.
'''
clearBtn = Button(text="Clear Screen",size_hint=(0.2,0.2),pos_hint=(0.8,0.8))
#####################################################################################################
clearBtn.bind(on_release=self.clearCanvas)
rootWindow.add_widget(self.painter)
rootWindow.add_widget(clearBtn)
return rootWindow
def clearCanvas(self,obj):
print(obj)
self.painter.canvas.clear()
class PaintWindow(Widget):
def on_touch_down(self,touch):
self.canvas.add(Color(rgb=(randint(0,255)/255,randint(0,255)/255)))
# d=20
# self.canvas.add(Ellipse(pos=(touch.x-d/2,touch.y-d/2),size=(d,d)))
touch.ud['line']= Line(points=(touch.x,touch.y),width=5)
self.canvas.add(touch.ud['line'])
def on_touch_move(self,touch):
touch.ud["line"].points+=[touch.x,touch.y]
if __name__ == "__main__":
PaintApp().run()
我是Kivy的一个完整的初学者。这是我作为输出得到的Kivy窗口的图像:
我希望它进入屏幕的右上角。
我在kvlang中尝试过,但仍然显示相同的结果。
解决方法
size_hint
适用于Layouts
,但Widget
不是Layout
。解释Layout
的{{1}}是包含size_hint
和Layout
的{{1}}。因此,当您向Widget
提供size_hint
时:
size_hint
Button
本身不使用clearBtn = Button(text="Clear Screen",size_hint=(0.2,0.2),pos_hint=(0.8,0.8))
,而当您执行以下操作时,size_hint
将使用Button
>
Layout
其中l.add_widget(clearBtn)
是l
。如果您这样做:
Layout
rootWindow.add_widget(clearBtn)
将不被接受,因为size_hint
是rootWindow
,而不是Widget
。尝试将Layout
定义为:
rootWindow
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。