4 điểm bởi GN⁺ 2023-12-11 | 1 bình luận | Chia sẻ qua WhatsApp
  • Sau khi kết thúc nỗ lực thương mại hóa, PySimpleGUI đã loại bỏ các thành phần giấy phép và bảo mật khỏi mã PySimpleGUI 5, rồi được công bố lại trên GitHub và PyPI dưới dạng PySimpleGUI 6 với giấy phép LGPL3
  • Có thể cài đặt phiên bản mới nhất bằng python -m pip install PySimpleGUI; các phiên bản cũ hơn như 4.60.5.1, nhánh master trên GitHub hoặc bản phát hành cụ thể 6.1 cũng có thể được cài đặt trực tiếp bằng pip
  • PySimpleGUI là wrapper cho các thư viện GUI như tkinter, được giới thiệu là biến GUI SDK thành một cấu trúc đơn giản và cô đọng hơn, đồng thời vẫn cung cấp khả năng tùy biến chi tiết và không yêu cầu kinh nghiệm lập trình GUI trước đó
  • Phiên bản 6.2 bao gồm sửa lỗi Window.settings_save, xuất ảnh inline trong Multiline, psgupgrade, chọn node Tree bằng lập trình, bộ hẹn giờ dạng chuỗi "H:M:S" cho Window.start_timer, thiết lập màu viền Frame, v.v.
  • Dự án được duy trì theo cách không nhận pull request; tương lai dài hạn chưa chắc chắn, nhưng tác giả cho biết sẽ tiếp tục viết mã và dọn dẹp hệ sinh thái

PySimpleGUI 6 được mở nguồn trở lại

  • PySimpleGUI đã thử thương mại hóa, nhưng không tạo được nguồn lực cần thiết để duy trì dự án ở mức kỳ vọng
  • Tháng 2/2025, việc PySimpleSoft đóng cửa và tiếp tục hỗ trợ đến cuối năm 2025 đã được công bố; sau đó vấn đề còn lại là xử lý mã, tài liệu và kho lưu trữ như thế nào
  • Mã PySimpleGUI 5 được công bố trên GitHub và PyPI sau khi các thành phần giấy phép và bảo mật bị loại bỏ
  • Phiên bản công khai mới dùng giấy phép LGPL3
  • Khóa học Udemy sẽ được cung cấp miễn phí trong một thời gian, với mã coupon là 033334A16163C571B739

Cách cài đặt

  • Cài đặt phiên bản v6 mới nhất trên PyPI:
    • python -m pip install PySimpleGUI
  • Cài đặt phiên bản cũ 4.60.5.1:
    • python -m pip install PySimpleGUI==4.60.5.1
  • Có thể cài đặt trực tiếp mã mới nhất từ kho GitHub:
  • Để cài đặt một bản phát hành cụ thể trên GitHub, thay master bằng số hiệu bản phát hành:
  • Cũng có thể clone hoặc tải kho lưu trữ rồi cài đặt cục bộ:
    • python -m pip install .

Vai trò của PySimpleGUI

  • PySimpleGUI là một wrapper bao quanh tkinter và các thư viện GUI khác
  • Nó biến GUI SDK thành cấu trúc đơn giản và cô đọng hơn, đồng thời vẫn cung cấp khả năng tùy biến chi tiết
  • Được giới thiệu là không cần kinh nghiệm lập trình GUI trước đó
  • Ví dụ trong README tạo một ứng dụng cửa sổ tương tác chỉ bằng Text, Input, Button, Window, vòng lặp sự kiện, window.read(), window.close()
  • Tài liệu được cung cấp tại Docs.PySimpleGUI.com

Cách phát triển và triển vọng dài hạn

  • PySimpleGUI được mô tả là đã được phát triển theo cách gần với một sản phẩm độc quyền hơn là một dự án nguồn mở truyền thống
  • Không nhận pull request
  • Tương lai dài hạn chưa chắc chắn, nhưng hiện tại tác giả vẫn thích việc viết mã và giúp đỡ người khác
  • Trải nghiệm với PySimpleGUI được mô tả là trải nghiệm “once-in-a-lifetime”, nơi có thể nhìn thấy những gì mọi người đã tạo ra

Tính năng và sửa lỗi trong phiên bản 6.2

  • 6.2 bao gồm bản sửa lỗi Window.settings_save
  • Thêm tính năng “print” ảnh inline trong phần tử Multiline
  • Tính năng nâng cấp lên bản phát hành bảo trì mới nhất được tích hợp trở lại vào PySimpleGUI
    • Có thể dùng Home Window hoặc dòng lệnh psgupgrade
    • Có thể xem ghi chú phát hành và cài đặt phiên bản mới
  • Sửa lỗi #5750 khiến sự kiện Graph rơi vào vòng lặp vô hạn khi nhận sự kiện write_event_value
    • Được sửa bằng cách xóa cờ nút thời gian thực
    • Phạm vi thay đổi được ghi là chỉ giới hạn trong câu điều kiện của phần tử Graph nên khả năng hồi quy thấp
  • Thêm tham số select_node_keys vào Tree.update, cho phép chọn node cây bằng lập trình như thể người dùng chọn
  • Sửa tính năng và tham số echo_stdout_stderr của Multiline
    • Chỉ echo khi stdout hoặc stderr đã được định tuyến lại đến phần tử đó
    • Tính năng này không tự thực hiện việc định tuyến lại
  • Bản sửa #6686 giải quyết vấn đề nút chọn Calendar xóa các trường chỉ nên được xóa tại thời điểm window.read trả về
  • Home Window hiển thị số phiên bản bản phát hành bảo trì và vị trí nút cài đặt được di chuyển
  • Khi gọi Window.start_timer, có thể chỉ định bộ hẹn giờ bằng chuỗi "H:M:S"
  • Thêm tính năng chỉ hỗ trợ cuộn ngang cho phần tử Column có thể cuộn
  • Phần tử Frame được thêm các tham số border_color, border_width_no_relief, cho phép thiết lập màu viền
    • Nếu không có thiết lập riêng, màu viền Frame dùng màu phần tử văn bản làm mặc định
  • Phần call reference của tài liệu được cập nhật cho bản phát hành 6.2

Kéo thả và các dự án liên quan

  • Kéo thả được mô tả là tính năng được mong đợi từ lâu, và đã tìm ra cách triển khai trong không gian mã người dùng mà không cần thay đổi mã PySimpleGUI
  • psgdnd là gói mới bổ sung kéo thả cho PySimpleGUI
    • Có thể cài đặt và sử dụng bằng pip
    • Có thêm thông tin và ví dụ trong kho lưu trữ đó
  • psgdnd 6.0.1 đã được phát hành trên PyPI và hoạt động trên Windows
  • Bản 6.0.2 trên GitHub bao gồm bản sửa cần thiết cho Linux
  • Trạng thái hỗ trợ Mac hiện vẫn chưa rõ
  • Kho PSGMicroPython được thêm mã để giao tiếp với các vi điều khiển dựa trên MicroPython
    • Hoạt động trên Raspberry Pi Pico và ESP32
    • Có thể hoạt động trên các board khác
    • Không được định hướng là một dự án lớn hay bền chắc, mà được giới thiệu là đoạn mã có thể hữu ích

Prototype PSGWeb

  • PSGWeb là prototype chạy PySimpleGUI trong cửa sổ trình duyệt
  • Hoạt động với phần lớn các chương trình demo
  • Có thể thử chạy bằng cách thêm psgweb.us vào trước URL ứng dụng PySimpleGUI trên GitHub
  • PSGWeb được tạo ra như một phần của công việc PSG 5 lớn hơn nhưng chưa được công bố
  • Không có kế hoạch phát hành hoặc mở rộng prototype này

Quan điểm về việc sử dụng AI

  • Tác giả dùng LLM để tìm kiếm và tóm tắt tài liệu, tra cứu lỗi, nghiên cứu và thu nhận kiến thức
  • Không dùng LLM để viết mã
  • Lý do được nêu đơn giản là vì thích chính việc viết mã
  • Việc dự án không mở cho pull request cũng được giải thích là vì tác giả muốn tự viết mã hơn là để người khác viết thay
  • Về việc PySimpleGUI có còn liên quan trong thời đại AI hay không, tác giả cho rằng chỉ cần mỗi ngày có người phát hiện, cài đặt và ít nhất một người sử dụng PySimpleGUI là đủ
  • Tác giả nói rằng khi tạo ứng dụng Windows, khó có thể tưởng tượng nếu không có PySimpleGUI
    • Trong dự án máy tính breadboard 6502 gần đây, tác giả cho biết đã tạo một bộ phân tích bus bằng hai Raspberry Pi Pico và ứng dụng PySimpleGUI
    • Tác giả nói có thể dễ dàng tạo ứng dụng frontend điều khiển công cụ trên Windows bằng PySimpleGUI

Lịch sử dự án và vấn đề tài chính

  • PySimpleGUI bắt đầu từ một đoạn mã dùng một lần được tạo ra vì cần GUI cho prototype trình phát media vào năm 2018
  • Mục tiêu là bọc Tkinter theo cách tuyến tính và trực quan hơn để chạy nhanh, mà không cần kinh nghiệm với framework GUI hướng đối tượng
  • Tác giả đưa lên GitHub khi chưa có kinh nghiệm với Python hay nguồn mở, và tiếp cận dự án giống startup hơn là dự án nguồn mở truyền thống
  • Dòng thời gian:
    • Tháng 7/2018: Version 1
    • Tháng 6/2019: Version 4
    • Tháng 1/2020: vấn đề tài chính trở thành mối lo lớn và việc thương mại hóa được nhắc đến
    • Tháng 11/2020: công bố khóa học Udemy và thêm lời kêu gọi hỗ trợ công khai
    • Tháng 12/2021: ra mắt khóa học
    • Tháng 2/2024: phát hành thương mại Version 5
    • Tháng 4/2026: Version 6
  • Announcements Issue trên GitHub được dùng như một blog lưu lại lịch sử dự án và đã tăng lên hơn 1.700 mục
  • Để dễ đọc, một snapshot được đăng trong tab Announcements 2018-2024 của tài liệu
  • Công việc nguồn mở toàn thời gian tạo ra áp lực tài chính tức thời và liên tục
  • Tài trợ và quyên góp qua GitHub Sponsors, Buy Me a Coffee ngay cả lúc cao điểm cũng chỉ khoảng 150 USD mỗi tháng
  • Khóa học Udemy gồm 61 bài học, dài 11,5 giờ ban đầu trong thời gian ngắn đạt khoảng 2.000 USD mỗi tháng, nhưng sau đó giảm xuống dưới 100 USD
  • Cả hai cách đều không đủ để duy trì dự án về dài hạn

Kết quả thương mại hóa và trải nghiệm về giấy phép

  • Việc ra mắt sản phẩm trả phí của Version 5 không phải là quyết định đột ngột, mà đã được thảo luận công khai trong README và các thông báo suốt nhiều năm
  • Sau khi cạn kiệt các lựa chọn khác vào đầu năm 2024, phiên bản thương mại được phát hành
  • Mục tiêu là duy trì khả năng tiếp cận hơn là dựng rào cản
  • Xét theo tiêu chí bền vững tài chính thì không thành công, nhưng xét theo trải nghiệm, học hỏi và các mối quan hệ thì được tổng kết là có giá trị
  • Sau thương mại hóa, dự án không mất phần lớn người dùng và nhiều công ty vẫn tiếp tục dùng PySimpleGUI
  • Vấn đề là khiến các công ty mua giấy phép
  • Hobbyist License được chọn, theo đó người dùng sở thích và sinh viên dùng miễn phí, còn công ty thì trả phí
  • Trên thực tế, đa số người dùng tự nhận mình là người dùng sở thích
  • Hàng chục nghìn người dùng doanh nghiệp đăng ký tầng miễn phí, và không hiếm trường hợp ngay cả ở các tập đoàn lớn có hàng trăm người dùng nhưng chỉ có số ít giấy phép trả phí
  • Tác giả cho biết không hối tiếc về chính quyết định cung cấp tùy chọn miễn phí
  • Kết luận cá nhân là có kỳ vọng văn hóa mạnh mẽ rằng công cụ và thư viện Python phải miễn phí
  • Giá cả hay sự bất mãn dường như không phải vấn đề cốt lõi; tác giả diễn giải rằng mọi người vẫn tiếp tục dùng PySimpleGUI nhưng không cảm thấy có nghĩa vụ trả tiền
  • Các điều khoản giấy phép rõ ràng cũng không phải lúc nào thay đổi được hành vi

Giấy phép hiện tại

  • Dòng bản quyền là Copyright 2018-2026 PySimpleGUI. All rights reserved.
  • Giấy phép hiện tại là LGPL3

1 bình luận

 
GN⁺ 2023-12-11
Ý kiến trên Hacker News
  • Vì công việc, tôi phải ghi lại thời gian làm việc trong Jira, nhưng không thích phải luôn mở trang web; việc tìm issue đang làm, tìm liên kết ghi thời gian rồi thêm bình luận cũng chậm
    Tôi muốn có một ứng dụng desktop hiển thị danh sách issue được giao cho mình và các nút để thêm bình luận/thời gian làm việc. Với Tkinter, tôi loay hoay rất lâu để làm cho nó trông ổn, nhưng sau khi tìm thấy PySimpleGUI, tôi có thể gắn hook vào Jira API và tạo được thứ mình muốn; đó là một dự án tốt để học phát triển UI

    • Jira có cảm giác chậm một cách quá phổ biến, nên có vẻ nhiều người muốn đi đường vòng bằng công cụ tùy chỉnh
      Một người bạn cũng nói rằng ở một nơi làm việc, anh ấy từng làm một client Qt nội bộ cho các tác vụ Jira cơ bản; khi tôi cũng phải theo dõi công việc bằng Jira, tôi đã dùng https://github.com/go-jira/jira để xử lý các thay đổi bằng vài script console
    • Khi nghe nói ở công ty sẽ bắt đầu ghi thời gian trong Jira, tôi đã bắt đầu tìm việc mới
    • Tôi tò mò không biết mã nguồn của ứng dụng này có được công khai ở đâu không. Tuần này tôi đang nghĩ đến việc làm một thứ tương tự, nên nếu có thể chỉ định instance Jira cho một ứng dụng đã có sẵn thì thật tuyệt
    • Tôi nghi ngờ liệu đây có thật sự là học phát triển UI không. Tôi không rõ nó có thể dẫn tiếp hoặc mở rộng thành những dự án khó hơn hay không
  • Tôi thật sự kỳ vọng vào các framework GUI kiểu này. Trải nghiệm desktop native tốt hơn nhiều so với việc ghép webview, và tôi thấy vòng lặp sự kiện được đơn giản hóa cùng cách tiếp cận nhiều backend của PySimpleGUI thực sự mới mẻ
    Tuy vậy, tôi thắc mắc vì sao không có nhiều “GUI tự động” hơn, kiểu chỉ cần đưa vào cấu trúc dữ liệu và hàm thì nó tự tạo ra một giao diện phù hợp để thao tác với chúng. Nếu dùng heuristic để chọn đặt các panel theo chiều dọc/ngang, dùng giao diện tab hay popup, ta có thể mở ra nhiều chức năng quá lồng ghép đối với CLI và quá native để làm thành webapp

    • Một dự án có thể đáng quan tâm là Gooey, được nói là “biến gần như mọi chương trình console Python 3 thành ứng dụng GUI chỉ bằng một dòng”
      https://github.com/chriskiehl/Gooey
    • Năm 2011, tôi đã làm một trình tạo form tự động cho web dựa trên tham số hàm, và gần đây cũng thử làm một chút thứ tương tự trong một GUI toolkit dựa trên ngôn ngữ D
      Bạn có thể định nghĩa một struct rồi truyền vào hàm dialog, nó sẽ tự động tạo hộp thoại theo các trường của struct và gọi callback khi người dùng nhấn OK. Cũng có thể chỉ định widget nào sẽ dùng bằng thuộc tính tùy chỉnh; ví dụ, nếu gắn @ControlledBy!VerticalSlider(0, 100) vào int thì thay vì ô nhập số, nó sẽ thành thanh trượt 0~100. Với hàm menu cũng có thể gắn kiểu @menu("Search") Find(string text) { ... } để tự động tạo menu và hộp thoại, và còn có DataControllerWidget gọi callback mỗi khi có sự kiện thay đổi. Vài năm trước tôi cũng viết một bài liên quan, nhưng tiến độ rất chậm: http://dpldocs.info/this-week-in-d/Blog.Posted_2020_11_02.ht...
      Nó đủ thú vị để tôi muốn dành thêm thời gian, nhưng vì không có việc gì trong công việc chính cần dùng đến nên tôi chỉ làm từng chút vào cuối tuần khi muốn code
    • Có một thứ từ vài chục năm trước tên là Naked Objects khá khớp với mô tả đó. Tôi không quan tâm đến phía Java nên chưa dùng thử, nhưng trông có vẻ hữu ích
    • Trong Python, TraitsUI từng là một “UI tự động” khá ổn, và đến giờ vẫn đóng vai trò đó
  • Thẩm mỹ của ví dụ trông như được lấy nguyên từ thập niên 90, như [0]. Nó hoàn hảo cho prototype hoặc công cụ nội bộ dành cho người không dùng được CLI, nhưng tôi tự hỏi nếu cần UI trông đẹp thì nên làm gì
    Về hiệu năng, UI native luôn tốt, nhưng tôi luôn thấy việc styling khó hơn so với trang web. Tôi tò mò trong GUI Python thì thứ tương đương với một bộ styled component trông tinh tế mà không cần quá nhiều công sức, như Flutter hay SwiftUI, là gì
    [0] https://raw.githubusercontent.com/PySimpleGUI/PySimpleGUI/ma...

    • Có lẽ là vấn đề làm tốt hay không, nhưng theo kinh nghiệm của tôi, UI “có style” là một trong những lý do khiến phần mềm trở nên tệ hơn đối với nhiều phần mềm và người dùng
      Ít nhất, phong cách UI mặc định do hệ điều hành cung cấp cho phép mọi người học ở một ứng dụng rồi áp dụng sang ứng dụng khác. Vì tôi không phải nhà thiết kế UI xuất sắc, nhiều khả năng giá trị mặc định của hệ điều hành sẽ tốt hơn những gì tôi có thể nghĩ ra. Nếu cộng thêm câu mà bộ phận marketing rất sợ nghe: “phần mềm của chúng ta trông lỗi thời”, thì chi phí phát triển sẽ tăng đến mức vốn đã khó gánh
    • Bản thân cảm giác thập niên 90 thì không sao, nhưng cái này cũng không khớp với giao diện hệ điều hành thập niên 90. Nền checkbox sai, nhãn tiêu đề phía trên bị lệch, vị trí nút Exit cũng lạ, nên tổng thể trông như một UI được thiết kế kém
      Thập niên 90 cũng có phần mềm kiểu này, nhưng đó không phải thẩm mỹ thập niên 90 mà mọi người thường nói tới. Thiết kế UI của Windows 95 đã được đầu tư rất nhiều công sức
    • Tôi không hiểu giao diện thập niên 90 thì có vấn đề gì. Rất nhiều người thích nó
      Tôi còn ghét hơn những khoảng trắng rộng trong UI ngày nay, các nút trông không giống nút, thanh cuộn biến mất và menu hamburger
    • Nếu ngoại hình là ưu tiên hàng đầu thì có vẻ khá khó để thắng trang web
      Việc tách frontend và backend cũng là mặc định, và nếu sau này cần thì có thể truy cập từ xa. Nếu muốn dùng như ứng dụng native, chỉ cần đặt một nút “Open browser UI” trong một GUI nhỏ kiểu Tkinter là được. Nếu nút chạy chèn token vào URL thì còn có thể bảo vệ khỏi daemon đang chạy dưới người dùng khác trên cùng máy, nhưng tôi chưa thấy nơi nào thực sự làm như vậy
    • Vấn đề là Tkinter, ít nhất trên Windows, thật sự dựa trên widget của thập niên 90. Dù đổi theme PySimpleGUI sang SystemDefaultForReal, widget Windows native có ngoại hình hiện đại, còn Tkinter thì hoàn toàn không được cập nhật nên trông rất lạc lõng
  • Trông có vẻ ổn. Tuy thư viện này có thể đã trưởng thành nên khó có thay đổi lớn, nhưng sẽ tốt hơn nếu dùng dictionary thay vì list. Dictionary trong Python gần đây ghi nhớ thứ tự chèn
    Ở công ty cũ, tôi từng làm một thứ tương tự như một lớp wrapper mỏng hơn nhiều trên PyQt, và lượng code cũng ít đến ngạc nhiên. Khác biệt cốt lõi là nó xử lý đồng thời việc thiết lập thuộc tính/tín hiệu và lồng widget. So với cách thiết lập thuộc tính trong constructor, ưu điểm là dù sau này cần tên widget để đổi văn bản, vẫn có thể thiết lập thuộc tính ngay trong phần thân của định nghĩa view. Một hàm setup_view là toàn bộ API, và khá tiện khi cần tạo GUI đơn giản thật nhanh. Thư viện này cũng có vẻ là một lựa chọn thay thế tốt, cảm ơn vì đã chia sẻ

    • Thay đổi đó được đưa vào từ Python 3.7, và giờ đã là tính năng hơn 5 năm tuổi rồi
      https://docs.python.org/3/whatsnew/3.7.html#summary-release-...
    • Nhìn vào xu hướng các framework GUI gần đây, tách layout và dữ liệu tạo ra code gọn gàng hơn nhiều
      Nên để framework đảm nhiệm data binding. Cả web lẫn desktop đều ngày càng đi theo hướng này. Thay vì chỉnh sửa trực tiếp widget, nên binding thuộc tính widget vào kho dữ liệu và để nó tự re-render khi có thay đổi. Ví dụ input/output trên trang cũng cho thấy điều tương tự. Giờ không ai còn dùng getElementById() nữa
    • Theo trang GitHub, họ nói rằng “đã đơn giản hóa định nghĩa cửa sổ bằng cách dùng các kiểu dữ liệu cốt lõi của Python mà người mới bắt đầu hiểu được, là list và dictionary
  • Có vẻ đang tiến gần hơn tới mức tiện dụng của VB6 hay Delphi/Lazarus. Rõ ràng là có tiến bộ, và giờ chỉ cần có GUI builder tương tác nữa là có thể #import form đã tạo rồi dùng ngay là xong
    Vài năm trước tôi từng thử dùng WxPython cùng WxFormBuilder và đã mất cực nhiều thời gian trong dự án. Chỉ cần thay đổi nhỏ trên form là toàn bộ backend vỡ, tôi đã tự viết một lớp code mỏng để nối ở giữa, nhưng khi đổi kiểu field thì mọi thứ lại vỡ tiếp. May là ở đây có vẻ sẽ không xảy ra chuyện đó

  • Từ góc nhìn của người phát triển ứng dụng GUI bằng Python [1], tôi cho rằng vấn đề lớn nhất khi dùng Python cho app desktop là đóng gói
    Các công cụ hiện có để tạo binary có thể phân phối thường ngừng hoạt động hoặc đòi hỏi hack không hề đơn giản khi dependency chỉ nhiều hơn vài cái. Ngay cả các package phổ biến cũng có thể gặp những vấn đề khó hiểu như thiếu hidden import hoặc thiếu file dữ liệu mà mình không biết. Dynamic module loading đôi khi cũng vỡ khi đưa ra ngoài môi trường Python thông thường, như với PyInstaller hay cx_freeze. Không biết có thể làm gì, nhưng có lẽ Python cũng cần một chuẩn đóng gói chương trình độc lập chỉ phụ thuộc vào interpreter, tương tự JAR của Java

    1. https://github.com/FreeLanguageTools/vocabsieve
    • Python có zipapp, đã được chuẩn hóa và tương tự JAR: https://peps.python.org/pep-0441/
      Có thể dùng các công cụ như shiv hoặc PEX để tạo zipapp kèm dependency của ứng dụng, nhưng nếu có binary extension thì artifact vẫn phụ thuộc theo từng nền tảng: https://github.com/linkedin/shiv#gotchas
      Chương trình Python của tôi khuyên người dùng cài bằng pipx: https://github.com/pypa/pipx
      Nếu người dùng mục tiêu có chút kỹ thuật, tôi nghĩ đó là lựa chọn tốt nhất. Nó giúp tránh xung đột phiên bản của pip install --user và nỗi khổ phải tự tạo virtualenv riêng cho từng app, đồng thời nhìn chung mang lại trải nghiệm người dùng khá ổn. Có thể kỳ vọng mọi người cài đặt thành công nếu khuyến nghị pipx làm cách cài mặc định. Chương trình của tôi có dependency dạng binary nhưng không có GUI
  • Cá nhân tôi thích CustomTKinter hơn. Nó thanh lịch hơn nhiều, có giao diện giống theme Material, và hỗ trợ theme sáng/tối theo thiết lập hệ thống trên Windows/Linux/macOS

  • Thật đáng ngạc nhiên là trong lĩnh vực phát triển ứng dụng nhanh, vẫn chưa có gì thật sự lấp được khoảng trống mà VB6 để lại. Bản thân ngôn ngữ thì không xuất sắc, nhưng điểm mạnh của VB6 là GUI builder kéo-thả

    • Như người khác đã nói, có thể cân nhắc Lazarus, và nếu muốn trải nghiệm giống VB hơn thì Gambas cũng có thể thú vị
      https://www.lazarus-ide.org/
      https://gambas.sourceforge.net/en/main.html
    • Cùng một mô hình lưu UI trong file có thể chỉnh sửa thủ công
      https://qb64.com/inform.html
    • https://www.lazarus-ide.org/
    • Tôi đã dùng qtcreator lâu hơn nhiều so với dự định ban đầu vì thiết kế UI kéo-thả
      Điều hữu ích là chỉ cần đặt file layout cạnh script Python là có thể dùng trong pyqt. Hỗ trợ Python của IDE không tốt, nhưng cũng có thể do bản cài của tôi bị hỏng
    • Xojo về cơ bản là người kế thừa tinh thần của VB6
      https://xojo.com/
  • Tôi đang cân nhắc bọc GUI cho một công cụ vốn có giao diện CLI khá tốt, để cả những người không dùng desktop Linux cũng có thể sử dụng. PySimpleGUI có vẻ có thể đúng với nhu cầu của tôi
    https://github.com/hiAndrewQuinn/finstem
    Công cụ của tôi có các flag CSV, TSV, JSON được định nghĩa rõ ràng. Tôi muốn biết liệu có ai từng có kinh nghiệm tạo GUI bên trên một công cụ CLI hoàn chỉnh sẵn có mà không thay đổi nó không, và nên dự liệu những khó khăn nào

    • Các engine cờ vua là một ví dụ tham khảo tốt. Phần ra quyết định là CLI, rồi được gắn vào các GUI như WinBoard[0] hoặc Arena[1]
      Engine và GUI tuân theo các giao thức như WinBoard hoặc UCI[2], trao đổi lệnh văn bản qua STDIN/STDOUT. Điểm khó chính giống như khi làm đa luồng: có thể xảy ra deadlock khi GUI và CLI chờ nhau và cùng bị treo. Vì vậy cả hai phía đều cần xử lý nhập/xuất ở các luồng tách biệt với “business logic” để giữ độ phản hồi. Một vấn đề phổ biến khác là xử lý pipe có đặc thù khác nhau theo hệ điều hành, nên cần chú ý đến flush buffer hoặc khác biệt API giữa Linux/Mac/Windows
      [0] http://hgm.nubati.net/
      [1] http://www.playwitharena.de/
      [2] https://gist.github.com/DOBRO/2592c6dad754ba67e6dcaec8c90165...
    • Ví dụ thì có thể xem HandBrake. Nó gần như là một UI hào nhoáng cho ffmpeg
  • Tôi không muốn nghe có vẻ bất lịch sự, nhưng có quá nhiều chữ. Ở mọi chỗ có thể đặt văn bản đều là những câu dài nối tiếp nhau, phần lớn khá nhất quán nhưng trong một nghìn từ đầu tiên lại không có nổi một ảnh chụp màn hình liên quan
    Cảm giác có gì đó lệch. Có lẽ đây là một lập trình viên trẻ và đầy nhiệt huyết, hoặc tác giả đang cố thuyết phục người khác dùng thử nên đưa vào rất nhiều chữ. README thậm chí còn có cả mục “about me” để tác giả tự giới thiệu. Có thể lấy ví dụ bằng cách cuộn xuống bất kỳ chỗ nào trong README, đọc vài đoạn rồi thử nói lại nội dung vừa đọc

    • Mỗi phần đều có tiêu đề rõ ràng. Nếu là phần bạn không quan tâm thì chỉ cần cuộn thêm một chút. Không ai bắt bạn đọc mục “about me” cả
      Có những người thích tự đọc về công cụ, hơn là giữ thái độ “làm sao đọc ít chữ nhất và chạy được nhanh nhất”. Bạn đang dùng miễn phí một công cụ do người khác làm ra, nên tốt hơn là ngừng phàn nàn và để họ diễn đạt theo cách họ muốn
    • Suy đoán “lập trình viên trẻ và đầy nhiệt huyết” là sai. “About Me” [1] nói rằng tác giả đã viết phần mềm từ thập niên 70 và dành phần lớn sự nghiệp để làm sản phẩm ở Silicon Valley
      [1] https://github.com/PySimpleGUI/PySimpleGUI#about-me-
    • Tôi chỉ lướt qua thôi. Đây không phải MVP của một sản phẩm để thu hút nhà đầu tư, mà là một công cụ do chính người tạo ra nó viết tài liệu
      Không muốn bất lịch sự, nhưng tôi muốn hỏi ngược lại: có phải bạn sợ chính việc phải đọc, nếu nội dung không được đút sẵn cho bạn dưới dạng tóm tắt từng bước không?
    • Tôi thấy cách nói đó khá bất lịch sự. Đặc biệt là bạn thu gọn lý do có nhiều chữ chỉ còn một trong hai khả năng, mà cả hai đều không nghe tích cực cho lắm. Hơn nữa những lý do đó có vẻ cũng không đúng
      Cùng ý đó có thể truyền đạt bằng câu “với một dự án thiên về trực quan, tôi cảm thấy phần mô tả chính nên có nhiều ảnh chụp màn hình hơn”, và bỏ các suy đoán mang tính xúc phạm đi
    • Vấn đề có thể nằm ở việc đặt tên dự án là Simple. Nó gieo sẵn kỳ vọng trong đầu người đọc
      Nếu đưa các từ như Smart, Open, Trusted, Secure vào tên dự án, mọi người rất dễ chỉ ra rằng dự án không đạt tới lý tưởng trong cái tên đó. Ngược lại, những cái tên như C hay BSD không có từ trái nghĩa hay hàm ý như vậy, nên khó nói rằng “ngôn ngữ C không xứng với tên của nó”