Tin tức liên quan đến công nghệ PySimpleGUI
(github.com/PySimpleGUI)- 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ánhmastertrên GitHub hoặc bản phát hành cụ thể6.1cũ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"choWindow.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:
python -m pip install --upgrade https://github.com/PySimpleGUI/PySimpleGUI/zipball/master
- Để cài đặt một bản phát hành cụ thể trên GitHub, thay
masterbằng số hiệu bản phát hành:python -m pip install --upgrade https://github.com/PySimpleGUI/PySimpleGUI/zipball/6.1
- 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
- Có thể dùng Home Window hoặc dòng lệnh
- Sửa lỗi #5750 khiến sự kiện
Graphrơi vào vòng lặp vô hạn khi nhận sự kiệnwrite_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_keysvàoTree.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_stderrcủ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.readtrả 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
psgdndlà 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ữ đó
psgdnd6.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.usvào trước URL ứng dụng PySimpleGUI trên GitHub- Ví dụ:
https://github.com/PySimpleGUI/PySimpleGUI/… - Ví dụ chuyển đổi:
https://psgweb.us/github.com/PySimpleGUI/…
- Ví dụ:
- 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
Ý 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
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
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
https://github.com/chriskiehl/Gooey
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àointthì 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óDataControllerWidgetgọ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
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...
Í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
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 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
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
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õngTrô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_viewlà 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ẻhttps://docs.python.org/3/whatsnew/3.7.html#summary-release-...
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ữaCó 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ể
#importform đã tạo rồi dùng ngay là xongVà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
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 --uservà 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ó GUICá 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ả
https://www.lazarus-ide.org/
https://gambas.sourceforge.net/en/main.html
https://qb64.com/inform.html
Đ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
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
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...
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
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
[1] https://github.com/PySimpleGUI/PySimpleGUI#about-me-
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?
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
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ó”