python - 如何在kivy中调整图片大小?
问题描述
我正在使用 kivy,我正在尝试制作一个程序来帮助我记住超级赛亚人的转变。我希望按钮是图片而不是文字。所以这是我用来制作按钮图片的代码:
self.Goku = Button(background_normal = '106-1060675_goku-base-form-png-clipart (1).png')
self.Goku.bind(on_press = self.SonGoku)
self.add_widget(self.Goku)
当我运行代码查看它的样子时,我看到其中一张图片大而另一张图片小。所以我尝试通过添加 size = ("10, 10") 来调整图片大小,但它没有用。我用 size_hint 尝试了同样的事情,但结果相同。什么都没有动。我查看了一些有关按钮的文档并将图片添加到 kivy ,但这并没有太大帮助。这是整个代码:
import kivy
from kivy.app import App
from kivy.graphics import *
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
class main(GridLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.cols = 4
self.Goku = Button(background_normal = '106-1060675_goku-base-form-png-clipart (1).png', size_hint = (1, 0.5))
self.Goku.bind(on_press = self.SonGoku)
self.add_widget(self.Goku)
self.Vegeta = Button(background_normal = 'vegeta-png-clip-art.png', size_hint = (1, 1))
self.Vegeta.bind(on_press = self.PrinceVegeta)
self.add_widget(self.Vegeta)
def SonGoku(self, instance):
self.cols = 1
self.remove_widget(self.Goku)
self.remove_widget(self.Vegeta)
self.NormalGoku = Button(text = "Base form")
self.add_widget(self.NormalGoku)
self.SSJGoku = Button(text = "Super saiyan")
self.add_widget(self.SSJGoku)
self.SSJ2Goku = Button(text = "Super saiyan 2")
self.add_widget(self.SSJ2Goku)
def PrinceVegeta(self, instance):
self.cols = 1
self.remove_widget(self.Goku)
self.remove_widget(self.Vegeta)
self.NormalVegeta = Button(text = "Base form")
self.add_widget(self.NormalVegeta)
self.SSJVegeta = Button(text = "Super saiyan")
self.add_widget(self.SSJVegeta)
self.SSJ2Vegeta = Button(text = "Super saiyan 2")
self.add_widget(self.SSJ2Vegeta)
class Saiyan(App):
def build(self):
return main()
if __name__ == "__main__":
Saiyan().run()
帮助将不胜感激。随时问任何问题。提前致谢。
解决方案
一种方法是在按钮画布上绘制图像。属性“allow_stretch”和“keep_ratio”用于填充整个按钮大小。
from kivy.uix.image import Image
然后:
self.Goku = Button(size_hint=(None, None), size=(120,120))
with self.Goku.canvas:
Image(source='vegeta-png-clip-art.png', size=self.Goku.size, pos=self.Goku.pos, allow_stretch=True, keep_ratio=False)
self.add_widget(self.Goku)
如果您没有为按钮显式设置大小,则需要将 size 属性绑定到方法以调整图像大小。
例子:
class main(GridLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.cols = 4
self.Goku = Button()
with self.Goku.canvas:
self.Goku_img = Image(source='vegeta-png-clip-art.png', size=self.Goku.size, pos=self.Goku.pos, allow_stretch=True, keep_ratio=False)
self.Goku.bind(size=self.adjust_size)
self.add_widget(self.Goku)
...
def adjust_size(self, instance, value):
self.Goku_img.size = value
我希望这是适合您的方法。
推荐阅读
- javascript - Jquery ReEnable 禁用按钮
- python - 具有非张量参数的 TensorFlow custom_gradient
- angular - 角度 5 表单验证:
- django - 如何在django中添加日志
- python-3.x - spark 的 collect() 函数执行时间过长。还有其他方法可以优化代码吗?
- ios - 如何在 iPhone XS 上使用 ARKit2 和 Vision (VNDetectFaceRectanglesRequest) 时修复 IOAF 代码 GPU 错误
- reactjs - 如何将带有参数的回调函数从父组件传递给子组件?
- kubernetes - Kubernetes 中的网络
- xsl-fo - XSL-FO 脚注中的还原文本
- css - 动画 css 属性中的 Calc() 仅在 microsft 边缘中不起作用