日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

kivy学习---控件

發布時間:2024/6/21 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 kivy学习---控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

------控件

控件Widget是kivy圖形界面中的基本元素。控件提供了一個畫布canvas,這是用來在屏幕上進行繪制的。控件接收事件,并對事件作出反應。

一個控件的子控件會以children屬性的形式表達,這個屬性是kivy中的一個列表屬性ListProperty。可以用以下方法來操作控件樹:

 ·add_widget():添加一個控件作為子控件

 ·remove_widget():從子控件列表中去掉一個控件

 ·clear_widget():清空一個控件的所有子控件。

控件索引:控件繪制的順序,是基于各個控件在控件樹中獲得位置。指定新增控件在控件樹中的位置的方法為:root.add_widget(widget,index)

注意:索引值小的控件會被繪制在索引值大的控件之上,默認值是0

------整理布局

布局layout是一種能控制自己子控件尺寸和位置的控件。有各種不同的布局,使用尺寸推測size_hint和位置推測pos_hint這兩個屬性來決定子控件children的尺寸size和位置pos

盒式布局BoxLayout:所有控件充滿整個空間,橫豎排列都可以。子控件的size_hint屬性可以用來改變每個子控件的比例,也可以設置為固定尺寸。

網格布局GirdLayout:以一張網格的方式來安排控件。必須指定好網格的維度,確定好分成多少格,如此kivy才能計算出每個元素的尺寸并且確定如何安排這些元素的位置。

棧狀布局StackLayout:挨著放一個個控件,彼此鄰近,在某一維度上有固定大小,而使它們充滿整個空間,這適合用來顯示相同預定義大小的子控件。

錨式布局AnchorLayout:一種非常簡單的布局,只關注子控件的位置,將子控件放在布局的邊界位置,不支持size_hint。

浮動布局FloatLayout:允許放置任意位置和尺寸的子控件,可以是絕對尺寸,也可以是相對布局的尺寸,默認的size_hint(1,1)會讓每個子控件都與整個布局一樣大,所以如果你多個子控件就需要修改這個值。可以把size_hint設置成(None,None),這樣就可以使用size這個絕對尺寸屬性,控件也支持pos_hint,這個屬性是一個dict詞典,用來設置相對布局的位置。

相對布局RelativeLayout:與浮動布局FloatLayout相似,不同之處在于子控件的位置是相對于布局空間,而不是相對于屏幕

size_hint是一個引用列表屬性ReferenceListProperty,包括size_hint_x和size_hint_y兩個變量。接收的變量值是從0到1的各種數值,或者None,默認值為(1,1)。這表示如果控件處在布局之內,布局將會在兩個方向分配全部尺寸(相對布局大小)給該控件。

 在盒式布局中,當orientation被設置為豎直方向(vertical)的時候,size_hint_y由布局來控制;反之設置為水平方向(horizonttal)的時候,size_hint_x由布局控制,所以手動設置就無效了。

-------給布局添加背景

對布局實力添加一個色彩背景的方法如下:

 在python中的實現:

具體設置布局背景顏色的python代碼如下:

from kivy.app import App
from kivy.graphics import Color,Rectangle
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button

class RootWidget(FloatLayout):
def __init__(self,**kwargs):
super(RootWidget,self).__init__(**kwargs)
self.add_widget(
Button(
text="Hello world",
size_hint=(.5,.5),
pos_hint={"center_x":.5,"center_y":.5}))
class MainApp(App):
def build(self):
self.root=root=RootWidget()
root.bind(size=self._update_rect,pos=self._update_rect)
with root.canvas.before:
Color(0,0,1,1) #設置背景顏色,(紅,綠,藍,透明度)
self.rect=Rectangle(size=root.size,pos=root.pos)
return root
def _update_rect(self,instance,value):
self.rect.pos=instance.pos
self.rect.size=instance.size
if __name__=="__main__":
MainApp().run()

實現效果如下:

------給自定義布局規則/類增加背景色

基于布局類Layout創建一個自定義的布局子類,可以給自定義的類增加一個背景。

使用python的代碼:


from kivy.app import App
from kivy.graphics import Color,Rectangle
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import AsyncImage
class RootWidget(BoxLayout):
pass
class CustomLayout(FloatLayout):
def __init__(self,**kwargs):
super(CustomLayout,self).__init__(**kwargs)
with self.canvas.before:
Color(0,0,1,1)
self.rect=Rectangle(size=self.size,pos=self.pos)
self.bind(size=self._update_rect,pos=self._update_rect)
def _update_rect(self,instance,value):
self.rect.pos=instance.pos
self.rect.size=instance.size
class MainApp(App):
def build(self):
root=RootWidget()
c=CustomLayout()
root.add_widget(c)
c.add_widget(
AsyncImage(
source="http://pic30.nipic.com/20130619/9885883_210838271000_2.jpg",
size_hint=(1,.5),
pos_hint={"center_x":.5,"center_y":.5}))
root.add_widget(AsyncImage(source="http://pic1.win4000.com/wallpaper/c/53cdd1f7c1f21.jpg"))
c=CustomLayout()
c.add_widget(
AsyncImage(
source="http://pic32.nipic.com/20130813/3347542_160503703000_2.jpg",
size_hint=(1,.5),
pos_hint={"center_x":.5,"center_y":.5}))
root.add_widget(c)
return root
if __name__=="__main__":
MainApp().run()

代碼的運行結果如下:





總結

以上是生活随笔為你收集整理的kivy学习---控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。