fluentpy-qt 0.6.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fluentpy_qt-0.6.9/.editorconfig +11 -0
- fluentpy_qt-0.6.9/.gitattributes +8 -0
- fluentpy_qt-0.6.9/AGENTS.md +12 -0
- fluentpy_qt-0.6.9/LICENSE +21 -0
- fluentpy_qt-0.6.9/MANIFEST.in +15 -0
- fluentpy_qt-0.6.9/PKG-INFO +102 -0
- fluentpy_qt-0.6.9/README-PyPI.md +71 -0
- fluentpy_qt-0.6.9/README.md +248 -0
- fluentpy_qt-0.6.9/THIRD_PARTY_NOTICES.md +54 -0
- fluentpy_qt-0.6.9/UPDATE_LOG.md +451 -0
- fluentpy_qt-0.6.9/benchmarks/baseline-original-source.json +4 -0
- fluentpy_qt-0.6.9/benchmarks/baseline-original.json +2017 -0
- fluentpy_qt-0.6.9/benchmarks/text-performance-10000.json +606 -0
- fluentpy_qt-0.6.9/benchmarks/text-performance-50000.json +398 -0
- fluentpy_qt-0.6.9/benchmarks/text-performance.json +398 -0
- fluentpy_qt-0.6.9/docs/assets/buttons-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/buttons-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/cards-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/cards-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/code-editor-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/code-editor-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/date-picker-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/drop-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/drop-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/gallery-preview-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/gallery-preview.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/note-timeline-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/note-timeline-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/progress-toast-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/progress-toast-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/shortcut-picker-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/shortcut-picker-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/showcase-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/showcase-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/splash-screen-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/splash-screen-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/tables-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/tables-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/toast-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/toast-light.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/window-mica-dark.png +0 -0
- fluentpy_qt-0.6.9/docs/assets/window-mica-light.png +0 -0
- fluentpy_qt-0.6.9/docs/backends.md +45 -0
- fluentpy_qt-0.6.9/docs/buttons.md +51 -0
- fluentpy_qt-0.6.9/docs/calendar-picker.md +72 -0
- fluentpy_qt-0.6.9/docs/cards.md +97 -0
- fluentpy_qt-0.6.9/docs/code-editor.md +45 -0
- fluentpy_qt-0.6.9/docs/color-toast.md +101 -0
- fluentpy_qt-0.6.9/docs/colors.md +78 -0
- fluentpy_qt-0.6.9/docs/combo-boxes.md +73 -0
- fluentpy_qt-0.6.9/docs/context.md +20 -0
- fluentpy_qt-0.6.9/docs/date-picker.md +59 -0
- fluentpy_qt-0.6.9/docs/drag-drop.md +43 -0
- fluentpy_qt-0.6.9/docs/fluent-window.md +170 -0
- fluentpy_qt-0.6.9/docs/info-bars.md +68 -0
- fluentpy_qt-0.6.9/docs/inputs.md +46 -0
- fluentpy_qt-0.6.9/docs/licensing-boundaries.md +24 -0
- fluentpy_qt-0.6.9/docs/menus.md +101 -0
- fluentpy_qt-0.6.9/docs/native-build.md +82 -0
- fluentpy_qt-0.6.9/docs/navigation.md +55 -0
- fluentpy_qt-0.6.9/docs/note-timeline.md +110 -0
- fluentpy_qt-0.6.9/docs/performance.md +79 -0
- fluentpy_qt-0.6.9/docs/progress-toast.md +57 -0
- fluentpy_qt-0.6.9/docs/publishing.md +65 -0
- fluentpy_qt-0.6.9/docs/shortcut-picker.md +39 -0
- fluentpy_qt-0.6.9/docs/sliders.md +65 -0
- fluentpy_qt-0.6.9/docs/splash-screen.md +56 -0
- fluentpy_qt-0.6.9/docs/tables.md +105 -0
- fluentpy_qt-0.6.9/docs/time-picker.md +33 -0
- fluentpy_qt-0.6.9/docs/visual-research.md +26 -0
- fluentpy_qt-0.6.9/docs/winui-resource-notes.md +24 -0
- fluentpy_qt-0.6.9/examples/advanced_inputs.py +77 -0
- fluentpy_qt-0.6.9/examples/buttons.py +200 -0
- fluentpy_qt-0.6.9/examples/calendar_picker.py +100 -0
- fluentpy_qt-0.6.9/examples/capture_code_editor.py +39 -0
- fluentpy_qt-0.6.9/examples/cards.py +390 -0
- fluentpy_qt-0.6.9/examples/checkbox.py +88 -0
- fluentpy_qt-0.6.9/examples/code_editor.py +123 -0
- fluentpy_qt-0.6.9/examples/color_toast.py +158 -0
- fluentpy_qt-0.6.9/examples/colors.py +155 -0
- fluentpy_qt-0.6.9/examples/combo_boxes.py +230 -0
- fluentpy_qt-0.6.9/examples/component_playground.py +74 -0
- fluentpy_qt-0.6.9/examples/date_picker.py +185 -0
- fluentpy_qt-0.6.9/examples/drop.py +154 -0
- fluentpy_qt-0.6.9/examples/expandable_cards.py +242 -0
- fluentpy_qt-0.6.9/examples/fluent_window.py +386 -0
- fluentpy_qt-0.6.9/examples/info_bar.py +215 -0
- fluentpy_qt-0.6.9/examples/menus.py +257 -0
- fluentpy_qt-0.6.9/examples/note_timeline.py +149 -0
- fluentpy_qt-0.6.9/examples/progress_toast.py +208 -0
- fluentpy_qt-0.6.9/examples/run_advanced_inputs.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_buttons.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_calendar_picker.bat +5 -0
- fluentpy_qt-0.6.9/examples/run_cards.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_checkbox.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_code_editor.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_color_toast.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_colors.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_combo_boxes.bat +3 -0
- fluentpy_qt-0.6.9/examples/run_date_picker.bat +5 -0
- fluentpy_qt-0.6.9/examples/run_drop.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_expandable_cards.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_fluent_window.bat +3 -0
- fluentpy_qt-0.6.9/examples/run_info_bar.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_menus.bat +3 -0
- fluentpy_qt-0.6.9/examples/run_progress_toast.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_shortcut_picker.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_showcase.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_sliders.bat +3 -0
- fluentpy_qt-0.6.9/examples/run_splash_screen.bat +3 -0
- fluentpy_qt-0.6.9/examples/run_tables.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_text_performance.bat +4 -0
- fluentpy_qt-0.6.9/examples/run_time_picker.bat +5 -0
- fluentpy_qt-0.6.9/examples/run_toast.bat +4 -0
- fluentpy_qt-0.6.9/examples/shortcut_picker.py +128 -0
- fluentpy_qt-0.6.9/examples/showcase.py +1133 -0
- fluentpy_qt-0.6.9/examples/sliders.py +176 -0
- fluentpy_qt-0.6.9/examples/splash_screen.py +164 -0
- fluentpy_qt-0.6.9/examples/tables.py +253 -0
- fluentpy_qt-0.6.9/examples/text_performance.py +387 -0
- fluentpy_qt-0.6.9/examples/time_picker.py +139 -0
- fluentpy_qt-0.6.9/examples/toast.py +99 -0
- fluentpy_qt-0.6.9/examples/workbench_cards.py +63 -0
- fluentpy_qt-0.6.9/examples/workbench_context_menus.py +435 -0
- fluentpy_qt-0.6.9/examples/workbench_feedback.py +295 -0
- fluentpy_qt-0.6.9/examples/workbench_settings.py +210 -0
- fluentpy_qt-0.6.9/licenses/Microsoft-Fluent-System-Icons-LICENSE.txt +21 -0
- fluentpy_qt-0.6.9/native/calendar_accel.c +203 -0
- fluentpy_qt-0.6.9/native/calendar_accel.h +5 -0
- fluentpy_qt-0.6.9/native/color_accel.c +122 -0
- fluentpy_qt-0.6.9/native/color_accel.h +5 -0
- fluentpy_qt-0.6.9/native/date_accel.c +351 -0
- fluentpy_qt-0.6.9/native/date_accel.h +10 -0
- fluentpy_qt-0.6.9/native/drop_accel.c +194 -0
- fluentpy_qt-0.6.9/native/drop_accel.h +5 -0
- fluentpy_qt-0.6.9/native/input_accel.c +38 -0
- fluentpy_qt-0.6.9/native/input_accel.h +5 -0
- fluentpy_qt-0.6.9/native/shortcut_accel.c +138 -0
- fluentpy_qt-0.6.9/native/shortcut_accel.h +5 -0
- fluentpy_qt-0.6.9/native/text_accel.c +351 -0
- fluentpy_qt-0.6.9/native/time_accel.c +151 -0
- fluentpy_qt-0.6.9/native/time_accel.h +5 -0
- fluentpy_qt-0.6.9/pyproject.toml +49 -0
- fluentpy_qt-0.6.9/scripts/benchmark_baseline.py +314 -0
- fluentpy_qt-0.6.9/scripts/benchmark_text.py +274 -0
- fluentpy_qt-0.6.9/scripts/build_native.py +111 -0
- fluentpy_qt-0.6.9/scripts/check_release_install.py +99 -0
- fluentpy_qt-0.6.9/scripts/export_docs.py +153 -0
- fluentpy_qt-0.6.9/scripts/fetch_zig.py +46 -0
- fluentpy_qt-0.6.9/scripts/prepare_release.py +70 -0
- fluentpy_qt-0.6.9/scripts/publish_pypi.py +117 -0
- fluentpy_qt-0.6.9/setup.cfg +4 -0
- fluentpy_qt-0.6.9/setup.py +49 -0
- fluentpy_qt-0.6.9/src/fluentpy/__init__.py +178 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/__init__.py +1 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/brand/fluentpy.svg +1 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/SOURCE.md +27 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/__init__.py +1 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_accessibility_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_add_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_add_circle_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_add_square_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_airplane_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_alert_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_apps_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_apps_list_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_archive_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_clockwise_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_down_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_down_left_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_download_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_exit_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_export_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_import_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_left_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_maximize_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_minimize_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_repeat_all_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_reset_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_right_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_rotate_clockwise_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_rotate_counterclockwise_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_sort_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_swap_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_sync_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_trending_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_up_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_up_right_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_arrow_upload_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_attach_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_backpack_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_book_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_bookmark_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_bot_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_briefcase_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_bug_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_building_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_building_bank_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_calendar_ltr_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_call_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_camera_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_cart_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_chat_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_chat_multiple_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_checkbox_checked_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_checkbox_unchecked_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_checkmark_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_checkmark_circle_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_checkmark_square_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_chevron_down_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_chevron_left_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_chevron_right_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_chevron_up_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_clipboard_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_clipboard_text_ltr_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_clock_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_cloud_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_code_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_color_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_comment_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_comment_multiple_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_contact_card_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_copy_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_cut_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_delete_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_desktop_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_dismiss_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_dismiss_circle_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_document_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_document_add_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_document_copy_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_document_edit_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_document_save_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_document_search_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_document_text_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_edit_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_eye_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_eye_off_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_eyedropper_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_filter_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_filter_dismiss_24_regular.svg +6 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_fingerprint_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_flag_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_folder_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_folder_open_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_games_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_globe_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_grid_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_heart_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_history_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_home_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_icons_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_image_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_info_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_key_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_laptop_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_layout_row_three_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_money_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_music_note_2_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_navigation_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_open_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_settings_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_table_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_text_font_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/assets/icons/ic_fluent_toolbox_24_regular.svg +3 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/__init__.py +5 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/_calendar_python.py +108 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/_color_python.py +72 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/_compat.py +40 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/_date_python.py +84 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/_drop_python.py +70 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/_input_python.py +12 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/_shortcut_python.py +47 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/_time_python.py +61 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/calendar.py +65 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/color.py +48 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/date.py +100 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/drop.py +50 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/input.py +19 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/shortcut.py +57 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/text.py +102 -0
- fluentpy_qt-0.6.9/src/fluentpy/backends/time.py +60 -0
- fluentpy_qt-0.6.9/src/fluentpy/icons.py +135 -0
- fluentpy_qt-0.6.9/src/fluentpy/qt.py +34 -0
- fluentpy_qt-0.6.9/src/fluentpy/theme/__init__.py +4 -0
- fluentpy_qt-0.6.9/src/fluentpy/theme/fonts.py +20 -0
- fluentpy_qt-0.6.9/src/fluentpy/theme/manager.py +128 -0
- fluentpy_qt-0.6.9/src/fluentpy/theme/tokens.py +145 -0
- fluentpy_qt-0.6.9/src/fluentpy/theme/transition.py +206 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/__init__.py +140 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/_style.py +82 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/action_menu.py +839 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/advanced_button.py +416 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/affix_line_edit.py +83 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/button.py +454 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/calendar_picker.py +915 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/card.py +154 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/checkbox.py +206 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/code_edit.py +368 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/color_panel.py +612 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/color_picker.py +285 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/color_toast.py +291 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/combo_box.py +969 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/date_picker.py +536 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/dialog.py +406 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/drop.py +420 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/expandable_card.py +384 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/eyedropper.py +254 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/header_card.py +288 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/info_bar.py +324 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/line_edit.py +715 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/navigation.py +1165 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/navigation_controls.py +582 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/note_timeline.py +230 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/pin_code_edit.py +178 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/progress_bar.py +17 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/progress_toast.py +359 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/radio_button.py +115 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/scroll_bar.py +195 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/shortcut_picker.py +412 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/slider.py +705 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/splash_screen.py +333 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/surface.py +204 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/table_view.py +513 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/time_picker.py +526 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/title_bar.py +455 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/toast.py +396 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/toast_stack.py +80 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/toggle_switch.py +102 -0
- fluentpy_qt-0.6.9/src/fluentpy/widgets/window.py +712 -0
- fluentpy_qt-0.6.9/src/fluentpy/window_effects.py +333 -0
- fluentpy_qt-0.6.9/src/fluentpy_qt.egg-info/PKG-INFO +102 -0
- fluentpy_qt-0.6.9/src/fluentpy_qt.egg-info/SOURCES.txt +396 -0
- fluentpy_qt-0.6.9/src/fluentpy_qt.egg-info/dependency_links.txt +1 -0
- fluentpy_qt-0.6.9/src/fluentpy_qt.egg-info/requires.txt +5 -0
- fluentpy_qt-0.6.9/src/fluentpy_qt.egg-info/top_level.txt +1 -0
- fluentpy_qt-0.6.9/tests/test_advanced_button.py +421 -0
- fluentpy_qt-0.6.9/tests/test_advanced_inputs.py +112 -0
- fluentpy_qt-0.6.9/tests/test_animated_stack.py +244 -0
- fluentpy_qt-0.6.9/tests/test_backend_fallback.py +259 -0
- fluentpy_qt-0.6.9/tests/test_calendar_picker.py +266 -0
- fluentpy_qt-0.6.9/tests/test_cards.py +242 -0
- fluentpy_qt-0.6.9/tests/test_checkbox.py +119 -0
- fluentpy_qt-0.6.9/tests/test_code_edit.py +232 -0
- fluentpy_qt-0.6.9/tests/test_color_backend.py +67 -0
- fluentpy_qt-0.6.9/tests/test_color_controls.py +175 -0
- fluentpy_qt-0.6.9/tests/test_color_toast.py +218 -0
- fluentpy_qt-0.6.9/tests/test_combo_boxes.py +351 -0
- fluentpy_qt-0.6.9/tests/test_date_backend.py +290 -0
- fluentpy_qt-0.6.9/tests/test_date_picker.py +491 -0
- fluentpy_qt-0.6.9/tests/test_dialog_display.py +107 -0
- fluentpy_qt-0.6.9/tests/test_dialog_lifecycle.py +59 -0
- fluentpy_qt-0.6.9/tests/test_drop_backend.py +67 -0
- fluentpy_qt-0.6.9/tests/test_drop_widget.py +292 -0
- fluentpy_qt-0.6.9/tests/test_expandable_cards.py +273 -0
- fluentpy_qt-0.6.9/tests/test_expandable_demo.py +82 -0
- fluentpy_qt-0.6.9/tests/test_feedback_playground.py +110 -0
- fluentpy_qt-0.6.9/tests/test_fluent_window.py +274 -0
- fluentpy_qt-0.6.9/tests/test_header_cards.py +219 -0
- fluentpy_qt-0.6.9/tests/test_icons.py +74 -0
- fluentpy_qt-0.6.9/tests/test_info_bar.py +167 -0
- fluentpy_qt-0.6.9/tests/test_input_backend.py +41 -0
- fluentpy_qt-0.6.9/tests/test_menu_extensions.py +322 -0
- fluentpy_qt-0.6.9/tests/test_metadata.py +8 -0
- fluentpy_qt-0.6.9/tests/test_native_backend.py +169 -0
- fluentpy_qt-0.6.9/tests/test_native_publish.py +34 -0
- fluentpy_qt-0.6.9/tests/test_native_window_chrome.py +162 -0
- fluentpy_qt-0.6.9/tests/test_navigation_controls.py +64 -0
- fluentpy_qt-0.6.9/tests/test_navigation_lifecycle.py +206 -0
- fluentpy_qt-0.6.9/tests/test_navigation_sidebar.py +161 -0
- fluentpy_qt-0.6.9/tests/test_navigation_visibility.py +133 -0
- fluentpy_qt-0.6.9/tests/test_note_timeline.py +274 -0
- fluentpy_qt-0.6.9/tests/test_progress_toast.py +352 -0
- fluentpy_qt-0.6.9/tests/test_pypi_release.py +107 -0
- fluentpy_qt-0.6.9/tests/test_shell_material.py +212 -0
- fluentpy_qt-0.6.9/tests/test_shortcut_backend.py +60 -0
- fluentpy_qt-0.6.9/tests/test_shortcut_picker.py +294 -0
- fluentpy_qt-0.6.9/tests/test_sidebar_regions.py +199 -0
- fluentpy_qt-0.6.9/tests/test_slider_demo.py +61 -0
- fluentpy_qt-0.6.9/tests/test_sliders.py +347 -0
- fluentpy_qt-0.6.9/tests/test_splash_screen.py +290 -0
- fluentpy_qt-0.6.9/tests/test_tab_bar_lifecycle.py +166 -0
- fluentpy_qt-0.6.9/tests/test_tables.py +395 -0
- fluentpy_qt-0.6.9/tests/test_theme_lifecycle.py +183 -0
- fluentpy_qt-0.6.9/tests/test_theme_subscription.py +165 -0
- fluentpy_qt-0.6.9/tests/test_theme_transition.py +155 -0
- fluentpy_qt-0.6.9/tests/test_time_picker.py +355 -0
- fluentpy_qt-0.6.9/tests/test_title_bar.py +273 -0
- fluentpy_qt-0.6.9/tests/test_toast.py +450 -0
- fluentpy_qt-0.6.9/tests/test_toast_stack.py +97 -0
- fluentpy_qt-0.6.9/tests/test_ui_lifetime.py +70 -0
- fluentpy_qt-0.6.9/tests/test_window_demo.py +122 -0
- fluentpy_qt-0.6.9/tests/test_window_effects.py +203 -0
- fluentpy_qt-0.6.9/tests/test_workbench.py +155 -0
- fluentpy_qt-0.6.9/tests/test_workbench_context_menus.py +308 -0
- fluentpy_qt-0.6.9/tests/test_workbench_settings.py +288 -0
- fluentpy_qt-0.6.9/tests/test_workbench_startup.py +212 -0
- fluentpy_qt-0.6.9//344/270/212/344/274/240/345/210/260PyPI.bat +25 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# FluentPy 开发约定
|
|
2
|
+
|
|
3
|
+
## 后端运算优先 C,并保留 Python 兼容回退
|
|
4
|
+
|
|
5
|
+
用户于2026-10-16指定后端使用C、前端无需迁移;于2026-10-17补充:C扩展不可用时自动回退Python,不能让组件失去功能。以下为当前约定。
|
|
6
|
+
|
|
7
|
+
- 后端运算以C作为首选加速实现,放在`native/`,通过扩展向Python暴露接口;同步维护行为兼容的Python回退。
|
|
8
|
+
- Python 负责公开组件接口、C 绑定与调用,以及 Qt 界面逻辑;保持已有公开 API 的使用方式。
|
|
9
|
+
- C扩展缺失、导入失败或缺少对应接口时自动回退Python,不能因此禁用日期、拖放或快捷键组件;旧扩展可用的其他接口继续使用C。
|
|
10
|
+
- `FLUENTPY_BACKEND=auto`优先C并自动回退,`python`强制所有兼容实现,`native`显式要求C并在对应接口缺失时报错。模式统一作用于文本、日期、时间、拖放和快捷键。回退不隐藏业务参数错误。
|
|
11
|
+
- 前端控件、布局与绘制继续使用现有 Qt/Python 方案,不为本约定专门迁移到 C。
|
|
12
|
+
- 报告实际接入的 C 路径与实测结果,不将该约定表述为全部组件已经完成 C 改造。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FluentPy contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
include LICENSE THIRD_PARTY_NOTICES.md README.md README-PyPI.md pyproject.toml setup.py
|
|
2
|
+
include UPDATE_LOG.md AGENTS.md
|
|
3
|
+
include 上传到PyPI.bat
|
|
4
|
+
include .editorconfig .gitattributes
|
|
5
|
+
recursive-include src *.py *.svg
|
|
6
|
+
recursive-include native *.c *.h
|
|
7
|
+
recursive-include scripts *.py *.ps1 *.bat
|
|
8
|
+
recursive-include examples *.py *.bat
|
|
9
|
+
recursive-include tests *.py
|
|
10
|
+
include benchmarks/baseline-original-source.json
|
|
11
|
+
include benchmarks/baseline-original.json
|
|
12
|
+
include benchmarks/text-performance*.json
|
|
13
|
+
recursive-include docs *.md *.png
|
|
14
|
+
recursive-include licenses *.txt
|
|
15
|
+
global-exclude *.pyd *.dll *.so *.pyc *.pyo
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fluentpy-qt
|
|
3
|
+
Version: 0.6.9
|
|
4
|
+
Summary: Independent MIT-licensed Fluent-inspired UI toolkit for Qt for Python.
|
|
5
|
+
Author: 性邓的小馒头
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://fluentpy.mcxmcl.cn/
|
|
8
|
+
Project-URL: Documentation, https://fluentpy.mcxmcl.cn/
|
|
9
|
+
Project-URL: Repository, https://github.com/XDDXMT/FluentPy
|
|
10
|
+
Project-URL: Issues, https://github.com/XDDXMT/FluentPy/issues
|
|
11
|
+
Keywords: qt,pyside6,fluent,widgets,desktop
|
|
12
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
13
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Software Development :: User Interfaces
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
License-File: licenses/Microsoft-Fluent-System-Icons-LICENSE.txt
|
|
25
|
+
License-File: THIRD_PARTY_NOTICES.md
|
|
26
|
+
Requires-Dist: PySide6>=6.6
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
29
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# FluentPy for Qt
|
|
33
|
+
|
|
34
|
+
**Fluent 风格的 Qt for Python 桌面组件库,由性邓的小馒头独立开发,采用 MIT 许可证。**
|
|
35
|
+
|
|
36
|
+
[中文文档](https://fluentpy.mcxmcl.cn/) · [源码与示例](https://github.com/XDDXMT/FluentPy) · [问题反馈](https://github.com/XDDXMT/FluentPy/issues)
|
|
37
|
+
|
|
38
|
+
## 安装
|
|
39
|
+
|
|
40
|
+
需要 Python 3.10+。建议在新建的虚拟环境内安装:
|
|
41
|
+
|
|
42
|
+
```console
|
|
43
|
+
python -m venv .venv
|
|
44
|
+
# Windows
|
|
45
|
+
.venv\Scripts\python -m pip install fluentpy-qt
|
|
46
|
+
# macOS / Linux
|
|
47
|
+
.venv/bin/python -m pip install fluentpy-qt
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
PyPI 安装名是 **`fluentpy-qt`**,代码导入名仍为 **`fluentpy`**。
|
|
51
|
+
PyPI 上的 `fluentpy` 是其他作者的独立项目,请勿用 `pip install fluentpy` 安装本组件库。
|
|
52
|
+
两个项目的导入名称冲突,应放在不同的虚拟环境中使用。
|
|
53
|
+
|
|
54
|
+
PySide6 会作为依赖安装。Qt、PySide6 等依赖遵循各自的许可证。
|
|
55
|
+
|
|
56
|
+
## 第一个窗口
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
import sys
|
|
60
|
+
from fluentpy import AccentButton, FluentWindow
|
|
61
|
+
from fluentpy.qt import QtWidgets
|
|
62
|
+
|
|
63
|
+
app = QtWidgets.QApplication(sys.argv)
|
|
64
|
+
window = FluentWindow("你好,FluentPy")
|
|
65
|
+
window.resize(800, 560)
|
|
66
|
+
window.set_title_bar_enabled(True)
|
|
67
|
+
button = AccentButton("你好,世界")
|
|
68
|
+
window.content_layout.addWidget(button)
|
|
69
|
+
window.show()
|
|
70
|
+
sys.exit(app.exec())
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 组件
|
|
74
|
+
|
|
75
|
+
- 按钮、输入、前后缀输入、分格密码、复选框和各类下拉选择。
|
|
76
|
+
- 表格、滑块、日期时间滚轮、日历、颜色编辑器和取色。
|
|
77
|
+
- 卡片、可展开容器、导航、流畅窗口、启动页面及主题渐变。
|
|
78
|
+
- 高级右键菜单、消息条、吐司、进度提示和对话框。
|
|
79
|
+
- 拖放、快捷键录制、代码编辑器和音符时间轴。
|
|
80
|
+
|
|
81
|
+
工作台和独立示例在源码仓库的 `examples/` 中,可从源码运行 `python examples/showcase.py`。
|
|
82
|
+
wheel 安装的是组件库,不包含示例工作台。
|
|
83
|
+
|
|
84
|
+
## 可选 C 加速
|
|
85
|
+
|
|
86
|
+
Qt 负责界面和动画;C 扩展加速文本、日期、时间、日历、拖放、快捷键、颜色和输入策略。
|
|
87
|
+
默认优先使用 C,扩展缺失或不兼容时自动回退 Python,基本运行无需 C 编译器。
|
|
88
|
+
|
|
89
|
+
当前提供 Windows x64 / CPython 3.13 的原生 wheel,以及不含本机二进制的通用 Python wheel。
|
|
90
|
+
其他 Python 版本和平台使用通用 wheel,运行兼容后端;也可从源码编译对应扩展。
|
|
91
|
+
`FLUENTPY_BACKEND=python` 可强制回退,`native` 要求对应 C 接口可用。
|
|
92
|
+
|
|
93
|
+
当前实际验证环境为 Windows x64、CPython 3.13、PySide6 / Qt 6.11.1。
|
|
94
|
+
其他平台的桌面表现需另行验证。Windows 11 云母效果在系统不支持时回退普通背景。
|
|
95
|
+
|
|
96
|
+
项目处于早期开发阶段。组件接口、用法及 C 构建说明见[官方文档](https://fluentpy.mcxmcl.cn/)。
|
|
97
|
+
|
|
98
|
+
## 来源与许可
|
|
99
|
+
|
|
100
|
+
FluentPy 独立实现组件,仅参考公开的 Fluent 设计与交互思路,不包含参考组件库的源码、样式或示例素材。
|
|
101
|
+
Microsoft Fluent UI System Icons 的 MIT 许可与来源声明随包提供。
|
|
102
|
+
详情见[第三方声明](https://github.com/XDDXMT/FluentPy/blob/main/THIRD_PARTY_NOTICES.md)。
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# FluentPy for Qt
|
|
2
|
+
|
|
3
|
+
**Fluent 风格的 Qt for Python 桌面组件库,由性邓的小馒头独立开发,采用 MIT 许可证。**
|
|
4
|
+
|
|
5
|
+
[中文文档](https://fluentpy.mcxmcl.cn/) · [源码与示例](https://github.com/XDDXMT/FluentPy) · [问题反馈](https://github.com/XDDXMT/FluentPy/issues)
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
需要 Python 3.10+。建议在新建的虚拟环境内安装:
|
|
10
|
+
|
|
11
|
+
```console
|
|
12
|
+
python -m venv .venv
|
|
13
|
+
# Windows
|
|
14
|
+
.venv\Scripts\python -m pip install fluentpy-qt
|
|
15
|
+
# macOS / Linux
|
|
16
|
+
.venv/bin/python -m pip install fluentpy-qt
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
PyPI 安装名是 **`fluentpy-qt`**,代码导入名仍为 **`fluentpy`**。
|
|
20
|
+
PyPI 上的 `fluentpy` 是其他作者的独立项目,请勿用 `pip install fluentpy` 安装本组件库。
|
|
21
|
+
两个项目的导入名称冲突,应放在不同的虚拟环境中使用。
|
|
22
|
+
|
|
23
|
+
PySide6 会作为依赖安装。Qt、PySide6 等依赖遵循各自的许可证。
|
|
24
|
+
|
|
25
|
+
## 第一个窗口
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
import sys
|
|
29
|
+
from fluentpy import AccentButton, FluentWindow
|
|
30
|
+
from fluentpy.qt import QtWidgets
|
|
31
|
+
|
|
32
|
+
app = QtWidgets.QApplication(sys.argv)
|
|
33
|
+
window = FluentWindow("你好,FluentPy")
|
|
34
|
+
window.resize(800, 560)
|
|
35
|
+
window.set_title_bar_enabled(True)
|
|
36
|
+
button = AccentButton("你好,世界")
|
|
37
|
+
window.content_layout.addWidget(button)
|
|
38
|
+
window.show()
|
|
39
|
+
sys.exit(app.exec())
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 组件
|
|
43
|
+
|
|
44
|
+
- 按钮、输入、前后缀输入、分格密码、复选框和各类下拉选择。
|
|
45
|
+
- 表格、滑块、日期时间滚轮、日历、颜色编辑器和取色。
|
|
46
|
+
- 卡片、可展开容器、导航、流畅窗口、启动页面及主题渐变。
|
|
47
|
+
- 高级右键菜单、消息条、吐司、进度提示和对话框。
|
|
48
|
+
- 拖放、快捷键录制、代码编辑器和音符时间轴。
|
|
49
|
+
|
|
50
|
+
工作台和独立示例在源码仓库的 `examples/` 中,可从源码运行 `python examples/showcase.py`。
|
|
51
|
+
wheel 安装的是组件库,不包含示例工作台。
|
|
52
|
+
|
|
53
|
+
## 可选 C 加速
|
|
54
|
+
|
|
55
|
+
Qt 负责界面和动画;C 扩展加速文本、日期、时间、日历、拖放、快捷键、颜色和输入策略。
|
|
56
|
+
默认优先使用 C,扩展缺失或不兼容时自动回退 Python,基本运行无需 C 编译器。
|
|
57
|
+
|
|
58
|
+
当前提供 Windows x64 / CPython 3.13 的原生 wheel,以及不含本机二进制的通用 Python wheel。
|
|
59
|
+
其他 Python 版本和平台使用通用 wheel,运行兼容后端;也可从源码编译对应扩展。
|
|
60
|
+
`FLUENTPY_BACKEND=python` 可强制回退,`native` 要求对应 C 接口可用。
|
|
61
|
+
|
|
62
|
+
当前实际验证环境为 Windows x64、CPython 3.13、PySide6 / Qt 6.11.1。
|
|
63
|
+
其他平台的桌面表现需另行验证。Windows 11 云母效果在系统不支持时回退普通背景。
|
|
64
|
+
|
|
65
|
+
项目处于早期开发阶段。组件接口、用法及 C 构建说明见[官方文档](https://fluentpy.mcxmcl.cn/)。
|
|
66
|
+
|
|
67
|
+
## 来源与许可
|
|
68
|
+
|
|
69
|
+
FluentPy 独立实现组件,仅参考公开的 Fluent 设计与交互思路,不包含参考组件库的源码、样式或示例素材。
|
|
70
|
+
Microsoft Fluent UI System Icons 的 MIT 许可与来源声明随包提供。
|
|
71
|
+
详情见[第三方声明](https://github.com/XDDXMT/FluentPy/blob/main/THIRD_PARTY_NOTICES.md)。
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# FluentPy
|
|
2
|
+
|
|
3
|
+
**面向 Qt for Python 的 Fluent 风格桌面组件库。**
|
|
4
|
+
|
|
5
|
+
FluentPy 是面向 Qt for Python 的 Fluent 风格组件库,由 **性邓的小馒头** 独立开发,采用 [MIT 许可证](LICENSE)。从输入框、卡片和日期滚轮,到带动画的导航、代码编辑器和消息浮层,可以逐个使用,也可以组合成完整工作台。
|
|
6
|
+
|
|
7
|
+
界面由 Qt 控件、绘制与动画实现;计算密集的后端逐步交给 C 扩展。默认使用 PySide6,保留 PyQt6 适配入口。当前版本为 **0.6.9**,仍处于早期开发阶段。
|
|
8
|
+
|
|
9
|
+
[官方文档](https://fluentpy.mcxmcl.cn/) · [文档源码](https://github.com/XDDXMT/FluentPy-Docs) · [快速开始](#快速开始) · [组件与示例](#组件与示例) · [C 后端与性能](#c-后端与性能) · [问题反馈](https://github.com/XDDXMT/FluentPy/issues)
|
|
10
|
+
|
|
11
|
+
## 界面展示
|
|
12
|
+
|
|
13
|
+
组件示例程序包含组件概览、14个组件页面和底部固定的设置页,直接使用 FluentWindow 的导航、标题栏与页面历史。组件页面涵盖按钮与右键菜单、输入、表格、滑块、日期时间、日历、拖放、颜色与取色、快捷键、卡片、导航、消息、代码编辑和音符。搜索和概览固定,中间导航列表独立滚动,底部设置随时可用。
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
<details>
|
|
18
|
+
<summary>查看深色主题</summary>
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+
|
|
22
|
+
</details>
|
|
23
|
+
|
|
24
|
+
工作台直接使用库内的 `NavigationView`、`NavigationSidebar` 和 `AnimatedStackedWidget`:侧栏展开与收起、选中指示条和页面切换都有动画。Pivot 与文档标签连接实际内容,支持编辑、新建、关闭和保留各页输入。
|
|
25
|
+
|
|
26
|
+
底部“设置”直接组合已有的 `ComboBox`、`Slider`、`ToggleSwitch`、`Button` 和 `GroupHeaderCardWidget`。主题、强调色、云母效果、侧栏宽度与展开状态、页面动画和后端状态显示均即时生效,使用 Qt 的 `QSettings` 自动保存;恢复默认设置保留文档输入。侧栏分区与自定义插槽见[导航说明](docs/navigation.md)。
|
|
27
|
+
|
|
28
|
+
卡片保持常规桌面尺寸,主题统一管理颜色和字体;内容区的操作交给内部按钮,折叠卡片通过标题条展开与收起,并保留表单值。组件示例采用 Microsoft Fluent 图标和统一的标题、内容与参数区,主图标与文档站一致。
|
|
29
|
+
|
|
30
|
+
下拉选择支持普通/可编辑、Qt 模型绑定、多选标签、树形单选与多选、透明样式和系统字体。工作台“文本与选择 → 下拉选择”集中预览与测试,也可运行 `python examples/combo_boxes.py`。详见[下拉选择](docs/combo-boxes.md)。
|
|
31
|
+
|
|
32
|
+
滑块有独立的侧栏入口,支持竖向、当前数值提示和双端区间;右键菜单支持多级子菜单、原生控件混排与鼠标点击定位,系统托盘使用真正的 QMenu。工作台采用可切换预览与参数区,详见[滑块](docs/sliders.md)和[菜单](docs/menus.md)。
|
|
33
|
+
|
|
34
|
+
工作台“表格”提供 `TableView` 与 `TableWidget`,支持普通/圆角/细线行、搜索、原生排序、编辑、复选项、多选复制与高级右键菜单;外观设置默认收起。两种 Qt 数据接口各自保留编辑,详见[表格](docs/tables.md)。
|
|
35
|
+
|
|
36
|
+
`FluentWindow` 保留原生 Qt 主窗口与系统标题栏,可按需注册页面,使用响应式侧栏、顶部导航、前进/后退和底部设置。可选 `FluentTitleBar` 为搜索框、标签与额外操作提供普通 Qt 布局;页面与输入在切换布局时保留。运行 `python examples/fluent_window.py` 体验,详见[流畅窗口](docs/fluent-window.md)。
|
|
37
|
+
|
|
38
|
+
`SplashScreen` 提供居中图标、可选加载提示和完成渐隐。启动时顶部只保留三个窗口操作,结束后恢复完整标题栏。工作台“页面导航 → 启动页面”可调整并重播,也可运行 `python examples/splash_screen.py`。详见[启动页面](docs/splash-screen.md)。
|
|
39
|
+
|
|
40
|
+
工作台默认启用整窗深浅色渐变,48px 标题栏、侧栏、背景与控件同步变化。普通窗口可通过 `set_theme_transition_enabled(True)` 开启;使用 `theme.set_theme("dark", accent="#60cdff")` 可一次提交主题与强调色,避免重复刷新。
|
|
41
|
+
|
|
42
|
+
标题栏与侧栏共用外壳表面,主内容使用独立的不透明背景。工作台默认启用 Windows 11 原生云母,可在“设置 → 外观”关闭;普通 `FluentWindow` 可用 `set_backdrop_enabled(True)` 开启。Windows 11 build 22621 起,在系统合成和透明效果允许时显示材质,否则回退普通背景;失焦后可能显示系统中性色。详见[云母效果与自定义页面背景](docs/fluent-window.md#明暗背景与云母效果)。
|
|
43
|
+
|
|
44
|
+
## 快速开始
|
|
45
|
+
|
|
46
|
+
PyPI 发布名为 **`fluentpy-qt`**,代码导入名仍是 **`fluentpy`**。首次上传准备与本机上传助手见[发布说明](docs/publishing.md)。PyPI 上的 `fluentpy` 属于其他项目,不要用它安装本组件库,也不要将两个项目装在同一环境。
|
|
47
|
+
|
|
48
|
+
需要 **Python 3.10+**。下面以 Windows PowerShell 为例,从本仓库安装到独立环境:
|
|
49
|
+
|
|
50
|
+
```powershell
|
|
51
|
+
git clone https://github.com/XDDXMT/FluentPy.git
|
|
52
|
+
cd FluentPy
|
|
53
|
+
python -m venv .venv
|
|
54
|
+
.\.venv\Scripts\python.exe -m pip install -e .
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
安装时会尝试构建可选C扩展。默认优先使用C;扩展缺失、无法加载或缺少某个组件的接口时,该组件自动回退到Python兼容后端。**日期/时间滚轮、三种日历选择器、拖放、快捷键选择器和CodeEdit都能在没有C扩展时使用**,无需为运行这些组件安装编译器。需要启用C加速时,再完成下面的构建步骤。
|
|
58
|
+
|
|
59
|
+
已有兼容当前 Python 的系统 C 编译器时:
|
|
60
|
+
|
|
61
|
+
```powershell
|
|
62
|
+
.\.venv\Scripts\python.exe -m pip install "setuptools>=77"
|
|
63
|
+
.\.venv\Scripts\python.exe -B scripts/build_native.py
|
|
64
|
+
.\.venv\Scripts\python.exe examples/showcase.py
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Windows x64 没有安装 MSVC,也可以使用仓库提供的独立 Zig 工具链:
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
.\.venv\Scripts\python.exe -B scripts/fetch_zig.py
|
|
71
|
+
.\.venv\Scripts\python.exe -B scripts/build_native.py --zig .toolchains/zig-x86_64-windows-0.14.1/zig.exe
|
|
72
|
+
.\.venv\Scripts\python.exe examples/showcase.py
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
下载器从 Zig 官方站点获取固定版本并校验 SHA-256,约 82 MB,文件与缓存留在项目目录。原生扩展必须匹配当前 Python 小版本、系统和架构。更多选项见 [C 后端构建与打包](docs/native-build.md)。
|
|
76
|
+
|
|
77
|
+
以上为源码安装;PyPI 发布完成后可使用 `python -m pip install fluentpy-qt`。当前实际验证环境是 **Windows x64、CPython 3.13、PySide6 / Qt 6.11.1**;其他环境需要自行验证。Windows 系统材质不可用时,窗口使用普通背景。
|
|
78
|
+
|
|
79
|
+
### 写下第一个窗口
|
|
80
|
+
|
|
81
|
+
在已安装 FluentPy 的 Python 环境中运行:
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
import sys
|
|
85
|
+
|
|
86
|
+
from fluentpy import AccentButton, FluentWindow, Toast
|
|
87
|
+
from fluentpy.qt import QtWidgets
|
|
88
|
+
|
|
89
|
+
app = QtWidgets.QApplication(sys.argv)
|
|
90
|
+
window = FluentWindow("我的 FluentPy 应用")
|
|
91
|
+
|
|
92
|
+
save = AccentButton("保存")
|
|
93
|
+
save.clicked.connect(
|
|
94
|
+
lambda: Toast.success(
|
|
95
|
+
"已保存",
|
|
96
|
+
detail="可以继续下一步。",
|
|
97
|
+
target=save,
|
|
98
|
+
parent=window,
|
|
99
|
+
)
|
|
100
|
+
)
|
|
101
|
+
window.content_layout.addWidget(save)
|
|
102
|
+
window.show()
|
|
103
|
+
|
|
104
|
+
sys.exit(app.exec())
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
控件继续使用 Qt 的信号、布局和事件机制。`Toast` 可指向触发按钮,也可放在窗口四角;仅传标题时使用紧凑的单行提示,并带入场与退场动画。
|
|
108
|
+
|
|
109
|
+
## 组件与示例
|
|
110
|
+
|
|
111
|
+
| 类别 | 主要组件与能力 |
|
|
112
|
+
| --- | --- |
|
|
113
|
+
| 按钮 | 普通/强调/透明图标、状态切换与胶囊筛选、下拉/拆分操作、`LoadingButton` 与动画 `ActionMenu` |
|
|
114
|
+
| 输入与选择 | `LineEdit`、`AffixLineEdit` 前后缀、`PinCodeEdit` 分格密码/验证码、搜索/密码/多行输入、下拉框、数值输入、复选框和单选按钮 |
|
|
115
|
+
| 日期与时间 | `DatePicker`与`TimePicker`日期/时间滚轮;`CalendarPicker`日历、`DateRangePicker`日期区间、`DateTimePicker`日历与时分秒,支持禁用日期、页内动画与C/Python双后端 |
|
|
116
|
+
| 拖放 | `FileDropWidget`、`FolderDropWidget`、`DropArea`:浏览与拖入本地路径、类型过滤、多选和后台校验 |
|
|
117
|
+
| 快捷键 | `ShortcutPicker`、`ShortcutDialog`:组合键录制、键帽预览、保存/重置/取消与冲突提示 |
|
|
118
|
+
| 颜色与取色 | `ColorPickerButton`、`ColorPaletteButton`、`ColorDialog`、`ColorPickerPanel`、`ColorSwatchGroup`、`EyeDropperButton`:主题色、Hex/RGB/HSV/Alpha、确认/取消与多屏取色 |
|
|
119
|
+
| 代码编辑 | `CodeEdit`:JSON 高亮、行号、当前行、缩进引导、字体设置与 C 扫描后端 |
|
|
120
|
+
| 卡片与设置 | `CardWidget`、`SimpleCardWidget`、`ElevatedCardWidget`、`HeaderCardWidget`、`GroupHeaderCardWidget`;`ExpandableCardWidget` 与 `AccordionWidget` 提供动画折叠及独立/互斥展开 |
|
|
121
|
+
| 导航 | `NavigationView`、`NavigationSidebar`、`AnimatedStackedWidget`、`BreadcrumbBar`、`Pivot`、分段控件、`TabBar` |
|
|
122
|
+
| 表格 | `TableView`、`TableWidget`、`TableItemDelegate`:Qt 模型/项目接口、三种行样式、原生排序和编辑、TSV 复制与高级菜单 |
|
|
123
|
+
| 反馈与状态 | `InfoBar`、`ProgressInfoBar`:横纵消息条、嵌入布局与任务状态;`Toast`、`ColorToast`、`ProgressToast`:顶部色条、操作按钮、六种位置混合堆叠与单段进度;`ToggleSwitch`、`Slider`、`ProgressBar` |
|
|
124
|
+
| 窗口与容器 | `FluentWindow`、无边框对话框、页内遮罩对话框、`FluentScrollBar`、`Card`、`ExamplePanel` |
|
|
125
|
+
| 音符视图 | `NoteTimeline`、`NoteEvent`:单轨/多轨概览、配色、进度游标与时间定位 |
|
|
126
|
+
| 主题与资源 | 浅色/深色主题、强调色、统一字体、107 个 Microsoft Fluent System Icons |
|
|
127
|
+
|
|
128
|
+
独立 Demo 适合只看一个组件。在已安装依赖的环境中,从仓库根目录运行:
|
|
129
|
+
|
|
130
|
+
| 示例 | 运行命令 | 说明 |
|
|
131
|
+
| --- | --- | --- |
|
|
132
|
+
| 组件示例程序 | `python examples/showcase.py` | 概览、14个组件页面及底部设置;`--dark` 启动深色,`--page tables` 直接测试表格,`--page settings` 打开可保存的工作台设置 |
|
|
133
|
+
| 表格 | `python examples/tables.py` | 普通/圆角/细线、Qt 模型与项目、搜索、数值排序、编辑、多选复制与高级右键菜单 |
|
|
134
|
+
| 启动页面 | `python examples/splash_screen.py` | 居中图标、可选加载提示、完成渐隐和全窗口预览;工作台“页面导航”页 |
|
|
135
|
+
| 颜色与取色 | `python examples/colors.py` | 色板、RGBA/HSV 编辑、颜色对话框、圆形色块与屏幕取色;工作台 `--page colors` |
|
|
136
|
+
| 按钮与菜单 | `python examples/buttons.py` | 状态过渡、互斥筛选、页内菜单、拆分操作、加载保护与键盘操作 |
|
|
137
|
+
| 前后缀与分格输入 | `python examples/advanced_inputs.py` | 固定前后缀、四格密码、六格验证码、粘贴与退格回删;工作台“文本与选择”页 |
|
|
138
|
+
| 拖放文件 | `python examples/drop.py` | 文件/文件夹、浏览、后台校验与路径结果;C优先,Python兼容 |
|
|
139
|
+
| 快捷键选择器 | `python examples/shortcut_picker.py` | 页内录制、冲突提示与窗口内快捷键触发;C优先,Python兼容 |
|
|
140
|
+
| 带说明复选框 | `python examples/checkbox.py` | Other files/760.0 KB;可选第二行、整项点击、键盘和主题 |
|
|
141
|
+
| 卡片 | `python examples/cards.py` | 应用条目、表情悬浮卡片、标题与分组设置 |
|
|
142
|
+
| 折叠设置卡片 | `python examples/expandable_cards.py` | 混合/色度/锐化参数、平滑展开与收起、应用/重置、明暗主题与互斥展开 |
|
|
143
|
+
| 日期选择器 | `python examples/date_picker.py` | 三列滚轮、空值、回填和日期范围;C优先,Python兼容 |
|
|
144
|
+
| 时间选择器 | `python examples/time_picker.py` | 24/12小时制、AM/PM、独立滚轮、页内弹层和清空;C优先,Python兼容 |
|
|
145
|
+
| 日历与日程 | `python examples/calendar_picker.py` | 单日、日期区间、日期时间、月/年视图、禁用端点、圆弧区间底色与平滑动画 |
|
|
146
|
+
| 代码编辑器 | `python examples/code_editor.py` | 编辑 JSON,查看高亮与缩进引导 |
|
|
147
|
+
| 消息浮层 | `python examples/toast.py` | 紧凑消息、带箭头消息、位置与动画 |
|
|
148
|
+
| 顶部色条通知 | `python examples/color_toast.py` | 自定义颜色、标题/正文、操作按钮、宽度和六种位置;复用现有Toast堆叠动画 |
|
|
149
|
+
| 消息条 | `python examples/info_bar.py` | 横向/纵向、状态背景、自定义控件、嵌入布局、任务进度;复用已有通知和ProgressBar |
|
|
150
|
+
| 任务进度提示 | `python examples/progress_toast.py` | 四角定位、平滑进度、循环条、完成/失败和悬停暂停 |
|
|
151
|
+
| 性能对照 | `python examples/text_performance.py` | 完整 1k/10k/50k 行 JSON,对照原始版本、Python 与 C |
|
|
152
|
+
| 音符时间轴 | `python examples/note_timeline.py` | 单轨、多轨、空状态与进度演示 |
|
|
153
|
+
|
|
154
|
+
Windows 也可使用 `examples/run_showcase.bat` 及对应组件的 `run_*.bat`。音符时间轴负责可视化,文件解析和声音播放由应用处理。
|
|
155
|
+
|
|
156
|
+
新增输入接口用法见[前后缀与分格输入](docs/inputs.md);角落提示支持底部向上、顶部向下堆叠和关闭后平滑补位。
|
|
157
|
+
|
|
158
|
+
[顶部色条通知](docs/color-toast.md)提供成功、失败、警告、注意、信息及自定义颜色,支持操作按钮与顶部/底部居中。
|
|
159
|
+
|
|
160
|
+
[消息条](docs/info-bars.md)补充状态背景、横纵排列和布局内嵌;原有吐司及进度控件继续复用。
|
|
161
|
+
|
|
162
|
+
工作台“消息与对话框”采用统一的自定义测试界面:左侧实时预览,右侧修改内容,状态和位置通过下拉选择,进度用滑块调整,更多设置默认收起。嵌入示例与对话框在顶部页签切换,独立组件示例仍保留完整用例。
|
|
163
|
+
|
|
164
|
+
接口与用法:[颜色与取色](docs/colors.md) · [按钮与菜单](docs/buttons.md) · [快捷键选择器](docs/shortcut-picker.md) · [任务进度提示](docs/progress-toast.md) · [拖放组件](docs/drag-drop.md) · [卡片](docs/cards.md) · [日期选择器](docs/date-picker.md) · [时间选择器](docs/time-picker.md) · [日历与日程](docs/calendar-picker.md) · [代码编辑器](docs/code-editor.md) · [音符时间轴](docs/note-timeline.md)
|
|
165
|
+
|
|
166
|
+
## C 后端与性能
|
|
167
|
+
|
|
168
|
+
Python 负责公开接口、Qt 交互和 C 绑定,C 扩展负责已接入的计算路径,目前包括:
|
|
169
|
+
|
|
170
|
+
- **JSON 词元扫描与 UTF-16 位置映射**:供 `CodeEdit` 高亮使用,缺少扩展时可回退 Python。
|
|
171
|
+
- **日期运算**:供 `DatePicker` 处理日历与日期范围。
|
|
172
|
+
- **时间运算**:供 `TimePicker` 校验时/分、转换12/24小时制、计算独立滚轮和AM/PM候选。
|
|
173
|
+
- **日历与日程**:供三种日历组件生成42格公历、限制与禁用策略、日期平移、区间端点规范化、日期时间夹紧和时分秒候选。
|
|
174
|
+
- **拖放选择策略**:规范化后缀、过滤类型、批量去重和限制选择数量。
|
|
175
|
+
- **快捷键策略**:组合合法性、修饰键顺序与占用冲突检查。
|
|
176
|
+
- **颜色运算**:Hex 解析与格式化、RGB/HSV 转换,自动兼容缺少颜色接口的旧扩展;界面与屏幕采样由 Qt 处理。
|
|
177
|
+
- **分格输入策略**:密码/验证码字符合法性、Unicode 分格和长度截断;Qt 输入与布局继续复用 LineEdit。
|
|
178
|
+
|
|
179
|
+
以上路径均以C为首选加速实现,同时提供行为兼容的Python回退。旧版扩展缺少某组接口时,仅该组回退;仍然有效的C接口继续使用。
|
|
180
|
+
|
|
181
|
+
启用 C 后端无需替换前端组件类名。可以查看编辑器实际使用的后端:
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
from fluentpy import CodeEdit
|
|
185
|
+
|
|
186
|
+
editor = CodeEdit() # 在 QApplication 创建后使用
|
|
187
|
+
editor.set_code('{"project": "FluentPy", "enabled": true}')
|
|
188
|
+
print(editor.acceleration_backend()) # native 或 python
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`FLUENTPY_BACKEND=auto`默认优先C并自动回退;`python`强制使用Python兼容实现;`native`明确要求C,在对应接口不可用时给出构建提示。这三种模式统一作用于文本、日期、时间、拖放和快捷键。`native_available()`检查二进制是否具备相应能力,组件的`acceleration_backend()`返回实际选择的`native`或`python`。详见[后端选择与回退](docs/backends.md)。
|
|
192
|
+
|
|
193
|
+
以下为同一台 Windows x64 电脑、AMD Ryzen 9 9950X3D、CPython 3.13.1、Qt 6.11.1 的历史实测。10,000 行取五轮、50,000 行取三轮独立进程中位数,均处理完整输入。
|
|
194
|
+
|
|
195
|
+
| 数据量 | 测量项目 | 原始版本 | C 后端 | 加速比 |
|
|
196
|
+
| --- | --- | ---: | ---: | ---: |
|
|
197
|
+
| 10,000 行 JSON | JSON 逐行扫描 | 25.28 ms | 1.91 ms | 13.21× |
|
|
198
|
+
| 10,000 行 JSON | 完整载入与首帧 | 64.93 ms | 42.73 ms | 1.52× |
|
|
199
|
+
| 50,000 行 JSON | JSON 逐行扫描 | 127.21 ms | 10.73 ms | 11.85× |
|
|
200
|
+
| 50,000 行 JSON | 完整载入与首帧 | 292.60 ms | 180.12 ms | 1.62× |
|
|
201
|
+
|
|
202
|
+
扫描的加速比只适用于扫描路径。文档创建、排版、绘制和交互仍有各自开销,整库不会因此获得相同倍数的提升。万行 JSON 应放入多行的 `CodeEdit`,而不是单行 `LineEdit`。
|
|
203
|
+
|
|
204
|
+
[完整结果与测量方法](docs/performance.md) · [10k 原始报告](benchmarks/text-performance-10000.json) · [50k 原始报告](benchmarks/text-performance-50000.json) · [构建说明](docs/native-build.md)
|
|
205
|
+
|
|
206
|
+
## 本地文档
|
|
207
|
+
|
|
208
|
+
仓库附带中文文档站,提供分类组件目录、名称筛选、接口搜索与图标搜索。简介先展示实际组件示例程序,再用 JS 动画演示 Qt → FluentPy 输入框过渡以及 Python → C → Qt 的处理流程;支持暂停和重播。组件页将“示例与用法”和“API 参考”分开,代码与 GIF 按需展开,常见问题逐项阅读。网页跟随系统主题,组件媒体保持亮色。
|
|
209
|
+
|
|
210
|
+
从仓库根目录启动静态服务:
|
|
211
|
+
|
|
212
|
+
```powershell
|
|
213
|
+
python -m http.server 8767 --bind 0.0.0.0 --directory sites/fluentpy-docs/dist
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
浏览器打开 [本地文档](http://127.0.0.1:8767/#/introduction)。也可双击 `sites/fluentpy-docs/启动本地文档.bat`;局域网设备使用服务器实际 IP 访问。重新生成接口和截图的方法见 [文档站说明](sites/fluentpy-docs/README.md)。
|
|
217
|
+
|
|
218
|
+
文档网站的源码、完整静态页面和控件媒体也在独立的 [FluentPy-Docs](https://github.com/XDDXMT/FluentPy-Docs) 仓库以 MIT 许可公开。只预览或部署网站无需安装 Qt;重新提取 API 或录制控件时,通过 `FLUENTPY_SOURCE_ROOT` 指向本组件库源码。
|
|
219
|
+
|
|
220
|
+
## 开发与验证
|
|
221
|
+
|
|
222
|
+
```powershell
|
|
223
|
+
python -m pip install -e ".[dev]"
|
|
224
|
+
python -m pytest
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
常规行为测试可在无C环境运行;完整C/Python差分测试需要当前解释器对应的C扩展。测试包含日期边界、缺失/不兼容/旧扩展的独立进程、实际录制与拖放、组件生命周期、快速导航和动画中断。构建原生/纯Python wheel和源码包的方法见[打包说明](docs/native-build.md)。
|
|
228
|
+
|
|
229
|
+
| 目录 | 内容 |
|
|
230
|
+
| --- | --- |
|
|
231
|
+
| `src/fluentpy/` | Python 接口、Qt 控件、主题与 SVG 资源 |
|
|
232
|
+
| `native/` | C文本、日期、时间、拖放与快捷键策略 |
|
|
233
|
+
| `examples/` | 工作台与独立 Demo |
|
|
234
|
+
| `docs/`、`sites/fluentpy-docs/` | Markdown 文档、图片与本地文档站 |
|
|
235
|
+
| `tests/` | 正确性、生命周期与交互测试 |
|
|
236
|
+
| `scripts/`、`benchmarks/` | 构建工具、性能复现脚本与报告 |
|
|
237
|
+
|
|
238
|
+
后续后端运算以C作为首选加速实现,并维护可用的Python兼容路径;Python同时保持公开接口、绑定和Qt界面逻辑。扩展缺失不能导致组件不可用,详见[开发约定](AGENTS.md)。
|
|
239
|
+
|
|
240
|
+
欢迎通过 [Issues](https://github.com/XDDXMT/FluentPy/issues) 提交问题与建议。使用场景可参考 [FluentMelody](https://github.com/XDDXMT/FluentMelody)。
|
|
241
|
+
|
|
242
|
+
## 许可证与资源来源
|
|
243
|
+
|
|
244
|
+
FluentPy 自身源码采用 **MIT**:允许使用、修改、分发和商用,保留版权声明与许可证文本即可;软件按原样提供。完整条款见 [LICENSE](LICENSE)。
|
|
245
|
+
|
|
246
|
+
组件在本仓库独立实现。微软图标来自 [Microsoft Fluent UI System Icons](https://github.com/microsoft/fluentui-system-icons),保留其 MIT 许可证与来源记录。Qt、PySide6 和可选 PyQt6 适配依赖分别遵循各自许可证。
|
|
247
|
+
|
|
248
|
+
[第三方声明](THIRD_PARTY_NOTICES.md) · [图标许可证](licenses/Microsoft-Fluent-System-Icons-LICENSE.txt) · [图标来源](src/fluentpy/assets/icons/SOURCE.md) · [实现与许可边界](docs/licensing-boundaries.md)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Third-Party Notices
|
|
2
|
+
|
|
3
|
+
## Table interaction reference
|
|
4
|
+
|
|
5
|
+
- Reference: https://qfluentwidgets.com/zh/pages/components/tableview/
|
|
6
|
+
- Usage: publicly visible table organization and interaction categories only (item/model interfaces, ordinary/rounded/lined rows and right-click selection).
|
|
7
|
+
- FluentPy implements these independently using Qt's public model/view APIs, its existing controls, ActionMenu and theme tokens. No external source, stylesheet, screenshot, demonstration wording or data is included.
|
|
8
|
+
|
|
9
|
+
## Fluent window interaction reference
|
|
10
|
+
|
|
11
|
+
- Reference: https://qfluentwidgets.com/zh/pages/components/fluentwindow/
|
|
12
|
+
- Usage: public window-organization and interaction categories only (page navigation, history, responsive layouts, settings placement and title-bar extension).
|
|
13
|
+
- FluentPy implements these independently with its existing navigation and controls, ordinary Qt layouts, and Qt system move/resize APIs. Native window chrome remains the default; optional Windows frame-material requests keep the Qt client area opaque.
|
|
14
|
+
- No source code, screenshots, stylesheets or example wording from this reference are included.
|
|
15
|
+
|
|
16
|
+
## Slider and menu interaction references
|
|
17
|
+
|
|
18
|
+
- References: https://qfluentwidgets.com/zh/pages/components/slider/ and https://qfluentwidgets.com/zh/pages/components/menu/
|
|
19
|
+
- Usage: public interaction categories only. Slider and ActionMenu are extended independently; the new tooltip/range sliders and native tray menu use Qt APIs and the project's existing UI components.
|
|
20
|
+
- No source code, screenshots, stylesheets or example wording from these references are included.
|
|
21
|
+
|
|
22
|
+
## Combo box interaction reference
|
|
23
|
+
|
|
24
|
+
- Reference: https://qfluentwidgets.com/zh/pages/components/combobox/
|
|
25
|
+
- Usage: public interaction categories only (editable, model-backed, multiple, hierarchical, transparent and font choices).
|
|
26
|
+
- FluentPy implements these independently using Qt models/views and its existing ActionMenu, inputs and buttons. No source code, stylesheets, screenshots or example text from this reference are included.
|
|
27
|
+
|
|
28
|
+
FluentPy may use or adapt resources from third-party open-source projects only when their license is compatible with this project.
|
|
29
|
+
|
|
30
|
+
## Microsoft Fluent UI System Icons
|
|
31
|
+
|
|
32
|
+
- Source: https://github.com/microsoft/fluentui-system-icons
|
|
33
|
+
- Copyright (c) 2020 Microsoft Corporation.
|
|
34
|
+
- License: MIT; complete text in `licenses/Microsoft-Fluent-System-Icons-LICENSE.txt`.
|
|
35
|
+
- Usage: bundled SVG icons for `IconButton`, examples, and future controls.
|
|
36
|
+
- Bundled files: `src/fluentpy/assets/icons/ic_fluent_*_24_regular.svg` (107 icons).
|
|
37
|
+
- Eyedropper: original Microsoft `assets/Eyedropper/SVG/ic_fluent_eyedropper_24_regular.svg`, bundled unchanged as `FluentIcon.EYEDROPPER`; download URL and checksum in `src/fluentpy/assets/icons/SOURCE.md`.
|
|
38
|
+
- Music Note 2: original `assets/Music Note 2/SVG/ic_fluent_music_note_2_24_regular.svg` from the official Microsoft repository, bundled unchanged as `FluentIcon.MUSIC_NOTE_2`. Its pinned source and checksum are recorded in `src/fluentpy/assets/icons/SOURCE.md`.
|
|
39
|
+
|
|
40
|
+
## Qt for Python
|
|
41
|
+
|
|
42
|
+
Qt, PySide6 and the optional PyQt6 fallback are third-party dependencies. This source project does not vendor their binaries. Their own licenses apply separately; FluentPy's MIT license does not replace them.
|
|
43
|
+
|
|
44
|
+
## Microsoft WinUI Gallery
|
|
45
|
+
|
|
46
|
+
- Source: https://github.com/microsoft/WinUI-Gallery
|
|
47
|
+
- License: MIT
|
|
48
|
+
- Usage: reference for component gallery organization and Fluent control presentation patterns.
|
|
49
|
+
|
|
50
|
+
## Microsoft WinUI
|
|
51
|
+
|
|
52
|
+
- Source: https://github.com/microsoft/microsoft-ui-xaml
|
|
53
|
+
- License: MIT
|
|
54
|
+
- Usage: reference for WinUI control behavior, theme resources, and state model where individual files are covered by the repository license. Current reference: `controls/dev/CommonStyles/Button_themeresources.xaml`.
|