1

我正在尝试使用 Beeware 创建一个跨平台应用程序,一开始我显示两个按钮供用户选择他想要去的视图,因此一旦单击该按钮,主窗口应该更新其内容并显示视图用户选择的。

这是应用程序启动时的主窗口:

开始

单击“第一个视图”后,第一个视图的内容将添加到开始内容后面,如下所示:

在此处输入图像描述

预期的行为是删除按钮并仅显示文本的主窗口,第二个视图按钮也应如此。

这是代码:

import toga
from toga.style import Pack
from toga.style.pack import COLUMN, ROW


class exampleApp(toga.App):

    def startup(self):
        """
        Construct and show the Toga application.

        Usually, you would add your application to a main content box.
        We then create a main window (with a name matching the app), and
        show the main window.
        """
        main_box = toga.Box(style=Pack(direction=COLUMN))
    
        ###        
        # Main Screen
        first_view = toga.Button('First View', on_press=self.first_view, style=Pack(padding=2))
        second_view = toga.Button('Second View', on_press=self.second_view, style=Pack(padding=2))

        home_box = toga.Box(style=Pack(direction=ROW, padding=2))
        home_box.add(first_view)
        home_box.add(second_view)

        main_box.add(home_box)
        ###

        self.main_window = toga.MainWindow(title=self.formal_name)
        self.main_window.content = main_box
        self.main_window.show()

    def first_view(self, widget):
        new_box = toga.Box()
        screen_text = toga.Label('This screen will allow you to see your First View')
        new_box.add(screen_text)
        self.main_window.content = new_box

    def second_view(self, widget):
        new_box = toga.Box()
        screen_text = toga.Label('This screen will allow you to see your Second View')
        new_box.add(screen_text)
        self.main_window.content = new_box

def main():
    return exampleApp()

有人知道如何获得预期的输出吗?

提前致谢。

4

1 回答 1

3

固定的。

我的理解是我们必须创建一个我们可以玩的通用盒子(self.main_box),这个盒子有一个普通的孩子(self.view_box),这样我们就可以删除和重置普通孩子的内容和每次修改内容时,MainWindow默认刷新,所以self.main_window.content = self.main_box每次修改内容时不需要。

import toga
from toga.style import Pack
from toga.style.pack import COLUMN, ROW


class exampleApp(toga.App):

    def startup(self):
        """
        Construct and show the Toga application.

        Usually, you would add your application to a main content box.
        We then create a main window (with a name matching the app), and
        show the main window.
        """
        self.main_box = toga.Box(style=Pack(direction=COLUMN))
        self.view_box = toga.Box()
        
        ###
        # Main Screen
        first_view = toga.Button('First View', on_press=self.first_view, style=Pack(padding=2))
        second_view = toga.Button('Second View', on_press=self.second_view, style=Pack(padding=2))

        self.view_box.style = Pack(direction=ROW, padding=2)
        self.view_box.add(first_view)
        self.view_box.add(second_view)
        ###
        
        self.main_box.add(self.view_box)

        self.main_window = toga.MainWindow(title=self.formal_name)
        self.main_window.content = self.main_box
        self.main_window.show()

    def first_view(self, sender):
        self.main_box.remove(self.view_box)

        self.view_box = toga.Box()
        self.view_box.style = Pack(direction=ROW, padding=2)
        
        screen_text = toga.Label('This screen will allow you to see your First View')
        self.view_box.add(screen_text)
        
        self.main_box.add(self.view_box)
        self.main_window.show()

    def second_view(self, widget):
        self.main_box.remove(self.view_box)

        self.view_box = toga.Box()
        self.view_box.style = Pack(direction=ROW, padding=2)

        screen_text = toga.Label('This screen will allow you to see your Second View')
        self.view_box.add(screen_text)

        self.main_box.add(self.view_box)
        self.main_window.show()

def main():
    return exampleApp()
于 2021-09-10T12:26:32.130 回答