繁体   English   中英

Kivy。 更改布局

[英]Kivy. Changing Layouts

我是Python和Kivy的新手。 在取得一些进展后,我遇到了一堵砖墙,没有多少互联网搜索可以找到答案。

我有一个python / kivy脚本,它以GridLayout选择菜单开头。 然后我想“单击下一步”并用BoxLayout替换GridLayout以显示输出。 Python脚本是:

import sys
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.checkbox import CheckBox
from kivy.uix.gridlayout import GridLayout
from kivy.uix.pagelayout import PageLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.properties import StringProperty, ListProperty, DictProperty
from kivy.uix.widget import Widget

from brp_stats import *
from dice_roller import *
#from display import *

race = ''
statblock = ''

class Test(GridLayout):

    def printcharacter(self,my_sb,my_cr,my_scm,my_scb):

        printable_stats = print_stats(my_sb)
        printable_rolls = print_rolls(my_cr)
        printable_scm = print_scm(my_scm)
        printable_scb = print_scb(my_scb)

        self.clear_widgets()
        self.add_widget(Label(text_size=(300, None),
                          text='Stats\n' + str(printable_stats)))
        self.add_widget(Label(text_size=(300, None),
                          text='Rolls\n' + str(printable_rolls)))
        self.add_widget(Label(text_size=(300, None),
                          text='SCM\n' + str(printable_scm)))
        self.add_widget(Label(text_size=(300, None),
                          text='SCB\n' + str(printable_scb)))

        wayout = Button(text='Way Out')
        self.add_widget(wayout)
        wayout.bind(on_press=self.canvas.clear)


#   def bar():
#       print ("BAR")

    def human(self,a,b):
        if b==True:
            self.Status="human"
            race=self.Status
            statblock = human()
            characteristic_rolls = rolls(statblock)
            skill_category_modifiers = scm(statblock)
            skill_category_bonuses = scb(statblock)
#           TestApp.foo()
#           Test.bar()
            Test.printcharacter( \ self,statblock,characteristic_rolls,skill_category_modifiers,skill_category_bonuses)

class TestApp(App):

#   def foo():
#       print ("FOO")

    def build(self):
        self.title="BRP Character Generator"
        return Test()


#### MAIN CODE ####

if __name__ == '__main__':
    TestApp().run()

而KV脚本是

<Test>:
    cols: 2
    canvas:
        Color:
            rgb: .2,.2,.2
        Rectangle:
            pos: self.pos
            size: self.size
    Label:
        text: 'Human'
   CheckBox:
        group: 'race_group'
        on_active: root.human(*args)
    Button:
        text: 'Next'
        on_press: printcharacter()

发生的事情是我选择一个选项(本例中为Human)。 它应该等到我在显示结果之前单击Next。 但是,只要我选择Human,它就会立即在GridLayout中打印结果。 我想到两个问题,我希望这里的专家可以提供帮助:

1)为什么选择屏幕不等到我在显示结果之前点击了下一步? 2)当我显示第二个屏幕时,如何将布局从Grid切换到Box?

我们将非常感激地收到任何指示或建议。

问候,科林

您的复选框在激活(按下/选择Test.human(*args)时调用Test.human(*args)Test.human()的最后一行调用Test.printcharacter() ,这解释了在您点击“下一步”按钮之前打印的原因。

由于Test类继承自GridLayout因此添加到根Test布局的小部件将被添加为GridLayout。 有几种方法来处理布局切换到BoxLayout ,其中之一将是不能直接从一个特定的布局类继承,而是添加/删除不同的布局小部件Test需要。

例如, Test可以从GridLayout子窗口小部件开始,该窗口小部件是LabelCheckBoxButton窗口小部件的父节点。 然后,当您想要切换布局以打印结果时,清除这些小部件并首先添加BoxLayout进行Test

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM