Содержимое всплывающей кнопки Kivy не отображается на кнопке - PullRequest
0 голосов
/ 10 декабря 2018

Следующий код не помещает содержимое второй кнопки внутри него, содержимое находится на первой позиции кнопки, не могли бы вы объяснить, почему?В результате во всплывающем окне должны появиться две кнопки, каждая из которых имеет собственный контент, не так ли?Что я сделал не так?

from kivy.lang import Builder
from kivy.app import App
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.properties import ObjectProperty, ListProperty

Builder.load_string('''
<ListAvions>:
    box: box
    BoxLayout:
        id: box
        orientation: 'vertical'

<AvionToBuy>:
    boxlabel: boxlabel
    size_hint_y: None
    height: 300
    background_color: [1, 0, 1, .5]
    on_release: print(root.avion)
    BoxLayout:
        orientation: 'horizontal'
        Label:
            text: root.avion[0]
            size_hint: None, None
            size: 300, 300
        BoxLayout:
            orientation: 'vertical'
            id: boxlabel
            Label:
                text: root.avion[1]
                size_hint: None, None
            size: 420, 150
        Label:
            text: str(root.avion[2]) + "$"
            size_hint: None, None
            size: 420, 150
''')

AVIONS = [["P51.png", "P51", 750], ["F22.png", "F22", 1500]]

class ListAvions(Popup):
    box = ObjectProperty(None)

def add(self):
    for avion in range(len(AVIONS)):
        aviontobuybut = AvionToBuy()
        aviontobuybut.avion = AVIONS[avion]
        self.box.add_widget(aviontobuybut)

class AvionToBuy(Button):
    avion = ListProperty(AVIONS[0])

class AvionApp(App):
    def build(self):
    z = ListAvions()
    z.add()
    return z

if __name__=="__main__":
    AvionApp().run()

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вот модификация вашего исходного кода, которая заставляет AvionToBuy расширять ButtonBehavior и BoxLayout.Это позволяет поместить любой виджет как дочерний элемент AvionToBuy, и дочерние элементы будут расположены горизонтально.Я включил ваш оригинал Labels и добавил Image.И теперь AvionToBuy ведет себя как Button.Я также добавил тему по умолчанию Button.

from kivy.lang import Builder
from kivy.app import App
from kivy.uix.behaviors.button import ButtonBehavior
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty, ListProperty

Builder.load_string('''
<ListAvions>:
    box: box
    BoxLayout:
        id: box
        orientation: 'vertical'
<AvionToBuy>:
    orientation: 'horizontal'
    padding: (50, 0)
    border: [16, 16, 16, 16]
    on_release: print(root.avion)
    bg_normal: 'atlas://data/images/defaulttheme/button'
    bg_down: 'atlas://data/images/defaulttheme/button_pressed'
    state_image: self.bg_normal if self.state == 'normal' else self.bg_down
    canvas:
        Color:
            rgba: (1, 1, 1, 1)
        BorderImage:
            border: self.border
            pos: self.pos
            size: self.size
            source: self.state_image
    Label:
        text: root.avion[0]
    Label:
        text: root.avion[1]
    Label:
        text: str(root.avion[2]) + '$'
    Image:
        source: 'data/images/defaultshape.png'
''')

AVIONS = [["P51.png", "P51", 750], ["F22.png", "F22", 1500]]

class ListAvions(Popup):
    box = ObjectProperty(None)

    def add(self):
        for avion in range(len(AVIONS)):
            aviontobuybut = AvionToBuy()
            aviontobuybut.avion = AVIONS[avion]
            self.box.add_widget(aviontobuybut)

class AvionToBuy(ButtonBehavior, BoxLayout):
    avion = ListProperty(AVIONS[0])


class AvionApp(App):
    def build(self):
        z = ListAvions()
        z.add()
        return z

if __name__=="__main__":
    AvionApp().run()
0 голосов
/ 11 декабря 2018

Если вы просто помещаете текст в свой виджет AvionToBuy, просто используйте свойство text Button.Вы можете изменить правило для AvionToBuy в файле kv на:

<AvionToBuy>:
    text: root.avion[0] + ' ' + root.avion[1] + ' ' + str(root.avion[2]) + '$'
    background_color: [1, 0, 1, .5]
    on_release: print(root.avion)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...