将按钮的背景更改为不同的形状和样式,如kivy python中的阴影效果等
我了解到,在Qt中,我们确实有一些方法可以通过以下方式制作QpushButton:将按钮的背景更改为不同的形状和样式,如kivy python中的阴影效果等,python,button,user-interface,kivy,Python,Button,User Interface,Kivy,我了解到,在Qt中,我们确实有一些方法可以通过以下方式制作QpushButton: 阴影效应 通过将setFlat属性设置为True使其平坦 如果有人像按钮_18.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))一样在光标上悬停,则更改不同类型的光标 我希望使纽扣的行为类似于基维以及。可能吗? 我了解到,我们可以将背景图像更改为圆形图像 但这并不令人满意,因为按钮看起来仍然很正常。没有阴影的影响。即使当我们点击按钮外的角落时,如果点击
__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()
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
#关于背景的好信息
#https://stackoverflow.com/questions/20181250/changing-the-background-color-of-a-button- 在kivy/20181407#20181407中
从kivy.app导入应用程序
从kivy.lang导入生成器
从kivy.uix.screenmanager导入screenmanager,屏幕
从kivy.properties导入ObjectProperty
从kivy.uix.image导入图像
从kivy.graphics导入颜色
gui=“”
:
在以下情况之前:
边框图像:
#BorderImage的行为类似于CSS BorderImage
边界:10,10,10,10
纹理:self.background\u image.texture
pos:self.pos
大小:self.size
网格布局:
大小提示:.1,.1
位置提示:{'center_x':.5'center_y':.5}
行数:1
按钮:
文字:“播放”
字体大小:20
字体名称:“机器人”
黑体字:对
斜体:对
身高:10
背景颜色:(0.5,0.7,0.5,0.9)
#从文档中了解更多关于它们的信息
背景_正常:'./images/orange.png'
背景向下:'./images/green.png'
边界:30,30,30,30
颜色:(1.3.8.5)
按:self.text='哦,是的'
'''
类菜单屏幕(屏幕):
背景\图像=对象属性(
形象(
source='../Examples/Examples/widgets/sequenced_images/data/images/button_white_animated.zip',
动画(延迟=0.5))
Builder.load_字符串(gui)
通过
#创建屏幕管理器
sm=屏幕管理器()
sm.add_小部件(菜单浏览(name='menu'))
类别MyJB(应用程序):
def生成(自):
返回sm
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
MyJB().run()
kivy中的按钮以a开头,该按钮与添加属性(如background_normal/down)相结合,用于处理画布上的纹理
知道了这一点,您可以简单地将ButtonBevior与您选择的任何其他小部件组合。例如
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))
从kivy.base导入runTouchApp
从kivy.lang导入生成器
kv='''
浮动布局:
#我们在这里没有指定任何内容,所以float布局占用窗口的整个大小。
但是图像:
id:但是
#采用浮动布局的50%大小
大小提示:.5,.5
#使按钮改变其不透明度时,按下视觉指示
不透明度:如果self.state=='normal'else,则为1。5
资料来源:'http://www.victoriamorrow.com/sitebuildercontent/sitebuilderpictures/enter_button.gif'
#引入标签,以防需要在图像顶部添加文本
标签:
中锋:但是,中锋
#根据但状态更改文本
文本:“正常”如果but.state=='Normal'else'down'
'''
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
runTouchApp(建筑商负载线(kv))
在这里,我们只需将ButtonBevior设置为与从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))
从kivy.base导入runTouchApp
从kivy.lang导入生成器
kv='''
浮动布局:
但是图像:
id:但是
大小提示:.5,.5
不透明度:如果self.state=='normal'else,则为1。5
允许拉伸:真
保留比率:False
资料来源:'http://media1.policymic.com/site/article-items/2095/1_gif.gif'
标签:
中锋:但是,中锋
文本:“正常”如果but.state=='Normal'else'down'
'''
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
runTouchApp(建筑商负载线(kv))
看看这个例子,它是在ButtonBehavior被引入之前完成的,所以它甚至有一个使用旧方法的类的例子,这个方法基本上不再需要了
阴影效果:
有很多方法可以做到这一点
您可以将阴影添加到小部件/布局中,并使此小部件/布局顶部的按钮比阴影占用更少的空间,以便考虑阴影上的触摸
或者创建您自己的CustomButtonBehavior类,该类派生自ButtonBehavior,该类重写collidepoint
方法,仅为自定义冲突返回True。这里有一个使用for小部件的示例。您甚至可以将图像的keep_data
属性设置为True,然后检查alpha数据以确定是否要为碰撞返回True
圆边等
只需使用圆角图像kivy支持使用BorderImage指令,这在功能上与css BorderImage相当。Kivy自己的按钮默认使用此选项。
尝试使用边界属性
from kivy.app import App from
kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
class lay(FloatLayout):
def __init__(self, **kwargs):
super(lay,self).__init__(**kwargs)
self.btn = Button(background_normal='image_state_on.png',
background_down='image_state_off', size_hint_x = .50, size_hint_y = .50)
self.add_widget(self.btn)
class ImageButton_APP(App):
def build(self):
return lay()
ImageButton_APP().run()