【更多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 的核心概念
- 跨平台支持:Toga 支持多个操作系统,包括 Windows、macOS、Linux、iOS 和 Android。
- 原生外观:Toga 生成的应用程序看起来和操作系统的原生应用无异。
- 简洁 API:Toga 提供简洁明了的 API,让开发者可以专注于业务逻辑,而不是繁琐的界面细节。
- 社区支持:作为 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()
运行这段代码,如果单击该按钮,您应该会看到消息显示在控制台中。
深入 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()
运行这段代码,我们设置了一个垂直堆叠的外框; 在那个盒子里,我们放了 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()
Toga 是一个强大且易于使用的 Python 库,可以帮助开发者轻松创建跨平台 GUI 应用。