首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Kivy弹出按钮内容不显示在按钮中

Kivy弹出按钮内容不显示在按钮中
EN

Stack Overflow用户
提问于 2018-12-11 02:24:34
回答 2查看 127关注 0票数 1

下面的代码没有把第二个按钮的内容放在里面,内容放在第一个按钮的位置,你能解释一下为什么吗?结果应该是弹出窗口中的两个按钮,每个按钮都有自己的内容,不是吗?我做错了什么?

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-12 04:18:50

下面是对原始代码的修改,使AvionToBuy扩展了ButtonBehaviorBoxLayout。这允许您将任何小部件作为AvionToBuy的子项,并且子项将水平布局。我已经包含了您的原始Labels,并添加了一个Image。现在,AvionToBuy的行为就像Button一样。我还添加了默认的Button主题。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-12-11 06:40:12

如果只是将文本放入AvionToBuy小部件,只需使用Buttontext属性即可。您可以在kv文件中将AvionToBuy的规则更改为:

代码语言:javascript
复制
<AvionToBuy>:
    text: root.avion[0] + ' ' + root.avion[1] + ' ' + str(root.avion[2]) + '$'
    background_color: [1, 0, 1, .5]
    on_release: print(root.avion)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53711523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档