瀏覽代碼

QKnob: component is used to take a number input from the user through mouse/touch panning.

Diego Queiroz 2 年之前
父節點
當前提交
be4b93781c
共有 4 個文件被更改,包括 58 次插入0 次删除
  1. 10 0
      nicegui/elements/knob.js
  2. 42 0
      nicegui/elements/knob.py
  3. 1 0
      nicegui/ui.py
  4. 5 0
      website/reference.py

+ 10 - 0
nicegui/elements/knob.js

@@ -0,0 +1,10 @@
+export default {
+  template: `<q-knob>
+      <q-icon :name="this.inner_icon" :size="this.size_icon" :color="this.color_icon" />
+    </q-knob>`,
+  props: {
+    color_icon: String,
+    inner_icon: String,
+    size_icon: String,
+  },
+};

+ 42 - 0
nicegui/elements/knob.py

@@ -0,0 +1,42 @@
+from ..dependencies import register_component
+from ..element import Element
+
+register_component("knob", __file__, "knob.js")
+
+
+class Knob(Element):
+    def __init__(
+        self,
+        color: str = "primary",
+        center_color: str = "white",
+        track_color: str = "secondary",
+        size: str = "",
+        icon: str | None = None,
+        icon_color: str = "black",
+        icon_size: str = "1rem",
+    ):
+        """Knob
+
+        This element is based on Quasar's `QKnob <https://quasar.dev/vue-components/knob>`_ component.
+        The element is used to take a number input from the user through mouse/touch panning.
+
+        :param color: color name for component, examples: primary, teal-10.
+        :param center_color: color name for the center part of the component, examples: primary, teal-10.
+        :param track_color: color name for the track of the component, examples: primary, teal-10.
+        :param size: size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl), examples: 16px, 2rem.
+        :param icon: name for the icon in the center of thecomponent, examples: volume_up, volume_down.
+        :param icon_color: color name for the icon in the center of the component, examples: primary, teal-10.
+        :param icon_size: size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl), examples: 16px, 2rem.
+        """
+        super().__init__("knob")
+
+        self._props["color"] = color
+        self._props["center-color"] = center_color
+        self._props["track-color"] = track_color
+        self._props["size"] = size
+
+        if icon is not None:
+            self._props["show-value"] = True
+            self._props["inner_icon"] = icon
+            self._props["color_icon"] = icon_color
+            self._props["size_icon"] = icon_size

+ 1 - 0
nicegui/ui.py

@@ -23,6 +23,7 @@ from .elements.input import Input as input
 from .elements.interactive_image import InteractiveImage as interactive_image
 from .elements.joystick import Joystick as joystick
 from .elements.keyboard import Keyboard as keyboard
+from .elements.knob import Knob as knob
 from .elements.label import Label as label
 from .elements.link import Link as link
 from .elements.link import LinkTarget as link_target

+ 5 - 0
website/reference.py

@@ -146,6 +146,11 @@ def create_full(menu: ui.element) -> None:
                   on_change=lambda e: result.set_text(f'you entered: {e.value}'))
         result = ui.label()
 
+    @example(ui.knob, menu)
+    def knob_example():
+        ui.knob()
+        ui.knob(icon="volume_up")
+
     @example(ui.color_input, menu)
     def color_input_example():
         label = ui.label('Change my color!')