paa*_*tra 8 python user-interface button kivy
我了解到在Qt中我们确实有一些方法来制作QpushButton:
我期待在Kivy中使Buttons行为类似.可能吗 ?我了解到我们可以将背景图像更改为具有圆角形状的图像 更改Kivy中按钮的背景颜色
但这并不令人满意,因为按钮看起来仍然很正常.没有阴影效果.即使我们点击按钮外的角落,如果单击按钮,也会对其进行处理.
我已经阅读了Kivy Button以及Label的文档,并尝试更改按钮的行为和外观.有人可以建议如何使按钮看起来更好我们可以尝试:
下面是我刚刚为了探索Kivy中的按钮而创建的代码:
__author__ = 'pbatra'
#Good info about background
#https://stackoverflow.com/questions/20181250/changing-the-background-color-of-a-button- in-kivy/20181407#20181407
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
from kivy.uix.image import Image
from kivy.graphics import Color
gui = '''
<MenuScreen>:
canvas.before:
BorderImage:
# BorderImage behaves like the CSS BorderImage
border: 10, 10, 10, 10
texture: self.background_image.texture
pos: self.pos
size: self.size
GridLayout:
size_hint: .1, .1
pos_hint: {'center_x': .5, 'center_y': .5}
rows: 1
Button:
text: 'Play'
font_size: 20
font_name: 'DroidSans'
bold: True
italic: True
height: 10
background_color: (0.5, 0.7, 0.5, 0.9)
#Read more about them from documentation
background_normal: './images/orange.png'
background_down: './images/green.png'
border: 30,30,30,30
color: (1, .3, .8, .5)
on_press: self.text = 'Oh yeah'
'''
class MenuScreen(Screen):
background_image = ObjectProperty(
Image(
source='../Examples/examples/widgets/sequenced_images/data/images/button_white_animated.zip',
anim_delay=.5))
Builder.load_string(gui)
pass
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
class MyJB(App):
def build(self):
return sm
if __name__ == '__main__':
MyJB().run()
Run Code Online (Sandbox Code Playgroud)
qua*_*non 13
kivy中的按钮以ButtonBehavior开始,该ButtonBehavior与Label相结合,添加了background_normal/down ...等属性,用于处理画布上的纹理.
知道了这一点,您可以简单地将ButtonBehavior与您选择的任何其他小部件组合在一起.例如.
from kivy.base import runTouchApp
from kivy.lang import Builder
kv = '''
<ButImage@ButtonBehavior+AsyncImage>
FloatLayout:
# we don't specify anything here so float layout takes the entire size of the window.
ButImage:
id: but
# take 50% size of the FloatLayout
size_hint: .5, .5
# Make Button change it's opacity when pressed for visual indication
opacity: 1 if self.state == 'normal' else .5
source: 'http://www.victoriamorrow.com/sitebuildercontent/sitebuilderpictures/enter_button.gif'
# Introduce Label incase you want text on top of the image
Label:
center: but.center
# change text acc to but state
text: "Normal" if but.state == 'normal' else 'down'
'''
if __name__ == '__main__':
runTouchApp(Builder.load_string(kv))
Run Code Online (Sandbox Code Playgroud)
在这里,我们将ButtonBehavior设置为与AsyncImage结合使用,AsyncImage从Web下载图像作为背景.
你应该看到这样的东西
动画影响背景
这就像将源更改为动画gif或.zip中的图像列表一样简单.
from kivy.base import runTouchApp
from kivy.lang import Builder
kv = '''
<ButImage@ButtonBehavior+AsyncImage>
FloatLayout:
ButImage:
id: but
size_hint: .5, .5
opacity: 1 if self.state == 'normal' else .5
allow_stretch: True
keep_ratio: False
source: 'http://media1.policymic.com/site/article-items/2095/1_gif.gif'
Label:
center: but.center
text: "Normal" if but.state == 'normal' else 'down'
'''
if __name__ == '__main__':
runTouchApp(Builder.load_string(kv))
Run Code Online (Sandbox Code Playgroud)
查看序列图像示例这是在引入ButtonBehaviors之前完成的,所以它甚至有一个使用旧方法的AnimatedButton类的示例,基本上不再需要它.
暗影效果:
有很多方法可以做到这一点.
您可以为窗口小部件/布局添加阴影,并使此窗口小部件/布局顶部的按钮占用的空间小于阴影,以便考虑阴影上的触摸.
或者创建从ButtonBehavior派生的自己的CustomButtonBehavior类,该类重写collidepoint方法以仅返回True以进行自定义冲突.有一个使用自定义碰撞的小部件的例子.您甚至可以将Image的keep_data属性设置为True,然后检查alpha的像素数据,以确定是否要为碰撞返回true.
圆角等
简单地使用带有圆边的图像kivy支持使用BorderImage指令,这在功能方面相当于css borderimage.Kivy自己的按钮默认使用它.尝试并试验BorderImage的 border属性.
| 归档时间: |
|
| 查看次数: |
8332 次 |
| 最近记录: |