我想創建一個彩色標簽串列。問題是我可以用 kv 檔案來做,但我需要通過 build() 方法來做。所以我嘗試復制我所做的,但它不起作用。我不明白為什么。
這是我編碼的
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import *
class RL(RelativeLayout): # Creates the background colour for each label
def __init__(self, **kwargs):
super().__init__(**kwargs)
with self.canvas:
Color(.7, 0, .5, 1)
Rectangle(size_hint=self.size)
class MainMenu(BoxLayout):
N_LBLS = 8
labels_text = []
RL_list = []
def __init__(self, **kwargs):
super().__init__(**kwargs)
button = Button(text='do something')
button.bind(on_release=self.change_text)
box = BoxLayout(orientation='vertical', padding= 10, spacing = 15)
for i in range(0, self.N_LBLS):
self.RL_list.append(RL())
self.labels_text.append(Label(text=f'{i}o label', size_hint=self.size))
self.RL_list[i].add_widget(self.labels_text[i])
box.add_widget(self.RL_list[i])
self.add_widget(button)
self.add_widget(box)
def change_text(self, instance):
for lbl in self.labels_text:
if lbl.text[0] == '5':
lbl.text = 'Text changed'
class MainApp(App):
def build(self):
return MainMenu()
if __name__ == '__main__':
MainApp().run()
它應該在左側制作一個按鈕,在右側制作一個包含 8 個彩色標簽的串列。
uj5u.com熱心網友回復:
問題是您size_hint=self.size在每個標簽中進行設定。的self.size是的大小MainMenu,這是[100,100]在執行該代碼時。請注意,size_hint是一個乘數,應用于父尺寸以計算小部件尺寸。所以 a size_hintof[100,100]使得 eachLabel比MainMenu.大 100 倍。因此,您的代碼可以正常作業,但是Labels它們太大以至于文本不在螢屏上。首先洗掉size_hint=self.size.
而且,要在 a 上設定背景顏色Label,您可以只使用canvasthat Label,而不是某個容器。這是執行此操作的代碼版本:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class ColorLabel(Label):
pass
Builder.load_string('''
<ColorLabel>:
bg_color: [.7, 0, .5, 1]
canvas.before:
Color:
rgba: self.bg_color
Rectangle:
pos: self.pos
size: self.size
''')
class MainMenu(BoxLayout):
N_LBLS = 8
labels_text = []
def __init__(self, **kwargs):
super().__init__(**kwargs)
button = Button(text='do something')
button.bind(on_release=self.change_text)
box = BoxLayout(orientation='vertical', padding=10, spacing=15)
for i in range(0, self.N_LBLS):
self.labels_text.append(ColorLabel(text=f'{i}o label'))
box.add_widget(self.labels_text[i])
self.add_widget(button)
self.add_widget(box)
def change_text(self, instance):
for lbl in self.labels_text:
if lbl.text[0] == '5':
lbl.text = 'Text changed'
lbl.bg_color = [0, 1, 0, 1]
class MainApp(App):
def build(self):
return MainMenu()
if __name__ == '__main__':
MainApp().run()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/406123.html
標籤:
上一篇:如果字典中存在另一個值,則Python訪問字典串列中的值
下一篇:串列以根據第一個值進行分組
