从未想过如此简单,Python 开发跨平台 GUI 应用:Toga

【更多Python资料及副业知识,关注公众号【软件测试圈】】
Toga 是一个用于创建跨平台 GUI 应用的 Python 库。它让开发者可以使用 Python 代码编写一次,便可在 Windows、macOS、Linux、iOS 和 Android 等多平台上运行的应用程序。本文将带你深入了解 Toga 的概念和原理,并通过一些丰富的案例代码展示其强大功能。

什么是 Toga?

Toga 是 BeeWare 项目的一部分,是一个现代、功能丰富的 GUI 工具包。与其他 GUI 库不同,Toga 的设计理念是“Write once, run everywhere”,即用 Python 编写一次代码,便可以在多个平台上运行。

项目地址:https://github.com/beeware/toga

Toga 的核心概念

  1. 跨平台支持:Toga 支持多个操作系统,包括 Windows、macOS、Linux、iOS 和 Android。
  2. 原生外观:Toga 生成的应用程序看起来和操作系统的原生应用无异。
  3. 简洁 API:Toga 提供简洁明了的 API,让开发者可以专注于业务逻辑,而不是繁琐的界面细节。
  4. 社区支持:作为 BeeWare 项目的一部分,Toga 受到了广泛的社区支持和积极开发。

安装 Toga

要安装 Toga,可以使用 pip:

pip install toga

创建第一个 Toga 应用

以下是一个简单的 Toga 应用,它将在窗口中显示一个按钮,点击按钮时会显示一条消息。

import toga


def button_handler(widget):
    print("hello")


def build(app):
    box = toga.Box()

    button = toga.Button("Hello world", on_press=button_handler)
    button.style.padding = 50
    button.style.flex = 1
    box.add(button)

    return box


def main():
    return toga.App("First App", "org.beeware.toga.tutorial", startup=build)


if __name__ == "__main__":
    main().main_loop()

image-20240605163533217

运行这段代码,如果单击该按钮,您应该会看到消息显示在控制台中。

深入 Toga

接下来,我们通过一些实例代码来深入了解 Toga 的功能和特性。

创建复杂布局

Toga 提供了丰富的布局控件,可以帮助我们创建复杂的应用界面。下面的示例展示了如何使用多个控件和布局来创建一个更复杂的界面。

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


def build(app):
    c_box = toga.Box()
    f_box = toga.Box()
    box = toga.Box()

    c_input = toga.TextInput(readonly=True)
    f_input = toga.TextInput()

    c_label = toga.Label("Celsius", style=Pack(text_align=LEFT))
    f_label = toga.Label("Fahrenheit", style=Pack(text_align=LEFT))
    join_label = toga.Label("is equivalent to", style=Pack(text_align=RIGHT))

    def calculate(widget):
        try:
            c_input.value = (float(f_input.value) - 32.0) * 5.0 / 9.0
        except ValueError:
            c_input.value = "???"

    button = toga.Button("Calculate", on_press=calculate)

    f_box.add(f_input)
    f_box.add(f_label)

    c_box.add(join_label)
    c_box.add(c_input)
    c_box.add(c_label)

    box.add(f_box)
    box.add(c_box)
    box.add(button)

    box.style.update(direction=COLUMN, padding=10)
    f_box.style.update(direction=ROW, padding=5)
    c_box.style.update(direction=ROW, padding=5)

    c_input.style.update(flex=1)
    f_input.style.update(flex=1, padding_left=210)
    c_label.style.update(width=100, padding_left=10)
    f_label.style.update(width=100, padding_left=10)
    join_label.style.update(width=200, padding_right=10)

    button.style.update(padding=15)

    return box


def main():
    return toga.App("Temperature Converter", "org.beeware.toga.tutorial", startup=build)


if __name__ == "__main__":
    main().main_loop()

image-20240605165244327

运行这段代码,我们设置了一个垂直堆叠的外框; 在那个盒子里,我们放了 2 个水平盒子和一个按钮。

一个浏览器

一个原始的 Web 浏览器,只需不到 40 行代码!

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


class Graze(toga.App):
    def startup(self):
        self.main_window = toga.MainWindow()

        self.webview = toga.WebView(
            on_webview_load=self.on_webview_loaded, style=Pack(flex=1)
        )
        self.url_input = toga.TextInput(
            value="https://beeware.org/", style=Pack(flex=1)
        )

        box = toga.Box(
            children=[
                toga.Box(
                    children=[
                        self.url_input,
                        toga.Button(
                            "Go",
                            on_press=self.load_page,
                            style=Pack(width=50, padding_left=5),
                        ),
                    ],
                    style=Pack(
                        direction=ROW,
                        alignment=CENTER,
                        padding=5,
                    ),
                ),
                self.webview,
            ],
            style=Pack(direction=COLUMN),
        )

        self.main_window.content = box
        self.webview.url = self.url_input.value

        # Show the main window
        self.main_window.show()

    def load_page(self, widget):
        self.webview.url = self.url_input.value

    def on_webview_loaded(self, widget):
        self.url_input.value = self.webview.url


def main():
    return Graze("Graze", "org.beeware.tutorial")


if __name__ == "__main__":
    main().main_loop()

image-20240605170702825

Toga 是一个强大且易于使用的 Python 库,可以帮助开发者轻松创建跨平台 GUI 应用。

回答: Python Toga是一个用于创建跨平台原生GUI应用程序的Python库。它提供了简单易用的API,可以在不同的操作系统上创建和运行应用程序。通过使用Toga开发人员可以使用Python语言编写应用程序,并在Windows、macOS和Linux等平台上运行。Toga库提供了丰富的组件和布局选项,使开发人员能够创建具有各种功能和外观的应用程序。如果你想自定义Toga应用程序的关于菜单项,你可以重写about()方法,并在其中调用元数据来获取作者、版本、邮箱等信息,并使用info_dialog()方法来显示关于对话框。\[1\]另外,如果你想为Toga应用程序的边框添加填充,你可以使用不同数量的整数参数来指定填充的大小。例如,如果你提供了4个整数参数,它们将分别用作顶部、右侧、底部和左侧的填充值。\[2\] #### 引用[.reference_title] - *1* [【Python自学笔记】Beeware—toga如何自定义about菜单项](https://blog.csdn.net/xiaoqiangclub/article/details/124556331)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【Python自学笔记】Beeware组件Toga学习笔记](https://blog.csdn.net/xiaoqiangclub/article/details/124377587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西坡不是东坡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值