如何让Kivy的ProgressBar变粗?修改height无效的技术问询
解决Kivy ProgressBar无法变粗的问题
问题出在Kivy默认的ProgressBar内部的进度条高度是由bar_height属性控制的,不是你设置的Widget整体height。哪怕你把Widget的height调大,内部的进度条还是保持默认的细条样式。下面给你两种解决方法:
方法一:直接修改默认ProgressBar的bar_height属性
这是最简单的方式,直接在kv文件里给ProgressBar添加bar_height属性,同时调整Widget的高度来适配:
修改后的kv文件关键部分:
ProgressBar: id: my_progress_bar max:100 value: my_slider.value pos_hint: {"center_x" :.5} size_hint:.9, None # 固定高度时把size_hint_y设为None height: "50dp" # 设置Widget的整体高度,要足够容纳粗进度条 bar_height: "45dp" # 这个属性直接控制进度条的粗细
方法二:自定义ProgressBar完全控制样式
如果需要更灵活的样式(比如让背景也和进度条一样粗),可以重写ProgressBar的绘制逻辑:
1. 修改main.py添加自定义ProgressBar类
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.progressbar import ProgressBar class ThickProgressBar(ProgressBar): pass class WidgetsExample(BoxLayout): pass class TheLabApp(App): pass TheLabApp().run()
2. 在kv文件里定义自定义ProgressBar的样式并替换原组件
WidgetsExample: <WidgetsExample>: canvas.before: Color: rgba:(0.71, 0.71, 0.7,1) Rectangle: pos: self.pos size: self.size orientation: "vertical" padding: "10dp" spacing: "10dp" Label: text: "You have not gambled for" size_hint: 1,.2 # 使用自定义的粗进度条 ThickProgressBar: id: my_progress_bar max:100 value: my_slider.value pos_hint: {"center_x" :.5} size_hint:.9,.1 # 这里的size_hint_y直接控制进度条粗细 Slider: orientation: "vertical" id: my_slider min:0 max:100 value:50 Label: text: str(int(my_slider.value)) # 自定义粗进度条的绘制逻辑 <ThickProgressBar>: canvas: # 绘制背景 Color: rgba: 0.5, 0.5, 0.5, 1 Rectangle: pos: self.pos size: self.size # 绘制进度条 Color: rgba: 0, 1, 0, 1 Rectangle: pos: self.pos size: (self.value / self.max) * self.width, self.height
这样设置后,进度条的粗细就会和你设置的Widget高度一致,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Sulek Levrone
相关产品推荐
相关产品推荐

