2016-06-29 28 views
0

目前我在SHeditorMain中有一个Floatlayout,在类SHeditormain里面我已经声明了一些小部件(按钮,弹出窗口,标签等等),并使用self.add_widget来添加它们。Python - Kivy,我有结构错了吗?

现在我想创建一个新的窗口,打开里面/通过FloatLayout,我似乎无法得到它的作品。到目前为止,我所见过的有关多个窗口的所有示例都是使用App作为在布局内创建小部件的主要类。任何建议或我必须重组代码?

class SHeditorMain(FloatLayout): 
    def __init__(self, **kwargs): 
     super(SHeditorMain, self).__init__(**kwargs)as 
     self.add_widget(blabla) 
     self.add_widget(blabla) 
     self.add_widget(blabla) 
     self.add_widget(blabla) 
     self.dbconnection = DBconnection() 

     #declare popups etc 


    def functionEvents(self, instance): 
     yaddayadda 

    def functionEvents(self, instance): 
     yaddayadda 

    def functionEvents(self, instance): 
     yaddayadda 


class SHeditor(App): 
    def build(self): 
     self.root = SHeditorMain() 
     return self.root 
+0

这是什么,,新窗口“”该怎么办?它应该出现在哪些条件下? – jligeza

+0

当您按下FloatLayout中的按钮时,您将打开新的“窗口”,其中可以编辑SHeditorMain实例中包含的值。例如如果我有一个文本为“你好世界”的按钮,我可以将文本更改为任何内容。 – Sillyreduction

+0

您需要弹出窗口小部件,它可以在kivy.uix.popup模块下找到。阅读文档和示例以掌握它。 –

回答

0

请阅读this answer关于多个“窗口”以及它可能不被期望的原因。我可以推荐你将kivy窗口最大化,并使用ModalView作为可以拖动的伪造形式,并且有一些按钮可以关闭它。更好的控制一切,更清洁的代码,初学者友好。创建一个从ModalView继承的自定义小部件,它的功能取决于您。

您可以将模态放在任何您想要的位置 - 查看repo中的弹出源代码如何设置位置。基本上,您最终会得到一个可以控制的自定义弹出窗口,而不会削弱原始窗口小部件。

另一种方式可能是使用ScreenManager(或PageLayout,Carousel,xyz其他小部件),它们提供类似于移动/演示文稿的视图。您越早使用kv语言,越早您就会有更少的麻烦去想象那些自满的东西,例如你会看到一个花哨的应用程序,你可以打开kivy-designer或更多的控制/不太花哨的去KivyCatalog,只需键入你所看到的这是kvlang是多么的简单。

例与情态动词:(旧企图建立类似Windows的...通过Kivy = FloatLayout用散点图(只拖动)作为东西 “窗口”)

enter image description here

这使我得到的结论是,如果你认为你需要多个窗口或另一窗口将是什么原因不错,但你不知道这是否会工作或东西 - 你实际上,你是过于复杂ŧ它会将你的代码的重要部分吸引到用户界面。

(PS,我编辑在上面提到的答案,但在这个问题用户有一点点复杂的问题)