mirror of
https://github.com/slint-ui/slint.git
synced 2025-09-28 21:04:47 +00:00
python: hide native module behind python front-end API
Encapsulate the rust code behind a public API (in __init__.py for now)
This commit is contained in:
parent
07c168bbf9
commit
d1529af3cc
7 changed files with 35 additions and 23 deletions
1
api/python/.gitignore
vendored
Normal file
1
api/python/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
slint/*.so
|
|
@ -2,7 +2,7 @@
|
|||
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||
|
||||
[package]
|
||||
name = "pyslint"
|
||||
name = "slint-python"
|
||||
version.workspace = true
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
|
@ -14,7 +14,6 @@ publish = false
|
|||
rust-version.workspace = true
|
||||
|
||||
[lib]
|
||||
name = "slint"
|
||||
path = "lib.rs"
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
|
@ -26,3 +25,6 @@ pyo3 = { version = "0.20.0", features = ["extension-module", "indexmap", "chrono
|
|||
indexmap = { version = "2.1.0" }
|
||||
chrono = "0.4"
|
||||
spin_on = "0.1"
|
||||
|
||||
[package.metadata.maturin]
|
||||
python-source = "slint"
|
||||
|
|
|
@ -6,7 +6,7 @@ requires = ["maturin>=1,<2"]
|
|||
build-backend = "maturin"
|
||||
|
||||
[project]
|
||||
name = "pyslint"
|
||||
name = "slint"
|
||||
version = "1.4.0"
|
||||
classifiers = [
|
||||
"Development Status :: 3 - Alpha",
|
||||
|
|
10
api/python/slint/__init__.py
Normal file
10
api/python/slint/__init__.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Copyright © SixtyFPS GmbH <info@slint.dev>
|
||||
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||
|
||||
from . import slint as native
|
||||
|
||||
def load_file(path):
|
||||
compiler = native.ComponentCompiler()
|
||||
compdef = compiler.build_from_path(path)
|
||||
instance = compdef.create()
|
||||
return instance
|
|
@ -2,11 +2,11 @@
|
|||
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||
|
||||
import pytest
|
||||
import slint
|
||||
from slint import ValueType;
|
||||
from slint import slint as native
|
||||
from slint.slint import ValueType;
|
||||
|
||||
def test_basic_compiler():
|
||||
compiler = slint.ComponentCompiler()
|
||||
compiler = native.ComponentCompiler()
|
||||
|
||||
assert compiler.include_paths == []
|
||||
compiler.include_paths = ["testing"]
|
||||
|
@ -54,7 +54,7 @@ def test_basic_compiler():
|
|||
assert instance != None
|
||||
|
||||
def test_compiler_build_from_path():
|
||||
compiler = slint.ComponentCompiler()
|
||||
compiler = native.ComponentCompiler()
|
||||
|
||||
assert len(compiler.diagnostics) == 0
|
||||
|
||||
|
@ -62,5 +62,5 @@ def test_compiler_build_from_path():
|
|||
diags = compiler.diagnostics
|
||||
assert len(diags) == 1
|
||||
|
||||
assert diags[0].level == slint.DiagnosticLevel.Error
|
||||
assert diags[0].level == native.DiagnosticLevel.Error
|
||||
assert diags[0].message.startswith("Could not load Nonexistent.slint:")
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||
|
||||
import pytest
|
||||
import slint
|
||||
from slint import ValueType;
|
||||
from slint import slint as native
|
||||
from slint.slint import ValueType;
|
||||
|
||||
def test_property_access():
|
||||
compiler = slint.ComponentCompiler()
|
||||
compiler = native.ComponentCompiler()
|
||||
|
||||
compdef = compiler.build_from_source("""
|
||||
export global TestGlobal {
|
||||
|
@ -69,7 +69,7 @@ def test_property_access():
|
|||
assert instance.get_global_property("TestGlobal", "theglobalprop") == "Ok"
|
||||
|
||||
def test_callbacks():
|
||||
compiler = slint.ComponentCompiler()
|
||||
compiler = native.ComponentCompiler()
|
||||
|
||||
compdef = compiler.build_from_source("""
|
||||
export global TestGlobal {
|
||||
|
@ -113,8 +113,7 @@ def test_callbacks():
|
|||
|
||||
|
||||
if __name__ == "__main__":
|
||||
compiler = slint.ComponentCompiler()
|
||||
compdef = compiler.build_from_path("../../examples/printerdemo/ui/printerdemo.slint")
|
||||
instance = compdef.create()
|
||||
import slint
|
||||
instance = slint.load_file("../../examples/printerdemo/ui/printerdemo.slint")
|
||||
instance.set_global_callback("PrinterQueue", "start-job", lambda title: print(f"new print job {title}"))
|
||||
instance.run()
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||
|
||||
import pytest
|
||||
import slint
|
||||
from slint import ValueType
|
||||
from slint import slint as native
|
||||
from slint.slint import ValueType;
|
||||
from datetime import timedelta
|
||||
|
||||
def test_timer():
|
||||
|
@ -13,14 +13,14 @@ def test_timer():
|
|||
global counter
|
||||
counter = counter + 1
|
||||
if counter >= 2:
|
||||
slint.quit_event_loop()
|
||||
native.quit_event_loop()
|
||||
|
||||
test_timer = slint.Timer()
|
||||
test_timer.start(slint.TimerMode.Repeated, timedelta(milliseconds=100), quit_after_two_invocations)
|
||||
slint.run_event_loop()
|
||||
test_timer = native.Timer()
|
||||
test_timer.start(native.TimerMode.Repeated, timedelta(milliseconds=100), quit_after_two_invocations)
|
||||
native.run_event_loop()
|
||||
test_timer.stop()
|
||||
assert(counter == 2)
|
||||
|
||||
def test_single_shot():
|
||||
slint.Timer.single_shot(timedelta(milliseconds=100), slint.quit_event_loop)
|
||||
slint.run_event_loop()
|
||||
native.Timer.single_shot(timedelta(milliseconds=100), native.quit_event_loop)
|
||||
native.run_event_loop()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue