mirror of
https://github.com/slint-ui/slint.git
synced 2025-09-29 05:14:48 +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
|
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "pyslint"
|
name = "slint-python"
|
||||||
version.workspace = true
|
version.workspace = true
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
|
@ -14,7 +14,6 @@ publish = false
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "slint"
|
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
|
@ -26,3 +25,6 @@ pyo3 = { version = "0.20.0", features = ["extension-module", "indexmap", "chrono
|
||||||
indexmap = { version = "2.1.0" }
|
indexmap = { version = "2.1.0" }
|
||||||
chrono = "0.4"
|
chrono = "0.4"
|
||||||
spin_on = "0.1"
|
spin_on = "0.1"
|
||||||
|
|
||||||
|
[package.metadata.maturin]
|
||||||
|
python-source = "slint"
|
||||||
|
|
|
@ -6,7 +6,7 @@ requires = ["maturin>=1,<2"]
|
||||||
build-backend = "maturin"
|
build-backend = "maturin"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "pyslint"
|
name = "slint"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 3 - Alpha",
|
"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
|
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import slint
|
from slint import slint as native
|
||||||
from slint import ValueType;
|
from slint.slint import ValueType;
|
||||||
|
|
||||||
def test_basic_compiler():
|
def test_basic_compiler():
|
||||||
compiler = slint.ComponentCompiler()
|
compiler = native.ComponentCompiler()
|
||||||
|
|
||||||
assert compiler.include_paths == []
|
assert compiler.include_paths == []
|
||||||
compiler.include_paths = ["testing"]
|
compiler.include_paths = ["testing"]
|
||||||
|
@ -54,7 +54,7 @@ def test_basic_compiler():
|
||||||
assert instance != None
|
assert instance != None
|
||||||
|
|
||||||
def test_compiler_build_from_path():
|
def test_compiler_build_from_path():
|
||||||
compiler = slint.ComponentCompiler()
|
compiler = native.ComponentCompiler()
|
||||||
|
|
||||||
assert len(compiler.diagnostics) == 0
|
assert len(compiler.diagnostics) == 0
|
||||||
|
|
||||||
|
@ -62,5 +62,5 @@ def test_compiler_build_from_path():
|
||||||
diags = compiler.diagnostics
|
diags = compiler.diagnostics
|
||||||
assert len(diags) == 1
|
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:")
|
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
|
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import slint
|
from slint import slint as native
|
||||||
from slint import ValueType;
|
from slint.slint import ValueType;
|
||||||
|
|
||||||
def test_property_access():
|
def test_property_access():
|
||||||
compiler = slint.ComponentCompiler()
|
compiler = native.ComponentCompiler()
|
||||||
|
|
||||||
compdef = compiler.build_from_source("""
|
compdef = compiler.build_from_source("""
|
||||||
export global TestGlobal {
|
export global TestGlobal {
|
||||||
|
@ -69,7 +69,7 @@ def test_property_access():
|
||||||
assert instance.get_global_property("TestGlobal", "theglobalprop") == "Ok"
|
assert instance.get_global_property("TestGlobal", "theglobalprop") == "Ok"
|
||||||
|
|
||||||
def test_callbacks():
|
def test_callbacks():
|
||||||
compiler = slint.ComponentCompiler()
|
compiler = native.ComponentCompiler()
|
||||||
|
|
||||||
compdef = compiler.build_from_source("""
|
compdef = compiler.build_from_source("""
|
||||||
export global TestGlobal {
|
export global TestGlobal {
|
||||||
|
@ -113,8 +113,7 @@ def test_callbacks():
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
compiler = slint.ComponentCompiler()
|
import slint
|
||||||
compdef = compiler.build_from_path("../../examples/printerdemo/ui/printerdemo.slint")
|
instance = slint.load_file("../../examples/printerdemo/ui/printerdemo.slint")
|
||||||
instance = compdef.create()
|
|
||||||
instance.set_global_callback("PrinterQueue", "start-job", lambda title: print(f"new print job {title}"))
|
instance.set_global_callback("PrinterQueue", "start-job", lambda title: print(f"new print job {title}"))
|
||||||
instance.run()
|
instance.run()
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import slint
|
from slint import slint as native
|
||||||
from slint import ValueType
|
from slint.slint import ValueType;
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
def test_timer():
|
def test_timer():
|
||||||
|
@ -13,14 +13,14 @@ def test_timer():
|
||||||
global counter
|
global counter
|
||||||
counter = counter + 1
|
counter = counter + 1
|
||||||
if counter >= 2:
|
if counter >= 2:
|
||||||
slint.quit_event_loop()
|
native.quit_event_loop()
|
||||||
|
|
||||||
test_timer = slint.Timer()
|
test_timer = native.Timer()
|
||||||
test_timer.start(slint.TimerMode.Repeated, timedelta(milliseconds=100), quit_after_two_invocations)
|
test_timer.start(native.TimerMode.Repeated, timedelta(milliseconds=100), quit_after_two_invocations)
|
||||||
slint.run_event_loop()
|
native.run_event_loop()
|
||||||
test_timer.stop()
|
test_timer.stop()
|
||||||
assert(counter == 2)
|
assert(counter == 2)
|
||||||
|
|
||||||
def test_single_shot():
|
def test_single_shot():
|
||||||
slint.Timer.single_shot(timedelta(milliseconds=100), slint.quit_event_loop)
|
native.Timer.single_shot(timedelta(milliseconds=100), native.quit_event_loop)
|
||||||
slint.run_event_loop()
|
native.run_event_loop()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue