# TkEasyGo
**TkEasyGo** 是一个简单的跨平台 GUI 生成器,旨在帮助开发者快速创建基本的图形用户界面。它基于 `tkinter` 实现,并提供了一系列基本控件和功能,使用户能够轻松构建简单的应用界面。
[English](README_EN.md)
## 文件结构
├── docs
│ ├── contact.md # 联系信息
│ ├── contributing.md # 贡献指南
│ ├── controls.md # 控件使用指南
│ ├── docs.md # 项目文档概述
│ ├── event_binding.md # 事件绑定的详细说明
│ ├── faq.md # 常见问题解答
│ ├── getting_started.md # 快速入门指南
│ ├── installation.md # 安装指南
│ ├── license.md # 许可证详细信息
│ ├── README.md # 文档首页
│ ├── styling.md # 样式和主题设置指南
│ └── window_operations.md # 窗口操作指南
├── examples
│ ├── Combobox_app.py # 示例:展示如何使用下拉框控件(Combobox)
│ ├── event_app.py # 示例:演示如何处理事件
│ ├── label_app.py # 示例:展示如何使用标签控件(Label)
│ ├── layout_app.py # 示例:展示如何使用不同的布局管理功能
│ ├── notebook_Slider_app.py # 示例:展示如何使用选项卡控件(Notebook)和滑块控件(Slider)
│ ├── paned_window_test.py # 示例:展示如何使用 PanedWindow 控件
│ ├── Progressbar_app.py # 示例:展示如何使用进度条控件(Progressbar)
│ ├── scrollbar_test.py # 示例:展示如何使用滚动条控件(Scrollbar)
│ ├── separator_test.py # 示例:展示如何使用分隔符控件(Separator)
│ ├── spinbox_test.py # 示例:展示如何使用数字输入框控件(Spinbox)
│ ├── tabbed_app.py # 示例:展示如何使用选项卡(Tabbed)控件
│ |── treeview_test.py # 示例:展示如何使用树视图控件(Treeview)
| └── test_components.py # 示例:日历控件、颜色选择器、文件选择器、警告框等
├── LICENSE # 项目许可证文件,详细信息请参见
├── README.md # 项目说明文件
├── setup.py # 安装脚本,包含库的依赖和安装设置
├── test.ipynb # 测试和实验的 Jupyter Notebook 文件
├── tests
│ └── test_core.py # 用于测试核心功能的测试文件
└── TkEasyGo
├── core.py # 核心实现文件,定义主要的控件和窗口管理功能
├── events.py # 事件处理功能实现
├── layout.py # 布局管理功能实现
├── platform.py # 平台相关的功能实现
├── simple_variable.py # 简单的变量管理功能
├── simple_window.py # 简单窗口的实现,集成各种控件和布局
├── themes.py # 主题和样式管理功能实现
├── __init__.py # 库的初始化文件
|── module # 模块文件夹
└── __pycache__ # 编译的 Python 字节码文件
├── core.cpython-310.pyc
├── events.cpython-310.pyc
├── layout.cpython-310.pyc
├── platform.cpython-310.pyc
├── simple_variable.cpython-310.pyc
├── simple_window.cpython-310.pyc
└── themes.cpython-310.pyc
## 目前支持的功能
- **标签** (`Label`): 显示静态文本。
- **按钮** (`Button`): 触发事件的按钮。
- **文本框** (`Textbox`): 用于输入和显示文本。
- **复选框** (`Checkbox`): 允许用户选择或取消选择一个选项。
- **单选按钮** (`Radiobutton`): 允许用户在多个选项中选择一个。
- **下拉框** (`Combobox`): 提供一个下拉列表供用户选择。
- **进度条** (`Progressbar`): 显示进度的可视化控件。
- **滑块** (`Slider`): 用于在数值范围内选择值。
- **选项卡** (`Notebook`): 提供多个标签页以组织内容。
- **帧** (`Frame`): 用于组织和分组其他控件。
## 未来计划
- **增强主题支持**: 引入更多的主题和样式选项,以提升界面的美观性和用户体验。
- **增加更多控件**: 如日历控件、图表控件等,以满足更复杂的应用需求。
- **改进布局管理**: 提供更灵活的布局选项,使用户可以更自由地安排控件的位置和大小。
- **提高性能**: 优化控件的性能,确保在大型应用中依然流畅。
## 待办事项
- **用户文档**: 完善用户手册和开发文档,以帮助用户更好地使用库。
- **示例应用**: 提供更多示例应用和教程,以展示库的不同用法和功能。
- **错误修复**: 持续修复已知的 bug 和问题,以提升库的稳定性。
- **社区支持**: 建立社区支持渠道,收集用户反馈并及时响应。
# TkEasyGo 使用教程
**TkEasyGo** 是一个简化的跨平台 GUI 生成器,基于 `tkinter` 实现,旨在帮助开发者快速创建图形用户界面。本文将介绍如何安装和使用 TkEasyGo,展示一些常见的用法示例,并提供一些技巧和注意事项。
## 安装
要安装 TkEasyGo,可以使用 `pip` 从 PyPI 安装:
```sh
pip install TkEasyGo
```
## 快速入门
### 创建一个基本的窗口
下面的示例展示了如何创建一个简单的窗口,并添加一些基本控件:
```python
from TkEasyGo.core import SimpleWindow, SimpleVariable
def basic_app():
# 创建窗口
window = SimpleWindow(title="Basic TkEasyGo App", width=300, height=200)
# 添加标签
window.add_label("Welcome to TkEasyGo!", row=0, column=0, columnspan=2)
# 添加文本框
textbox = window.add_textbox("Type here...", row=1, column=0, columnspan=2)
# 添加按钮
button = window.add_button("Submit", lambda: print("Submit clicked"), row=2, column=0, columnspan=2)
# 添加复选框
checkbox_var = SimpleVariable()
window.add_checkbox("Check me", checkbox_var, row=3, column=0)
# 运行窗口
window.run()
if __name__ == "__main__":
basic_app()
```
### 控件介绍
#### 标签 (`Label`)
用于显示静态文本。可以通过 `add_label` 方法添加。
```python
window.add_label("This is a label", row=0, column=0)
```
#### 按钮 (`Button`)
用于触发事件。可以通过 `add_button` 方法添加。
```python
window.add_button("Click Me", lambda: print("Button clicked"), row=1, column=0)
```
#### 文本框 (`Textbox`)
用于输入和显示文本。可以通过 `add_textbox` 方法添加。
```python
textbox = window.add_textbox("Default text", row=2, column=0)
```
#### 复选框 (`Checkbox`)
允许用户选择或取消选择一个选项。可以通过 `add_checkbox` 方法添加。
```python
checkbox_var = SimpleVariable()
window.add_checkbox("Check me", checkbox_var, row=3, column=0)
```
#### 单选按钮 (`Radiobutton`)
允许用户在多个选项中选择一个。可以通过 `add_radiobutton` 方法添加。
```python
radiobutton_var = SimpleVariable("1")
window.add_radiobutton("Option 1", "1", radiobutton_var, row=4, column=0)
```
#### 下拉框 (`Combobox`)
提供一个下拉列表供用户选择。可以通过 `add_combobox` 方法添加。
```python
combobox = window.add_combobox(["Option 1", "Option 2", "Option 3"], row=5, column=0)
```
#### 进度条 (`Progressbar`)
显示进度的可视化控件。可以通过 `add_progressbar` 方法添加。
```python
progressbar = window.add_progressbar(value=50, row=6, column=0, columnspan=2)
```
#### 滑块 (`Slider`)
用于在数值范围内选择值。可以通过 `add_slider` 方法添加。
```python
slider = window.add_slider(value=50, row=7, column=0, columnspan=2)
```
#### 选项卡 (`Notebook`)
提供多个标签页以组织内容。可以通过 `add_notebook` 方法添加。
```python
def tab1_content(window, frame):
window.add_label("This is Tab 1", row=0, column=0, frame=frame)
window.add_button("Button in Tab 1", lambda: print("Tab 1 Button clicked"), row=1, column=0, frame=frame)
def tab2_content(window, frame):
window.add_label("This is Tab 2", row=0, column=0, frame=frame)
window.add_button("Button in Tab 2", lambda: print("Tab 2 Button clicked"), row=1, column=0, frame=frame)
window.add_notebook({"Tab 1": tab1_content, "Tab 2": tab2_content}, row=8, column=0, columnspan=2)
```
## 事件绑定
可以通过 `bind_event` 方法为控件绑定事件:
```python
window.bind_event('textbox', '<KeyRelease>', lambda event: print(f"Text changed to: {textbox.get()}"))
window.bind_event('button', '<Button-1>', lambda event: print("
Button clicked"))
```
## 窗口操作
### 设置窗口的最小化、最大化和恢复功能
`SimpleWindow` 提供了窗口操作的方法,包括最小化、最大化和恢复:
- **最大化**: 使用 `maximize()` 方法将窗口切换到全屏模式。
- **最小化**: 使用 `minimize()` 方法将窗口最小化到任务栏。
- **恢复**: 使用 `restore()` 方法将窗口恢复到原始大小。
示例代码如下:
```python
def window_operations_app():
window = SimpleWindow(title="Window Operations App", width=400, height=300)
# 添加操作按钮
window.add_button("Maximize", window.maximize, row=0, column=0)
window.add_button("Minimize", window.minimize, row=1, column=0)
window.add_button("Restore", window.restore, row=2, column=0)
# 运行窗口
window.run()
if __name__ == "__main__":
window_operations_app()
```
## 常见问题
### 如何调整控件的样式?
你可以在 `SimpleWindow` 的 `configure_styles` 方法中配置控件的样式。例如:
```python
window.configure_styles('TButton', padding=6, relief="flat", background="#4CAF50", font=("Arial", 12))
```
### 如何贡献代码?
如果你希望为 TkEasyGo 做出贡献,可以通过 GitHub 提交 Pull Request,或者报告问题和建议。我们欢迎任何形式的贡献。
## 联系我们
- **电子邮件**: tkeasygo@gmail.com
- **GitHub**: [https://github.com/TkEasyGo/TkEasyGo](https://github.com//TkEasyGo)
## 许可证
本项目使用 MIT 许可证,详细信息请参见 [LICENSE](LICENSE) 文件。
Raw data
{
"_id": null,
"home_page": "https://github.com/TkEasyGo/TkEasyGo",
"name": "TkEasyGo",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": null,
"author": "TkEasyGo",
"author_email": "tkeasygo@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/7b/a0/b92dcb7f800cc0c0117723bf45bfc72940995776b122f26210b1e4eadc6a/TkEasyGo-0.3.0.tar.gz",
"platform": null,
"description": "\r\n# TkEasyGo\r\n\r\n**TkEasyGo** \u662f\u4e00\u4e2a\u7b80\u5355\u7684\u8de8\u5e73\u53f0 GUI \u751f\u6210\u5668\uff0c\u65e8\u5728\u5e2e\u52a9\u5f00\u53d1\u8005\u5feb\u901f\u521b\u5efa\u57fa\u672c\u7684\u56fe\u5f62\u7528\u6237\u754c\u9762\u3002\u5b83\u57fa\u4e8e `tkinter` \u5b9e\u73b0\uff0c\u5e76\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u57fa\u672c\u63a7\u4ef6\u548c\u529f\u80fd\uff0c\u4f7f\u7528\u6237\u80fd\u591f\u8f7b\u677e\u6784\u5efa\u7b80\u5355\u7684\u5e94\u7528\u754c\u9762\u3002\r\n\r\n[English](README_EN.md)\r\n\r\n## \u6587\u4ef6\u7ed3\u6784\r\n\r\n\u251c\u2500\u2500 docs\r\n\u2502 \u251c\u2500\u2500 contact.md # \u8054\u7cfb\u4fe1\u606f\r\n\u2502 \u251c\u2500\u2500 contributing.md # \u8d21\u732e\u6307\u5357\r\n\u2502 \u251c\u2500\u2500 controls.md # \u63a7\u4ef6\u4f7f\u7528\u6307\u5357\r\n\u2502 \u251c\u2500\u2500 docs.md # \u9879\u76ee\u6587\u6863\u6982\u8ff0\r\n\u2502 \u251c\u2500\u2500 event_binding.md # \u4e8b\u4ef6\u7ed1\u5b9a\u7684\u8be6\u7ec6\u8bf4\u660e\r\n\u2502 \u251c\u2500\u2500 faq.md # \u5e38\u89c1\u95ee\u9898\u89e3\u7b54\r\n\u2502 \u251c\u2500\u2500 getting_started.md # \u5feb\u901f\u5165\u95e8\u6307\u5357\r\n\u2502 \u251c\u2500\u2500 installation.md # \u5b89\u88c5\u6307\u5357\r\n\u2502 \u251c\u2500\u2500 license.md # \u8bb8\u53ef\u8bc1\u8be6\u7ec6\u4fe1\u606f\r\n\u2502 \u251c\u2500\u2500 README.md # \u6587\u6863\u9996\u9875\r\n\u2502 \u251c\u2500\u2500 styling.md # \u6837\u5f0f\u548c\u4e3b\u9898\u8bbe\u7f6e\u6307\u5357\r\n\u2502 \u2514\u2500\u2500 window_operations.md # \u7a97\u53e3\u64cd\u4f5c\u6307\u5357\r\n\u251c\u2500\u2500 examples\r\n\u2502 \u251c\u2500\u2500 Combobox_app.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u4e0b\u62c9\u6846\u63a7\u4ef6\uff08Combobox\uff09\r\n\u2502 \u251c\u2500\u2500 event_app.py # \u793a\u4f8b\uff1a\u6f14\u793a\u5982\u4f55\u5904\u7406\u4e8b\u4ef6\r\n\u2502 \u251c\u2500\u2500 label_app.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u6807\u7b7e\u63a7\u4ef6\uff08Label\uff09\r\n\u2502 \u251c\u2500\u2500 layout_app.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u4e0d\u540c\u7684\u5e03\u5c40\u7ba1\u7406\u529f\u80fd\r\n\u2502 \u251c\u2500\u2500 notebook_Slider_app.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u9009\u9879\u5361\u63a7\u4ef6\uff08Notebook\uff09\u548c\u6ed1\u5757\u63a7\u4ef6\uff08Slider\uff09\r\n\u2502 \u251c\u2500\u2500 paned_window_test.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528 PanedWindow \u63a7\u4ef6\r\n\u2502 \u251c\u2500\u2500 Progressbar_app.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u8fdb\u5ea6\u6761\u63a7\u4ef6\uff08Progressbar\uff09\r\n\u2502 \u251c\u2500\u2500 scrollbar_test.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u6eda\u52a8\u6761\u63a7\u4ef6\uff08Scrollbar\uff09\r\n\u2502 \u251c\u2500\u2500 separator_test.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u5206\u9694\u7b26\u63a7\u4ef6\uff08Separator\uff09\r\n\u2502 \u251c\u2500\u2500 spinbox_test.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u6570\u5b57\u8f93\u5165\u6846\u63a7\u4ef6\uff08Spinbox\uff09\r\n\u2502 \u251c\u2500\u2500 tabbed_app.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u9009\u9879\u5361\uff08Tabbed\uff09\u63a7\u4ef6\r\n\u2502 |\u2500\u2500 treeview_test.py # \u793a\u4f8b\uff1a\u5c55\u793a\u5982\u4f55\u4f7f\u7528\u6811\u89c6\u56fe\u63a7\u4ef6\uff08Treeview\uff09\r\n| \u2514\u2500\u2500 test_components.py # \u793a\u4f8b\uff1a\u65e5\u5386\u63a7\u4ef6\u3001\u989c\u8272\u9009\u62e9\u5668\u3001\u6587\u4ef6\u9009\u62e9\u5668\u3001\u8b66\u544a\u6846\u7b49\r\n\u251c\u2500\u2500 LICENSE # \u9879\u76ee\u8bb8\u53ef\u8bc1\u6587\u4ef6\uff0c\u8be6\u7ec6\u4fe1\u606f\u8bf7\u53c2\u89c1\r\n\u251c\u2500\u2500 README.md # \u9879\u76ee\u8bf4\u660e\u6587\u4ef6\r\n\u251c\u2500\u2500 setup.py # \u5b89\u88c5\u811a\u672c\uff0c\u5305\u542b\u5e93\u7684\u4f9d\u8d56\u548c\u5b89\u88c5\u8bbe\u7f6e\r\n\u251c\u2500\u2500 test.ipynb # \u6d4b\u8bd5\u548c\u5b9e\u9a8c\u7684 Jupyter Notebook \u6587\u4ef6\r\n\u251c\u2500\u2500 tests\r\n\u2502 \u2514\u2500\u2500 test_core.py # \u7528\u4e8e\u6d4b\u8bd5\u6838\u5fc3\u529f\u80fd\u7684\u6d4b\u8bd5\u6587\u4ef6\r\n\u2514\u2500\u2500 TkEasyGo\r\n \u251c\u2500\u2500 core.py # \u6838\u5fc3\u5b9e\u73b0\u6587\u4ef6\uff0c\u5b9a\u4e49\u4e3b\u8981\u7684\u63a7\u4ef6\u548c\u7a97\u53e3\u7ba1\u7406\u529f\u80fd\r\n \u251c\u2500\u2500 events.py # \u4e8b\u4ef6\u5904\u7406\u529f\u80fd\u5b9e\u73b0\r\n \u251c\u2500\u2500 layout.py # \u5e03\u5c40\u7ba1\u7406\u529f\u80fd\u5b9e\u73b0\r\n \u251c\u2500\u2500 platform.py # \u5e73\u53f0\u76f8\u5173\u7684\u529f\u80fd\u5b9e\u73b0\r\n \u251c\u2500\u2500 simple_variable.py # \u7b80\u5355\u7684\u53d8\u91cf\u7ba1\u7406\u529f\u80fd\r\n \u251c\u2500\u2500 simple_window.py # \u7b80\u5355\u7a97\u53e3\u7684\u5b9e\u73b0\uff0c\u96c6\u6210\u5404\u79cd\u63a7\u4ef6\u548c\u5e03\u5c40\r\n \u251c\u2500\u2500 themes.py # \u4e3b\u9898\u548c\u6837\u5f0f\u7ba1\u7406\u529f\u80fd\u5b9e\u73b0\r\n \u251c\u2500\u2500 __init__.py # \u5e93\u7684\u521d\u59cb\u5316\u6587\u4ef6\r\n |\u2500\u2500 module # \u6a21\u5757\u6587\u4ef6\u5939\r\n \u2514\u2500\u2500 __pycache__ # \u7f16\u8bd1\u7684 Python \u5b57\u8282\u7801\u6587\u4ef6\r\n \u251c\u2500\u2500 core.cpython-310.pyc\r\n \u251c\u2500\u2500 events.cpython-310.pyc\r\n \u251c\u2500\u2500 layout.cpython-310.pyc\r\n \u251c\u2500\u2500 platform.cpython-310.pyc\r\n \u251c\u2500\u2500 simple_variable.cpython-310.pyc\r\n \u251c\u2500\u2500 simple_window.cpython-310.pyc\r\n \u2514\u2500\u2500 themes.cpython-310.pyc\r\n\r\n\r\n\r\n## \u76ee\u524d\u652f\u6301\u7684\u529f\u80fd\r\n\r\n- **\u6807\u7b7e** (`Label`): \u663e\u793a\u9759\u6001\u6587\u672c\u3002\r\n- **\u6309\u94ae** (`Button`): \u89e6\u53d1\u4e8b\u4ef6\u7684\u6309\u94ae\u3002\r\n- **\u6587\u672c\u6846** (`Textbox`): \u7528\u4e8e\u8f93\u5165\u548c\u663e\u793a\u6587\u672c\u3002\r\n- **\u590d\u9009\u6846** (`Checkbox`): \u5141\u8bb8\u7528\u6237\u9009\u62e9\u6216\u53d6\u6d88\u9009\u62e9\u4e00\u4e2a\u9009\u9879\u3002\r\n- **\u5355\u9009\u6309\u94ae** (`Radiobutton`): \u5141\u8bb8\u7528\u6237\u5728\u591a\u4e2a\u9009\u9879\u4e2d\u9009\u62e9\u4e00\u4e2a\u3002\r\n- **\u4e0b\u62c9\u6846** (`Combobox`): \u63d0\u4f9b\u4e00\u4e2a\u4e0b\u62c9\u5217\u8868\u4f9b\u7528\u6237\u9009\u62e9\u3002\r\n- **\u8fdb\u5ea6\u6761** (`Progressbar`): \u663e\u793a\u8fdb\u5ea6\u7684\u53ef\u89c6\u5316\u63a7\u4ef6\u3002\r\n- **\u6ed1\u5757** (`Slider`): \u7528\u4e8e\u5728\u6570\u503c\u8303\u56f4\u5185\u9009\u62e9\u503c\u3002\r\n- **\u9009\u9879\u5361** (`Notebook`): \u63d0\u4f9b\u591a\u4e2a\u6807\u7b7e\u9875\u4ee5\u7ec4\u7ec7\u5185\u5bb9\u3002\r\n- **\u5e27** (`Frame`): \u7528\u4e8e\u7ec4\u7ec7\u548c\u5206\u7ec4\u5176\u4ed6\u63a7\u4ef6\u3002\r\n\r\n## \u672a\u6765\u8ba1\u5212\r\n\r\n- **\u589e\u5f3a\u4e3b\u9898\u652f\u6301**: \u5f15\u5165\u66f4\u591a\u7684\u4e3b\u9898\u548c\u6837\u5f0f\u9009\u9879\uff0c\u4ee5\u63d0\u5347\u754c\u9762\u7684\u7f8e\u89c2\u6027\u548c\u7528\u6237\u4f53\u9a8c\u3002\r\n- **\u589e\u52a0\u66f4\u591a\u63a7\u4ef6**: \u5982\u65e5\u5386\u63a7\u4ef6\u3001\u56fe\u8868\u63a7\u4ef6\u7b49\uff0c\u4ee5\u6ee1\u8db3\u66f4\u590d\u6742\u7684\u5e94\u7528\u9700\u6c42\u3002\r\n- **\u6539\u8fdb\u5e03\u5c40\u7ba1\u7406**: \u63d0\u4f9b\u66f4\u7075\u6d3b\u7684\u5e03\u5c40\u9009\u9879\uff0c\u4f7f\u7528\u6237\u53ef\u4ee5\u66f4\u81ea\u7531\u5730\u5b89\u6392\u63a7\u4ef6\u7684\u4f4d\u7f6e\u548c\u5927\u5c0f\u3002\r\n- **\u63d0\u9ad8\u6027\u80fd**: \u4f18\u5316\u63a7\u4ef6\u7684\u6027\u80fd\uff0c\u786e\u4fdd\u5728\u5927\u578b\u5e94\u7528\u4e2d\u4f9d\u7136\u6d41\u7545\u3002\r\n\r\n## \u5f85\u529e\u4e8b\u9879\r\n\r\n- **\u7528\u6237\u6587\u6863**: \u5b8c\u5584\u7528\u6237\u624b\u518c\u548c\u5f00\u53d1\u6587\u6863\uff0c\u4ee5\u5e2e\u52a9\u7528\u6237\u66f4\u597d\u5730\u4f7f\u7528\u5e93\u3002\r\n- **\u793a\u4f8b\u5e94\u7528**: \u63d0\u4f9b\u66f4\u591a\u793a\u4f8b\u5e94\u7528\u548c\u6559\u7a0b\uff0c\u4ee5\u5c55\u793a\u5e93\u7684\u4e0d\u540c\u7528\u6cd5\u548c\u529f\u80fd\u3002\r\n- **\u9519\u8bef\u4fee\u590d**: \u6301\u7eed\u4fee\u590d\u5df2\u77e5\u7684 bug \u548c\u95ee\u9898\uff0c\u4ee5\u63d0\u5347\u5e93\u7684\u7a33\u5b9a\u6027\u3002\r\n- **\u793e\u533a\u652f\u6301**: \u5efa\u7acb\u793e\u533a\u652f\u6301\u6e20\u9053\uff0c\u6536\u96c6\u7528\u6237\u53cd\u9988\u5e76\u53ca\u65f6\u54cd\u5e94\u3002\r\n\r\n# TkEasyGo \u4f7f\u7528\u6559\u7a0b\r\n\r\n**TkEasyGo** \u662f\u4e00\u4e2a\u7b80\u5316\u7684\u8de8\u5e73\u53f0 GUI \u751f\u6210\u5668\uff0c\u57fa\u4e8e `tkinter` \u5b9e\u73b0\uff0c\u65e8\u5728\u5e2e\u52a9\u5f00\u53d1\u8005\u5feb\u901f\u521b\u5efa\u56fe\u5f62\u7528\u6237\u754c\u9762\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5\u548c\u4f7f\u7528 TkEasyGo\uff0c\u5c55\u793a\u4e00\u4e9b\u5e38\u89c1\u7684\u7528\u6cd5\u793a\u4f8b\uff0c\u5e76\u63d0\u4f9b\u4e00\u4e9b\u6280\u5de7\u548c\u6ce8\u610f\u4e8b\u9879\u3002\r\n\r\n## \u5b89\u88c5\r\n\r\n\u8981\u5b89\u88c5 TkEasyGo\uff0c\u53ef\u4ee5\u4f7f\u7528 `pip` \u4ece PyPI \u5b89\u88c5\uff1a\r\n\r\n```sh\r\npip install TkEasyGo\r\n```\r\n\r\n## \u5feb\u901f\u5165\u95e8\r\n\r\n### \u521b\u5efa\u4e00\u4e2a\u57fa\u672c\u7684\u7a97\u53e3\r\n\r\n\u4e0b\u9762\u7684\u793a\u4f8b\u5c55\u793a\u4e86\u5982\u4f55\u521b\u5efa\u4e00\u4e2a\u7b80\u5355\u7684\u7a97\u53e3\uff0c\u5e76\u6dfb\u52a0\u4e00\u4e9b\u57fa\u672c\u63a7\u4ef6\uff1a\r\n\r\n```python\r\nfrom TkEasyGo.core import SimpleWindow, SimpleVariable\r\n\r\ndef basic_app():\r\n # \u521b\u5efa\u7a97\u53e3\r\n window = SimpleWindow(title=\"Basic TkEasyGo App\", width=300, height=200)\r\n \r\n # \u6dfb\u52a0\u6807\u7b7e\r\n window.add_label(\"Welcome to TkEasyGo!\", row=0, column=0, columnspan=2)\r\n \r\n # \u6dfb\u52a0\u6587\u672c\u6846\r\n textbox = window.add_textbox(\"Type here...\", row=1, column=0, columnspan=2)\r\n \r\n # \u6dfb\u52a0\u6309\u94ae\r\n button = window.add_button(\"Submit\", lambda: print(\"Submit clicked\"), row=2, column=0, columnspan=2)\r\n \r\n # \u6dfb\u52a0\u590d\u9009\u6846\r\n checkbox_var = SimpleVariable()\r\n window.add_checkbox(\"Check me\", checkbox_var, row=3, column=0)\r\n \r\n # \u8fd0\u884c\u7a97\u53e3\r\n window.run()\r\n\r\nif __name__ == \"__main__\":\r\n basic_app()\r\n```\r\n\r\n### \u63a7\u4ef6\u4ecb\u7ecd\r\n\r\n#### \u6807\u7b7e (`Label`)\r\n\r\n\u7528\u4e8e\u663e\u793a\u9759\u6001\u6587\u672c\u3002\u53ef\u4ee5\u901a\u8fc7 `add_label` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\nwindow.add_label(\"This is a label\", row=0, column=0)\r\n```\r\n\r\n#### \u6309\u94ae (`Button`)\r\n\r\n\u7528\u4e8e\u89e6\u53d1\u4e8b\u4ef6\u3002\u53ef\u4ee5\u901a\u8fc7 `add_button` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\nwindow.add_button(\"Click Me\", lambda: print(\"Button clicked\"), row=1, column=0)\r\n```\r\n\r\n#### \u6587\u672c\u6846 (`Textbox`)\r\n\r\n\u7528\u4e8e\u8f93\u5165\u548c\u663e\u793a\u6587\u672c\u3002\u53ef\u4ee5\u901a\u8fc7 `add_textbox` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\ntextbox = window.add_textbox(\"Default text\", row=2, column=0)\r\n```\r\n\r\n#### \u590d\u9009\u6846 (`Checkbox`)\r\n\r\n\u5141\u8bb8\u7528\u6237\u9009\u62e9\u6216\u53d6\u6d88\u9009\u62e9\u4e00\u4e2a\u9009\u9879\u3002\u53ef\u4ee5\u901a\u8fc7 `add_checkbox` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\ncheckbox_var = SimpleVariable()\r\nwindow.add_checkbox(\"Check me\", checkbox_var, row=3, column=0)\r\n```\r\n\r\n#### \u5355\u9009\u6309\u94ae (`Radiobutton`)\r\n\r\n\u5141\u8bb8\u7528\u6237\u5728\u591a\u4e2a\u9009\u9879\u4e2d\u9009\u62e9\u4e00\u4e2a\u3002\u53ef\u4ee5\u901a\u8fc7 `add_radiobutton` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\nradiobutton_var = SimpleVariable(\"1\")\r\nwindow.add_radiobutton(\"Option 1\", \"1\", radiobutton_var, row=4, column=0)\r\n```\r\n\r\n#### \u4e0b\u62c9\u6846 (`Combobox`)\r\n\r\n\u63d0\u4f9b\u4e00\u4e2a\u4e0b\u62c9\u5217\u8868\u4f9b\u7528\u6237\u9009\u62e9\u3002\u53ef\u4ee5\u901a\u8fc7 `add_combobox` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\ncombobox = window.add_combobox([\"Option 1\", \"Option 2\", \"Option 3\"], row=5, column=0)\r\n```\r\n\r\n#### \u8fdb\u5ea6\u6761 (`Progressbar`)\r\n\r\n\u663e\u793a\u8fdb\u5ea6\u7684\u53ef\u89c6\u5316\u63a7\u4ef6\u3002\u53ef\u4ee5\u901a\u8fc7 `add_progressbar` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\nprogressbar = window.add_progressbar(value=50, row=6, column=0, columnspan=2)\r\n```\r\n\r\n#### \u6ed1\u5757 (`Slider`)\r\n\r\n\u7528\u4e8e\u5728\u6570\u503c\u8303\u56f4\u5185\u9009\u62e9\u503c\u3002\u53ef\u4ee5\u901a\u8fc7 `add_slider` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\nslider = window.add_slider(value=50, row=7, column=0, columnspan=2)\r\n```\r\n\r\n#### \u9009\u9879\u5361 (`Notebook`)\r\n\r\n\u63d0\u4f9b\u591a\u4e2a\u6807\u7b7e\u9875\u4ee5\u7ec4\u7ec7\u5185\u5bb9\u3002\u53ef\u4ee5\u901a\u8fc7 `add_notebook` \u65b9\u6cd5\u6dfb\u52a0\u3002\r\n\r\n```python\r\ndef tab1_content(window, frame):\r\n window.add_label(\"This is Tab 1\", row=0, column=0, frame=frame)\r\n window.add_button(\"Button in Tab 1\", lambda: print(\"Tab 1 Button clicked\"), row=1, column=0, frame=frame)\r\n\r\ndef tab2_content(window, frame):\r\n window.add_label(\"This is Tab 2\", row=0, column=0, frame=frame)\r\n window.add_button(\"Button in Tab 2\", lambda: print(\"Tab 2 Button clicked\"), row=1, column=0, frame=frame)\r\n\r\nwindow.add_notebook({\"Tab 1\": tab1_content, \"Tab 2\": tab2_content}, row=8, column=0, columnspan=2)\r\n```\r\n\r\n## \u4e8b\u4ef6\u7ed1\u5b9a\r\n\r\n\u53ef\u4ee5\u901a\u8fc7 `bind_event` \u65b9\u6cd5\u4e3a\u63a7\u4ef6\u7ed1\u5b9a\u4e8b\u4ef6\uff1a\r\n\r\n```python\r\nwindow.bind_event('textbox', '<KeyRelease>', lambda event: print(f\"Text changed to: {textbox.get()}\"))\r\nwindow.bind_event('button', '<Button-1>', lambda event: print(\"\r\n\r\nButton clicked\"))\r\n```\r\n\r\n## \u7a97\u53e3\u64cd\u4f5c\r\n\r\n### \u8bbe\u7f6e\u7a97\u53e3\u7684\u6700\u5c0f\u5316\u3001\u6700\u5927\u5316\u548c\u6062\u590d\u529f\u80fd\r\n\r\n`SimpleWindow` \u63d0\u4f9b\u4e86\u7a97\u53e3\u64cd\u4f5c\u7684\u65b9\u6cd5\uff0c\u5305\u62ec\u6700\u5c0f\u5316\u3001\u6700\u5927\u5316\u548c\u6062\u590d\uff1a\r\n\r\n- **\u6700\u5927\u5316**: \u4f7f\u7528 `maximize()` \u65b9\u6cd5\u5c06\u7a97\u53e3\u5207\u6362\u5230\u5168\u5c4f\u6a21\u5f0f\u3002\r\n- **\u6700\u5c0f\u5316**: \u4f7f\u7528 `minimize()` \u65b9\u6cd5\u5c06\u7a97\u53e3\u6700\u5c0f\u5316\u5230\u4efb\u52a1\u680f\u3002\r\n- **\u6062\u590d**: \u4f7f\u7528 `restore()` \u65b9\u6cd5\u5c06\u7a97\u53e3\u6062\u590d\u5230\u539f\u59cb\u5927\u5c0f\u3002\r\n\r\n\u793a\u4f8b\u4ee3\u7801\u5982\u4e0b\uff1a\r\n\r\n```python\r\ndef window_operations_app():\r\n window = SimpleWindow(title=\"Window Operations App\", width=400, height=300)\r\n \r\n # \u6dfb\u52a0\u64cd\u4f5c\u6309\u94ae\r\n window.add_button(\"Maximize\", window.maximize, row=0, column=0)\r\n window.add_button(\"Minimize\", window.minimize, row=1, column=0)\r\n window.add_button(\"Restore\", window.restore, row=2, column=0)\r\n \r\n # \u8fd0\u884c\u7a97\u53e3\r\n window.run()\r\n\r\nif __name__ == \"__main__\":\r\n window_operations_app()\r\n```\r\n\r\n## \u5e38\u89c1\u95ee\u9898\r\n\r\n### \u5982\u4f55\u8c03\u6574\u63a7\u4ef6\u7684\u6837\u5f0f\uff1f\r\n\r\n\u4f60\u53ef\u4ee5\u5728 `SimpleWindow` \u7684 `configure_styles` \u65b9\u6cd5\u4e2d\u914d\u7f6e\u63a7\u4ef6\u7684\u6837\u5f0f\u3002\u4f8b\u5982\uff1a\r\n\r\n```python\r\nwindow.configure_styles('TButton', padding=6, relief=\"flat\", background=\"#4CAF50\", font=(\"Arial\", 12))\r\n```\r\n\r\n### \u5982\u4f55\u8d21\u732e\u4ee3\u7801\uff1f\r\n\r\n\u5982\u679c\u4f60\u5e0c\u671b\u4e3a TkEasyGo \u505a\u51fa\u8d21\u732e\uff0c\u53ef\u4ee5\u901a\u8fc7 GitHub \u63d0\u4ea4 Pull Request\uff0c\u6216\u8005\u62a5\u544a\u95ee\u9898\u548c\u5efa\u8bae\u3002\u6211\u4eec\u6b22\u8fce\u4efb\u4f55\u5f62\u5f0f\u7684\u8d21\u732e\u3002\r\n\r\n## \u8054\u7cfb\u6211\u4eec\r\n\r\n- **\u7535\u5b50\u90ae\u4ef6**: tkeasygo@gmail.com\r\n- **GitHub**: [https://github.com/TkEasyGo/TkEasyGo](https://github.com//TkEasyGo)\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\n\u672c\u9879\u76ee\u4f7f\u7528 MIT \u8bb8\u53ef\u8bc1\uff0c\u8be6\u7ec6\u4fe1\u606f\u8bf7\u53c2\u89c1 [LICENSE](LICENSE) \u6587\u4ef6\u3002\r\n",
"bugtrack_url": null,
"license": null,
"summary": "A simple cross-platform GUI generator.",
"version": "0.3.0",
"project_urls": {
"Homepage": "https://github.com/TkEasyGo/TkEasyGo"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b4274d6e586d16f8591f83e0313d8c766e41d608c50df9b49f3c2bdb195eaabf",
"md5": "b8688fb1e4a177036ea0598b595e0bf0",
"sha256": "863d5c2537e2ca85a210d340d5beacb60460282993a4d3cfe3fa123df48c9b2e"
},
"downloads": -1,
"filename": "TkEasyGo-0.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b8688fb1e4a177036ea0598b595e0bf0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 26509,
"upload_time": "2024-09-03T02:16:44",
"upload_time_iso_8601": "2024-09-03T02:16:44.944063Z",
"url": "https://files.pythonhosted.org/packages/b4/27/4d6e586d16f8591f83e0313d8c766e41d608c50df9b49f3c2bdb195eaabf/TkEasyGo-0.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7ba0b92dcb7f800cc0c0117723bf45bfc72940995776b122f26210b1e4eadc6a",
"md5": "b2f9fe0a01f62a4e30ed0b575e533563",
"sha256": "015224da3a942cea374ab6bb7bd1154e70f916905e88696863b01b8ec756ac1e"
},
"downloads": -1,
"filename": "TkEasyGo-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "b2f9fe0a01f62a4e30ed0b575e533563",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 27518,
"upload_time": "2024-09-03T02:16:46",
"upload_time_iso_8601": "2024-09-03T02:16:46.139009Z",
"url": "https://files.pythonhosted.org/packages/7b/a0/b92dcb7f800cc0c0117723bf45bfc72940995776b122f26210b1e4eadc6a/TkEasyGo-0.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-03 02:16:46",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "TkEasyGo",
"github_project": "TkEasyGo",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "tkeasygo"
}