tttk


Nametttk JSON
Version 1.0.3 PyPI version JSON
download
home_pagehttps://github.com/TotoWang-hhh/tttk/
Summarytkinter的增强库
upload_time2023-01-05 06:18:00
maintainer
docs_urlNone
author真_人工智障(rgzz666)
requires_python
licenseMPL 2.0
keywords tttk tkinter增强 tk增强
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # tttk中文文档

**2022 By 真_人工智障(aka. rgzz666 / totowang-hhh)**

tttk是一个tkinter的增强库,旨在扩展tkinter可使用的控件。**注意:tttk并不能起到美化作用。**

不同于Tin UI、ttkbootstrap等其他tkinter扩展库,本项目全部控件都基于tkinter.Frame等原生控件进行继承和修改(类似于tkwebview2),而不是在tkinter.Canvas上进行绘制,亦或直接修改控件样式。

这些控件并非为此所制作,而是整理于我过去开发的程序,这些程序中的一部分中会有这种可移植的有趣玩意。

## For English Speakers

U can translate this doc with a translate software. **(Do not use Google Translate to Translate Chinese into English, because Google Translate is famous 4 its RUBBISH TRANSLATION in China)**

I **can** translate this doc but I'm too lazy. If you want to do it 4 me, please contact me at tt1224@hotmail.com.

## 对应版本:1.0.0~1.0.3

### 更新内容

#### 1.0.3 - alpha 1

- 按照kennethreitz大佬提供的setup.py例子修改了setup.py,不知能否修复问题

#### 1.0.2

- 删除了依赖中的`tkinter`,修复了pip安装时,由于PyPI上没有tkinter的包而找不到依赖`tkinter`,自动下载并尝试安装未修复`setup.py`报错问题的旧版(0.1.1或1.0.1),然后导致安装报错的问题,但实际仍存在其他问题,安装后似乎并没有反应

#### 1.0.1

- 修复了(至少努力修复了)安装时`setup.py`找不到README文件的错误,但事实证明,本版虽然解决了该问题,但并未修复全部问题

#### 1.0.0

~~多了去了~~

- 除弹窗类外的所有控件都继承自tkinter原生控件,现在是,将来也是。故以后可以直接调用控件的放置函数
- 新增了TipEnter、BtnRow两个新控件。
- 修改代码注释,进一步统一格式
- 文档更新(必须的!)
- 修复了NumEnter和NumEnterOld指定并达到了最小值后,不会禁用`-`按钮的问题
- 新增了最小值、最大值的检测,若指定的值存在潜在问题,则判定为不可接受,此时将会禁用该组件
- 修改Demo,并分化为两个

## 其他推荐的tkinter扩展

这个库里的控件十分稀少,如果你需要更多好玩的控件,那么以下是推荐的库:

- tkwebview2,这个库包含1个控件,它可以在tkinter窗口中显示网页,但您需要先安装EdgeWebview2。
- tkinterie,该库可以显示简单的网页,可以用在如渲染README,显示简单的HTML+CSS撰写的通知、帮助等地方。该库不支持js,调整控件大小较为困难,但稳定性高于tkwebview2。
- ttkbootstrap,一个控件库,为ttk提供崭新的视觉样式,但在每一版操作系统上都如此,所以在某些系统中会存在违和感。该库兼容性不佳,需要高版本Python。
- TinUI,一个美观的控件库,风格为仿WinUI,通过该库的主题可实现跟随系统自动深浅色。但是相较于ttkbootstrap,它有些不易用,因为在推荐的三者中,这是唯一一个基于canvas的库。主要作者称这只是业余制作的控件库,所以该库细节效果不佳。

## 取名

因为ttk可以理解为tkinter的增强版,故tttk也可理解为ttk的增强版。

## 高度定制

如果直接在实例化时传入的参数无法满足您的需求,您可以直接修改控件中某一部分的属性,每个部分都是该类的一个属性。您可以通过研究项目代码来进行此类更改,至少目前文档中不会对此类定制进行进一步说明。

例:

```python
import tkinter as tk
from tttk import tttk

win=tk.Tk()

numenter=tttk.NumEnter(win)
numenter.btnsub['bg']='#FF5050'
numenter.btnadd['bg']='#50FF50'
numenter.frame.pack()

win.mainloop()
```

![效果](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/custom.png)

## Demo

运行Demo来查看控件,Demo分为两个,纯展示与示例,这些内容将上传至GitHub。

纯展示Demo将会尽可能地使用较少参数或使用默认参数,所展示的皆为最原本、默认的样式。

<img src="https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/demo_show.png" alt="纯展示Demo运行效果" style="zoom:80%;" />

示例Demo为一个注册表单,其包含tttk内的所有控件,这些控件的使用可能会给予您灵感,该表单旨在展示控件,不会真正提交您的信息,您不用担心隐私问题。

<img src="https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/demo_eg.png" alt="示例Demo运行效果" style="zoom:80%;" />

## 代码中无用的内容

### 无用(或禁止使用)的函数

请勿调用在文档中注明“开发者无需自行调用”的函数。

### 无用的参数

代码中命名以`xx_`开头的参数为无用参数,您无需填入,文档中也不会进行任何介绍。

## 所有类

### NumEnterOld

简单数字输入框,输入框左右两侧分别有“-”、”+“,可以给数字-1或+1。输入框可以输入数字。

该控件较为简陋但符合系统自带控件样式,建议使用[NumEnter](#NumEnter)来替代。

请正确传入minnum和maxnum参数,否则该控件会因存在潜在问题而禁用。

![NumEnterOld的外观](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnterOld.png)

![编辑状态下的NumEnterOld](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnterOld_edit.png)

![因潜在错误而被禁用的NumEnterOld](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnterOld_err.png)

#### 参数

|  名称  |   解释   |  数据类型   | 默认值 |
| :----: | :------: | :---------: | :----: |
|  win   | 父级容器 | tkinter容器 |        |
| value  |  起始值  |     int     |   0    |
| minnum |  最小值  |     int     |  None  |
| maxnum |  最大值  |     int     |  None  |

#### 函数

##### refresh

由其他函数自动调用,开发者无需自行调用。

##### changeui

修改数值的界面,点击输入框后自动调用,可以直接调用来显示编辑界面。

##### refresh_with_numenter

由其他函数自动调用,开发者无需自行调用。

##### sub

将值减去指定的数。

**参数**

| 名称  |          解释          | 数据类型 | 默认值 |
| :---: | :--------------------: | :------: | :----: |
| event | 其他位置调用时自动填入 |          |        |
|  num  |        减去的数        |   int    |   1    |

##### add

将值增加指定的数。

**参数**

| 名称 |   解释   | 数据类型 | 默认值 |
| :--: | :------: | :------: | :----: |
| num  | 增加的数 |   int    |   1    |

##### get

获取当前的值

### Osnk

屏幕数字小键盘,初始化后会自动弹出窗口,触屏用户可以借助窗口上的按钮快速输入数字。

![Osnk的外观截图](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/Osnk.png)

#### 参数

| 名称  |      解释      |   数据类型    |    默认值    |
| :---: | :------------: | :-----------: | :----------: |
| root  |    父级窗口    |  tkinter窗口  |              |
| entry |  绑定的输入框  | tkinter.Entry |              |
| title | 小键盘窗口标题 |      str      | '数字软键盘' |

### NumEnter

数字输入框,输入框左右两侧分别有“-”、”+“,可以给数字-1或+1。输入框可以输入数字。

该控件中的“输入框”并非真正的输入框,而是通过Label和按键绑定制作的伪输入框。(我**花了一中午来写这个……)下文为了叙述简单,一律用“输入框”代替本控件的该部分。

请正确传入minnum和maxnum参数,否则该控件会因存在潜在问题而禁用。

**注:**本控件只能指定固定宽度或大小。

![NumEnter的外观截图](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnter.png)

![编辑状态下的NumEnter](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnter_edit.png)

![因潜在问题而被禁用的NumEnter](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnter_err.png)

#### 参数

|   名称   |     解释     |  数据类型   |  默认值   |
| :------: | :----------: | :---------: | :-------: |
|   win    |   父级容器   | tkinter容器 |           |
|  value   |    起始值    |     int     |     0     |
|  width   |  输入框宽度  |     int     |     7     |
| fontsize |   字体大小   |     int     |    20     |
|  minnum  |    最小值    |     int     |   None    |
|  maxnum  |    最大值    |     int     |   None    |
|    bg    |  按钮背景色  |     str     |   None    |
|    fg    |  按钮前景色  |     str     |   None    |
|  txtbg   | 输入框背景色 |     str     | '#FFFFFF' |

#### 函数

##### refresh

由其他函数自动调用,开发者无需自行调用。

##### changeui

修改数值的界面,双击输入框后自动调用,可以直接调用来显示编辑界面。

##### insert

在值的末尾添加数位。

**参数**

| 名称 |        解释         | 数据类型 | 默认值 |
| :--: | :-----------------: | :------: | :----: |
| num  | 添加的数位(仅1位) |   str    |  '0'   |

##### index

为兼容[Osnk](#Osnk)而创建,只会返回“0”,开发者无需自行调用。

##### delete

当通过changeui调起Osnk,或将Osnk绑定到NumEnter后,单击Osnk上的退格会自动触发。直接调用可以删除末位数字。

##### refresh_with_numenter

由其他函数自动调用,开发者无需自行调用。

##### sub

将值减去指定的数。

**参数**

| 名称 |   解释   | 数据类型 | 默认值 |
| :--: | :------: | :------: | :----: |
| num  | 减去的数 |   int    |   1    |

##### add

将值增加指定的数。

**参数**

| 名称 |   解释   | 数据类型 | 默认值 |
| :--: | :------: | :------: | :----: |
| num  | 增加的数 |   int    |   1    |

##### get

获取当前的值。

##### osnk

由其他函数自动调用,开发者无需自行调用。

### TipEnter

会在输入框左边显示一段提示文字,可以提示用户需要输入什么。如果传入了command参数,则会在输入框右边显示一个按钮,可以作为提交或清空按钮。

**注:按钮只会在`command`参数不为None时显示**

![TipEnter](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/TipEnter.png)

![带按钮的TipEnter](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/TipEnter_btn.png)

#### 参数

|   名称   |         解释         |     数据类型      |  默认值  |
| :------: | :------------------: | :---------------: | :------: |
|  parent  |       父级容器       |    tkinter容器    |          |
|   text   |       提示文字       |        str        | '请填写' |
| command  | 点击按钮时执行的内容 | 函数 / lambda语句 |   None   |
|  btntxt  |    按钮显示的文字    |        str        |  '提交'  |
|    fg    |        前景色        |        str        |   None   |
|    bg    |        背景色        |        str        |   None   |
|   font   |         字体         |       tuple       |   None   |
| fontsize |       字体大小       |        int        |   None   |

**额外内容:**如果您指定了command参数(且不为None),btntxt参数才会起作用。如果您指定了fontsize参数(且不为None),则font参数不会起作用。

#### 函数

##### set

清除并设置输入框的内容。

**参数**

| 名称 |    解释    | 数据类型 | 默认值 |
| :--: | :--------: | :------: | :----: |
| txt  | 设定的文字 |   str    |        |

##### clear

清空输入框内的内容。

##### get

获取输入框的值

**参数**

**不出意外的话**,所有参数将会原封不动地传入self.enter.get()

##### refresh

重新以当前的属性调用初始化函数,如果再实例化后重新指定了`command`属性,则建议调用一次本函数

### BtnRow

包含一排按钮,您只需要简单地指定控件的父容器和按钮内容即可。

**注:“bg”参数指定的是Frame的背景色,而非按钮背景色。**此为tkinter.ttk的限制,仅可通过设置主题来修改,tttk则因过于复杂而未使用本解决方案。

![BtnRow](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/BtnRow.png)

#### 参数

|   名称   |   解释   |  数据类型   | 默认值 |
| :------: | :------: | :---------: | :----: |
|  parent  |   父级   | tkinter容器 |        |
| content  | 按钮内容 |    dict     |        |
| seperate | 按钮间隔 |     int     |   5    |
|    bg    |  背景色  |     str     |  None  |

##### 详解`content`参数的字典格式

`content`是该控件的关键参数,其直接指定该控件的内容。不要慌张,这个参数的格式很简单,而且您正在了解它。

首先,如上表所述,`content`的内容应该为一个字典(dict)。如果您不清楚字典是什么,请先去了解相关内容,您可以直接搜索`python 字典`或`json`,网络上的结果应该会介绍字典。如果您不想离开,那么看看文档内的[极简介绍](#json的极简介绍)也无妨……

作为`content`参数的字典是有一定格式要求的。字典表示整行按钮的内容,一个按钮的内容自然就是一个键值对。根据逻辑,每个键就是按钮的文字,每个值就是点击按钮执行的函数。

**例如**,如果您想制作一排按钮来显示一些网址,那么我们可以先实例化一个BtnRow对象,传入`parent`参数,然后再写`content={}`,开始写字典。首先我们来创建一个指向百度(baidu.com),文字为“百度”的按钮,我们需要先写打开百度的函数`webbrowser.open("https://www.baidu.com")`,将其放在lambda语句里,然后在字典内写一个键值对,结果就是如此`{'百度':lambda:webbrowser.open("https://www.baidu.com")}`。接下来,让我们制作一个指向`example()`函数,文字为“示例”的按钮,我们需要先创建一个名为“example”的函数,然后再先前字典的第一个键值对后面添上逗号,加上第二个按钮的信息,如果我们的example函数并不需要传入任何参数,那么“lambda”和函数名后的括号就都可以被辞退了,故结果应如此`{'百度':lambda:webbrowser.open("https://www.baidu.com"),'示例':example}`。

如果您仍无法理解,可以运行本项目的Demo,并查看其代码。两个Demo的界面底部都包含一个BtnRow,这绝对是一个易懂的例子。

## 附加内容

### json的极简介绍

在大部分位置,**字典**用**大括号(u+007b和u+007d `{}`)括起来**。一个**字典**包含**若干键值对**,在Python中用**英文逗号(u+002c `,`)分隔**,简单来说,您可以理解成一种类似于列表(list)的数据类型,不同之处在于您可以自由指定每一项的名称,亦可理解为自由指定其下标。**键值对**分为**键(key)**和**值(value)**,在Python中以**英文冒号(u+003A `:`)**分隔。**键**可以理解为**值的名称**,在Python中为一个**字符串**。**值**是键对应的**内容**,在Python中可以是**几乎任何数据类型**,甚至是另一个字典。总的来说,Python中字典**大概就是这样**`{key:value,key:value,key:value}`。

如果您仍无法理解,则以下是一个python中字典的**例子**,此时food变量即为字典`food={'水果':[苹果','香蕉','西瓜'],'蔬菜':{'绿色蔬菜':['白菜','包菜']},'其他':'想不到了……'}`。

如果您觉得单行的字典很难看清结构,则**可以在逗号处换行**,每行的键值对数量不限,如以下代码:

```python
food={'水果':[苹果','香蕉','西瓜'],
      '蔬菜':{'绿色蔬菜':['白菜','包菜']},
      '肉类':'要少吃','其他':'想不到了……'}
```
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/TotoWang-hhh/tttk/",
    "name": "tttk",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "tttk,tkinter\u589e\u5f3a,tk\u589e\u5f3a",
    "author": "\u771f_\u4eba\u5de5\u667a\u969c\uff08rgzz666\uff09",
    "author_email": "tt1224@hotmail.com",
    "download_url": "https://files.pythonhosted.org/packages/dd/b2/c647f86a44215c218c637b20ac820f1df348fc5e017a102ab50cfabb2b96/tttk-1.0.3.tar.gz",
    "platform": null,
    "description": "# tttk\u4e2d\u6587\u6587\u6863\n\n**2022 By \u771f_\u4eba\u5de5\u667a\u969c\uff08aka. rgzz666 / totowang-hhh\uff09**\n\ntttk\u662f\u4e00\u4e2atkinter\u7684\u589e\u5f3a\u5e93\uff0c\u65e8\u5728\u6269\u5c55tkinter\u53ef\u4f7f\u7528\u7684\u63a7\u4ef6\u3002**\u6ce8\u610f\uff1atttk\u5e76\u4e0d\u80fd\u8d77\u5230\u7f8e\u5316\u4f5c\u7528\u3002**\n\n\u4e0d\u540c\u4e8eTin UI\u3001ttkbootstrap\u7b49\u5176\u4ed6tkinter\u6269\u5c55\u5e93\uff0c\u672c\u9879\u76ee\u5168\u90e8\u63a7\u4ef6\u90fd\u57fa\u4e8etkinter.Frame\u7b49\u539f\u751f\u63a7\u4ef6\u8fdb\u884c\u7ee7\u627f\u548c\u4fee\u6539\uff08\u7c7b\u4f3c\u4e8etkwebview2\uff09\uff0c\u800c\u4e0d\u662f\u5728tkinter.Canvas\u4e0a\u8fdb\u884c\u7ed8\u5236\uff0c\u4ea6\u6216\u76f4\u63a5\u4fee\u6539\u63a7\u4ef6\u6837\u5f0f\u3002\n\n\u8fd9\u4e9b\u63a7\u4ef6\u5e76\u975e\u4e3a\u6b64\u6240\u5236\u4f5c\uff0c\u800c\u662f\u6574\u7406\u4e8e\u6211\u8fc7\u53bb\u5f00\u53d1\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u7a0b\u5e8f\u4e2d\u7684\u4e00\u90e8\u5206\u4e2d\u4f1a\u6709\u8fd9\u79cd\u53ef\u79fb\u690d\u7684\u6709\u8da3\u73a9\u610f\u3002\n\n## For English Speakers\n\nU can translate this doc with a translate software. **(Do not use Google Translate to Translate Chinese into English, because Google Translate is famous 4 its RUBBISH TRANSLATION in China)**\n\nI **can** translate this doc but I'm too lazy. If you want to do it 4 me, please contact me at tt1224@hotmail.com.\n\n## \u5bf9\u5e94\u7248\u672c\uff1a1.0.0~1.0.3\n\n### \u66f4\u65b0\u5185\u5bb9\n\n#### 1.0.3 - alpha 1\n\n- \u6309\u7167kennethreitz\u5927\u4f6c\u63d0\u4f9b\u7684setup.py\u4f8b\u5b50\u4fee\u6539\u4e86setup.py\uff0c\u4e0d\u77e5\u80fd\u5426\u4fee\u590d\u95ee\u9898\n\n#### 1.0.2\n\n- \u5220\u9664\u4e86\u4f9d\u8d56\u4e2d\u7684`tkinter`\uff0c\u4fee\u590d\u4e86pip\u5b89\u88c5\u65f6\uff0c\u7531\u4e8ePyPI\u4e0a\u6ca1\u6709tkinter\u7684\u5305\u800c\u627e\u4e0d\u5230\u4f9d\u8d56`tkinter`\uff0c\u81ea\u52a8\u4e0b\u8f7d\u5e76\u5c1d\u8bd5\u5b89\u88c5\u672a\u4fee\u590d`setup.py`\u62a5\u9519\u95ee\u9898\u7684\u65e7\u7248\uff080.1.1\u62161.0.1\uff09\uff0c\u7136\u540e\u5bfc\u81f4\u5b89\u88c5\u62a5\u9519\u7684\u95ee\u9898\uff0c\u4f46\u5b9e\u9645\u4ecd\u5b58\u5728\u5176\u4ed6\u95ee\u9898\uff0c\u5b89\u88c5\u540e\u4f3c\u4e4e\u5e76\u6ca1\u6709\u53cd\u5e94\n\n#### 1.0.1\n\n- \u4fee\u590d\u4e86\uff08\u81f3\u5c11\u52aa\u529b\u4fee\u590d\u4e86\uff09\u5b89\u88c5\u65f6`setup.py`\u627e\u4e0d\u5230README\u6587\u4ef6\u7684\u9519\u8bef\uff0c\u4f46\u4e8b\u5b9e\u8bc1\u660e\uff0c\u672c\u7248\u867d\u7136\u89e3\u51b3\u4e86\u8be5\u95ee\u9898\uff0c\u4f46\u5e76\u672a\u4fee\u590d\u5168\u90e8\u95ee\u9898\n\n#### 1.0.0\n\n~~\u591a\u4e86\u53bb\u4e86~~\n\n- \u9664\u5f39\u7a97\u7c7b\u5916\u7684\u6240\u6709\u63a7\u4ef6\u90fd\u7ee7\u627f\u81eatkinter\u539f\u751f\u63a7\u4ef6\uff0c\u73b0\u5728\u662f\uff0c\u5c06\u6765\u4e5f\u662f\u3002\u6545\u4ee5\u540e\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u63a7\u4ef6\u7684\u653e\u7f6e\u51fd\u6570\n- \u65b0\u589e\u4e86TipEnter\u3001BtnRow\u4e24\u4e2a\u65b0\u63a7\u4ef6\u3002\n- \u4fee\u6539\u4ee3\u7801\u6ce8\u91ca\uff0c\u8fdb\u4e00\u6b65\u7edf\u4e00\u683c\u5f0f\n- \u6587\u6863\u66f4\u65b0\uff08\u5fc5\u987b\u7684\uff01\uff09\n- \u4fee\u590d\u4e86NumEnter\u548cNumEnterOld\u6307\u5b9a\u5e76\u8fbe\u5230\u4e86\u6700\u5c0f\u503c\u540e\uff0c\u4e0d\u4f1a\u7981\u7528`-`\u6309\u94ae\u7684\u95ee\u9898\n- \u65b0\u589e\u4e86\u6700\u5c0f\u503c\u3001\u6700\u5927\u503c\u7684\u68c0\u6d4b\uff0c\u82e5\u6307\u5b9a\u7684\u503c\u5b58\u5728\u6f5c\u5728\u95ee\u9898\uff0c\u5219\u5224\u5b9a\u4e3a\u4e0d\u53ef\u63a5\u53d7\uff0c\u6b64\u65f6\u5c06\u4f1a\u7981\u7528\u8be5\u7ec4\u4ef6\n- \u4fee\u6539Demo\uff0c\u5e76\u5206\u5316\u4e3a\u4e24\u4e2a\n\n## \u5176\u4ed6\u63a8\u8350\u7684tkinter\u6269\u5c55\n\n\u8fd9\u4e2a\u5e93\u91cc\u7684\u63a7\u4ef6\u5341\u5206\u7a00\u5c11\uff0c\u5982\u679c\u4f60\u9700\u8981\u66f4\u591a\u597d\u73a9\u7684\u63a7\u4ef6\uff0c\u90a3\u4e48\u4ee5\u4e0b\u662f\u63a8\u8350\u7684\u5e93\uff1a\n\n- tkwebview2\uff0c\u8fd9\u4e2a\u5e93\u5305\u542b1\u4e2a\u63a7\u4ef6\uff0c\u5b83\u53ef\u4ee5\u5728tkinter\u7a97\u53e3\u4e2d\u663e\u793a\u7f51\u9875\uff0c\u4f46\u60a8\u9700\u8981\u5148\u5b89\u88c5EdgeWebview2\u3002\n- tkinterie\uff0c\u8be5\u5e93\u53ef\u4ee5\u663e\u793a\u7b80\u5355\u7684\u7f51\u9875\uff0c\u53ef\u4ee5\u7528\u5728\u5982\u6e32\u67d3README\uff0c\u663e\u793a\u7b80\u5355\u7684HTML+CSS\u64b0\u5199\u7684\u901a\u77e5\u3001\u5e2e\u52a9\u7b49\u5730\u65b9\u3002\u8be5\u5e93\u4e0d\u652f\u6301js\uff0c\u8c03\u6574\u63a7\u4ef6\u5927\u5c0f\u8f83\u4e3a\u56f0\u96be\uff0c\u4f46\u7a33\u5b9a\u6027\u9ad8\u4e8etkwebview2\u3002\n- ttkbootstrap\uff0c\u4e00\u4e2a\u63a7\u4ef6\u5e93\uff0c\u4e3attk\u63d0\u4f9b\u5d2d\u65b0\u7684\u89c6\u89c9\u6837\u5f0f\uff0c\u4f46\u5728\u6bcf\u4e00\u7248\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u90fd\u5982\u6b64\uff0c\u6240\u4ee5\u5728\u67d0\u4e9b\u7cfb\u7edf\u4e2d\u4f1a\u5b58\u5728\u8fdd\u548c\u611f\u3002\u8be5\u5e93\u517c\u5bb9\u6027\u4e0d\u4f73\uff0c\u9700\u8981\u9ad8\u7248\u672cPython\u3002\n- TinUI\uff0c\u4e00\u4e2a\u7f8e\u89c2\u7684\u63a7\u4ef6\u5e93\uff0c\u98ce\u683c\u4e3a\u4effWinUI\uff0c\u901a\u8fc7\u8be5\u5e93\u7684\u4e3b\u9898\u53ef\u5b9e\u73b0\u8ddf\u968f\u7cfb\u7edf\u81ea\u52a8\u6df1\u6d45\u8272\u3002\u4f46\u662f\u76f8\u8f83\u4e8ettkbootstrap\uff0c\u5b83\u6709\u4e9b\u4e0d\u6613\u7528\uff0c\u56e0\u4e3a\u5728\u63a8\u8350\u7684\u4e09\u8005\u4e2d\uff0c\u8fd9\u662f\u552f\u4e00\u4e00\u4e2a\u57fa\u4e8ecanvas\u7684\u5e93\u3002\u4e3b\u8981\u4f5c\u8005\u79f0\u8fd9\u53ea\u662f\u4e1a\u4f59\u5236\u4f5c\u7684\u63a7\u4ef6\u5e93\uff0c\u6240\u4ee5\u8be5\u5e93\u7ec6\u8282\u6548\u679c\u4e0d\u4f73\u3002\n\n## \u53d6\u540d\n\n\u56e0\u4e3attk\u53ef\u4ee5\u7406\u89e3\u4e3atkinter\u7684\u589e\u5f3a\u7248\uff0c\u6545tttk\u4e5f\u53ef\u7406\u89e3\u4e3attk\u7684\u589e\u5f3a\u7248\u3002\n\n## \u9ad8\u5ea6\u5b9a\u5236\n\n\u5982\u679c\u76f4\u63a5\u5728\u5b9e\u4f8b\u5316\u65f6\u4f20\u5165\u7684\u53c2\u6570\u65e0\u6cd5\u6ee1\u8db3\u60a8\u7684\u9700\u6c42\uff0c\u60a8\u53ef\u4ee5\u76f4\u63a5\u4fee\u6539\u63a7\u4ef6\u4e2d\u67d0\u4e00\u90e8\u5206\u7684\u5c5e\u6027\uff0c\u6bcf\u4e2a\u90e8\u5206\u90fd\u662f\u8be5\u7c7b\u7684\u4e00\u4e2a\u5c5e\u6027\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u7814\u7a76\u9879\u76ee\u4ee3\u7801\u6765\u8fdb\u884c\u6b64\u7c7b\u66f4\u6539\uff0c\u81f3\u5c11\u76ee\u524d\u6587\u6863\u4e2d\u4e0d\u4f1a\u5bf9\u6b64\u7c7b\u5b9a\u5236\u8fdb\u884c\u8fdb\u4e00\u6b65\u8bf4\u660e\u3002\n\n\u4f8b\uff1a\n\n```python\nimport tkinter as tk\nfrom tttk import tttk\n\nwin=tk.Tk()\n\nnumenter=tttk.NumEnter(win)\nnumenter.btnsub['bg']='#FF5050'\nnumenter.btnadd['bg']='#50FF50'\nnumenter.frame.pack()\n\nwin.mainloop()\n```\n\n![\u6548\u679c](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/custom.png)\n\n## Demo\n\n\u8fd0\u884cDemo\u6765\u67e5\u770b\u63a7\u4ef6\uff0cDemo\u5206\u4e3a\u4e24\u4e2a\uff0c\u7eaf\u5c55\u793a\u4e0e\u793a\u4f8b\uff0c\u8fd9\u4e9b\u5185\u5bb9\u5c06\u4e0a\u4f20\u81f3GitHub\u3002\n\n\u7eaf\u5c55\u793aDemo\u5c06\u4f1a\u5c3d\u53ef\u80fd\u5730\u4f7f\u7528\u8f83\u5c11\u53c2\u6570\u6216\u4f7f\u7528\u9ed8\u8ba4\u53c2\u6570\uff0c\u6240\u5c55\u793a\u7684\u7686\u4e3a\u6700\u539f\u672c\u3001\u9ed8\u8ba4\u7684\u6837\u5f0f\u3002\n\n<img src=\"https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/demo_show.png\" alt=\"\u7eaf\u5c55\u793aDemo\u8fd0\u884c\u6548\u679c\" style=\"zoom:80%;\" />\n\n\u793a\u4f8bDemo\u4e3a\u4e00\u4e2a\u6ce8\u518c\u8868\u5355\uff0c\u5176\u5305\u542btttk\u5185\u7684\u6240\u6709\u63a7\u4ef6\uff0c\u8fd9\u4e9b\u63a7\u4ef6\u7684\u4f7f\u7528\u53ef\u80fd\u4f1a\u7ed9\u4e88\u60a8\u7075\u611f\uff0c\u8be5\u8868\u5355\u65e8\u5728\u5c55\u793a\u63a7\u4ef6\uff0c\u4e0d\u4f1a\u771f\u6b63\u63d0\u4ea4\u60a8\u7684\u4fe1\u606f\uff0c\u60a8\u4e0d\u7528\u62c5\u5fc3\u9690\u79c1\u95ee\u9898\u3002\n\n<img src=\"https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/demo_eg.png\" alt=\"\u793a\u4f8bDemo\u8fd0\u884c\u6548\u679c\" style=\"zoom:80%;\" />\n\n## \u4ee3\u7801\u4e2d\u65e0\u7528\u7684\u5185\u5bb9\n\n### \u65e0\u7528\uff08\u6216\u7981\u6b62\u4f7f\u7528\uff09\u7684\u51fd\u6570\n\n\u8bf7\u52ff\u8c03\u7528\u5728\u6587\u6863\u4e2d\u6ce8\u660e\u201c\u5f00\u53d1\u8005\u65e0\u9700\u81ea\u884c\u8c03\u7528\u201d\u7684\u51fd\u6570\u3002\n\n### \u65e0\u7528\u7684\u53c2\u6570\n\n\u4ee3\u7801\u4e2d\u547d\u540d\u4ee5`xx_`\u5f00\u5934\u7684\u53c2\u6570\u4e3a\u65e0\u7528\u53c2\u6570\uff0c\u60a8\u65e0\u9700\u586b\u5165\uff0c\u6587\u6863\u4e2d\u4e5f\u4e0d\u4f1a\u8fdb\u884c\u4efb\u4f55\u4ecb\u7ecd\u3002\n\n## \u6240\u6709\u7c7b\n\n### NumEnterOld\n\n\u7b80\u5355\u6570\u5b57\u8f93\u5165\u6846\uff0c\u8f93\u5165\u6846\u5de6\u53f3\u4e24\u4fa7\u5206\u522b\u6709\u201c-\u201d\u3001\u201d+\u201c\uff0c\u53ef\u4ee5\u7ed9\u6570\u5b57-1\u6216+1\u3002\u8f93\u5165\u6846\u53ef\u4ee5\u8f93\u5165\u6570\u5b57\u3002\n\n\u8be5\u63a7\u4ef6\u8f83\u4e3a\u7b80\u964b\u4f46\u7b26\u5408\u7cfb\u7edf\u81ea\u5e26\u63a7\u4ef6\u6837\u5f0f\uff0c\u5efa\u8bae\u4f7f\u7528[NumEnter](#NumEnter)\u6765\u66ff\u4ee3\u3002\n\n\u8bf7\u6b63\u786e\u4f20\u5165minnum\u548cmaxnum\u53c2\u6570\uff0c\u5426\u5219\u8be5\u63a7\u4ef6\u4f1a\u56e0\u5b58\u5728\u6f5c\u5728\u95ee\u9898\u800c\u7981\u7528\u3002\n\n![NumEnterOld\u7684\u5916\u89c2](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnterOld.png)\n\n![\u7f16\u8f91\u72b6\u6001\u4e0b\u7684NumEnterOld](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnterOld_edit.png)\n\n![\u56e0\u6f5c\u5728\u9519\u8bef\u800c\u88ab\u7981\u7528\u7684NumEnterOld](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnterOld_err.png)\n\n#### \u53c2\u6570\n\n|  \u540d\u79f0  |   \u89e3\u91ca   |  \u6570\u636e\u7c7b\u578b   | \u9ed8\u8ba4\u503c |\n| :----: | :------: | :---------: | :----: |\n|  win   | \u7236\u7ea7\u5bb9\u5668 | tkinter\u5bb9\u5668 |        |\n| value  |  \u8d77\u59cb\u503c  |     int     |   0    |\n| minnum |  \u6700\u5c0f\u503c  |     int     |  None  |\n| maxnum |  \u6700\u5927\u503c  |     int     |  None  |\n\n#### \u51fd\u6570\n\n##### refresh\n\n\u7531\u5176\u4ed6\u51fd\u6570\u81ea\u52a8\u8c03\u7528\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u81ea\u884c\u8c03\u7528\u3002\n\n##### changeui\n\n\u4fee\u6539\u6570\u503c\u7684\u754c\u9762\uff0c\u70b9\u51fb\u8f93\u5165\u6846\u540e\u81ea\u52a8\u8c03\u7528\uff0c\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u6765\u663e\u793a\u7f16\u8f91\u754c\u9762\u3002\n\n##### refresh_with_numenter\n\n\u7531\u5176\u4ed6\u51fd\u6570\u81ea\u52a8\u8c03\u7528\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u81ea\u884c\u8c03\u7528\u3002\n\n##### sub\n\n\u5c06\u503c\u51cf\u53bb\u6307\u5b9a\u7684\u6570\u3002\n\n**\u53c2\u6570**\n\n| \u540d\u79f0  |          \u89e3\u91ca          | \u6570\u636e\u7c7b\u578b | \u9ed8\u8ba4\u503c |\n| :---: | :--------------------: | :------: | :----: |\n| event | \u5176\u4ed6\u4f4d\u7f6e\u8c03\u7528\u65f6\u81ea\u52a8\u586b\u5165 |          |        |\n|  num  |        \u51cf\u53bb\u7684\u6570        |   int    |   1    |\n\n##### add\n\n\u5c06\u503c\u589e\u52a0\u6307\u5b9a\u7684\u6570\u3002\n\n**\u53c2\u6570**\n\n| \u540d\u79f0 |   \u89e3\u91ca   | \u6570\u636e\u7c7b\u578b | \u9ed8\u8ba4\u503c |\n| :--: | :------: | :------: | :----: |\n| num  | \u589e\u52a0\u7684\u6570 |   int    |   1    |\n\n##### get\n\n\u83b7\u53d6\u5f53\u524d\u7684\u503c\n\n### Osnk\n\n\u5c4f\u5e55\u6570\u5b57\u5c0f\u952e\u76d8\uff0c\u521d\u59cb\u5316\u540e\u4f1a\u81ea\u52a8\u5f39\u51fa\u7a97\u53e3\uff0c\u89e6\u5c4f\u7528\u6237\u53ef\u4ee5\u501f\u52a9\u7a97\u53e3\u4e0a\u7684\u6309\u94ae\u5feb\u901f\u8f93\u5165\u6570\u5b57\u3002\n\n![Osnk\u7684\u5916\u89c2\u622a\u56fe](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/Osnk.png)\n\n#### \u53c2\u6570\n\n| \u540d\u79f0  |      \u89e3\u91ca      |   \u6570\u636e\u7c7b\u578b    |    \u9ed8\u8ba4\u503c    |\n| :---: | :------------: | :-----------: | :----------: |\n| root  |    \u7236\u7ea7\u7a97\u53e3    |  tkinter\u7a97\u53e3  |              |\n| entry |  \u7ed1\u5b9a\u7684\u8f93\u5165\u6846  | tkinter.Entry |              |\n| title | \u5c0f\u952e\u76d8\u7a97\u53e3\u6807\u9898 |      str      | '\u6570\u5b57\u8f6f\u952e\u76d8' |\n\n### NumEnter\n\n\u6570\u5b57\u8f93\u5165\u6846\uff0c\u8f93\u5165\u6846\u5de6\u53f3\u4e24\u4fa7\u5206\u522b\u6709\u201c-\u201d\u3001\u201d+\u201c\uff0c\u53ef\u4ee5\u7ed9\u6570\u5b57-1\u6216+1\u3002\u8f93\u5165\u6846\u53ef\u4ee5\u8f93\u5165\u6570\u5b57\u3002\n\n\u8be5\u63a7\u4ef6\u4e2d\u7684\u201c\u8f93\u5165\u6846\u201d\u5e76\u975e\u771f\u6b63\u7684\u8f93\u5165\u6846\uff0c\u800c\u662f\u901a\u8fc7Label\u548c\u6309\u952e\u7ed1\u5b9a\u5236\u4f5c\u7684\u4f2a\u8f93\u5165\u6846\u3002\uff08\u6211**\u82b1\u4e86\u4e00\u4e2d\u5348\u6765\u5199\u8fd9\u4e2a\u2026\u2026\uff09\u4e0b\u6587\u4e3a\u4e86\u53d9\u8ff0\u7b80\u5355\uff0c\u4e00\u5f8b\u7528\u201c\u8f93\u5165\u6846\u201d\u4ee3\u66ff\u672c\u63a7\u4ef6\u7684\u8be5\u90e8\u5206\u3002\n\n\u8bf7\u6b63\u786e\u4f20\u5165minnum\u548cmaxnum\u53c2\u6570\uff0c\u5426\u5219\u8be5\u63a7\u4ef6\u4f1a\u56e0\u5b58\u5728\u6f5c\u5728\u95ee\u9898\u800c\u7981\u7528\u3002\n\n**\u6ce8\uff1a**\u672c\u63a7\u4ef6\u53ea\u80fd\u6307\u5b9a\u56fa\u5b9a\u5bbd\u5ea6\u6216\u5927\u5c0f\u3002\n\n![NumEnter\u7684\u5916\u89c2\u622a\u56fe](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnter.png)\n\n![\u7f16\u8f91\u72b6\u6001\u4e0b\u7684NumEnter](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnter_edit.png)\n\n![\u56e0\u6f5c\u5728\u95ee\u9898\u800c\u88ab\u7981\u7528\u7684NumEnter](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/NumEnter_err.png)\n\n#### \u53c2\u6570\n\n|   \u540d\u79f0   |     \u89e3\u91ca     |  \u6570\u636e\u7c7b\u578b   |  \u9ed8\u8ba4\u503c   |\n| :------: | :----------: | :---------: | :-------: |\n|   win    |   \u7236\u7ea7\u5bb9\u5668   | tkinter\u5bb9\u5668 |           |\n|  value   |    \u8d77\u59cb\u503c    |     int     |     0     |\n|  width   |  \u8f93\u5165\u6846\u5bbd\u5ea6  |     int     |     7     |\n| fontsize |   \u5b57\u4f53\u5927\u5c0f   |     int     |    20     |\n|  minnum  |    \u6700\u5c0f\u503c    |     int     |   None    |\n|  maxnum  |    \u6700\u5927\u503c    |     int     |   None    |\n|    bg    |  \u6309\u94ae\u80cc\u666f\u8272  |     str     |   None    |\n|    fg    |  \u6309\u94ae\u524d\u666f\u8272  |     str     |   None    |\n|  txtbg   | \u8f93\u5165\u6846\u80cc\u666f\u8272 |     str     | '#FFFFFF' |\n\n#### \u51fd\u6570\n\n##### refresh\n\n\u7531\u5176\u4ed6\u51fd\u6570\u81ea\u52a8\u8c03\u7528\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u81ea\u884c\u8c03\u7528\u3002\n\n##### changeui\n\n\u4fee\u6539\u6570\u503c\u7684\u754c\u9762\uff0c\u53cc\u51fb\u8f93\u5165\u6846\u540e\u81ea\u52a8\u8c03\u7528\uff0c\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u6765\u663e\u793a\u7f16\u8f91\u754c\u9762\u3002\n\n##### insert\n\n\u5728\u503c\u7684\u672b\u5c3e\u6dfb\u52a0\u6570\u4f4d\u3002\n\n**\u53c2\u6570**\n\n| \u540d\u79f0 |        \u89e3\u91ca         | \u6570\u636e\u7c7b\u578b | \u9ed8\u8ba4\u503c |\n| :--: | :-----------------: | :------: | :----: |\n| num  | \u6dfb\u52a0\u7684\u6570\u4f4d\uff08\u4ec51\u4f4d\uff09 |   str    |  '0'   |\n\n##### index\n\n\u4e3a\u517c\u5bb9[Osnk](#Osnk)\u800c\u521b\u5efa\uff0c\u53ea\u4f1a\u8fd4\u56de\u201c0\u201d\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u81ea\u884c\u8c03\u7528\u3002\n\n##### delete\n\n\u5f53\u901a\u8fc7changeui\u8c03\u8d77Osnk\uff0c\u6216\u5c06Osnk\u7ed1\u5b9a\u5230NumEnter\u540e\uff0c\u5355\u51fbOsnk\u4e0a\u7684\u9000\u683c\u4f1a\u81ea\u52a8\u89e6\u53d1\u3002\u76f4\u63a5\u8c03\u7528\u53ef\u4ee5\u5220\u9664\u672b\u4f4d\u6570\u5b57\u3002\n\n##### refresh_with_numenter\n\n\u7531\u5176\u4ed6\u51fd\u6570\u81ea\u52a8\u8c03\u7528\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u81ea\u884c\u8c03\u7528\u3002\n\n##### sub\n\n\u5c06\u503c\u51cf\u53bb\u6307\u5b9a\u7684\u6570\u3002\n\n**\u53c2\u6570**\n\n| \u540d\u79f0 |   \u89e3\u91ca   | \u6570\u636e\u7c7b\u578b | \u9ed8\u8ba4\u503c |\n| :--: | :------: | :------: | :----: |\n| num  | \u51cf\u53bb\u7684\u6570 |   int    |   1    |\n\n##### add\n\n\u5c06\u503c\u589e\u52a0\u6307\u5b9a\u7684\u6570\u3002\n\n**\u53c2\u6570**\n\n| \u540d\u79f0 |   \u89e3\u91ca   | \u6570\u636e\u7c7b\u578b | \u9ed8\u8ba4\u503c |\n| :--: | :------: | :------: | :----: |\n| num  | \u589e\u52a0\u7684\u6570 |   int    |   1    |\n\n##### get\n\n\u83b7\u53d6\u5f53\u524d\u7684\u503c\u3002\n\n##### osnk\n\n\u7531\u5176\u4ed6\u51fd\u6570\u81ea\u52a8\u8c03\u7528\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u81ea\u884c\u8c03\u7528\u3002\n\n### TipEnter\n\n\u4f1a\u5728\u8f93\u5165\u6846\u5de6\u8fb9\u663e\u793a\u4e00\u6bb5\u63d0\u793a\u6587\u5b57\uff0c\u53ef\u4ee5\u63d0\u793a\u7528\u6237\u9700\u8981\u8f93\u5165\u4ec0\u4e48\u3002\u5982\u679c\u4f20\u5165\u4e86command\u53c2\u6570\uff0c\u5219\u4f1a\u5728\u8f93\u5165\u6846\u53f3\u8fb9\u663e\u793a\u4e00\u4e2a\u6309\u94ae\uff0c\u53ef\u4ee5\u4f5c\u4e3a\u63d0\u4ea4\u6216\u6e05\u7a7a\u6309\u94ae\u3002\n\n**\u6ce8\uff1a\u6309\u94ae\u53ea\u4f1a\u5728`command`\u53c2\u6570\u4e0d\u4e3aNone\u65f6\u663e\u793a**\n\n![TipEnter](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/TipEnter.png)\n\n![\u5e26\u6309\u94ae\u7684TipEnter](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/TipEnter_btn.png)\n\n#### \u53c2\u6570\n\n|   \u540d\u79f0   |         \u89e3\u91ca         |     \u6570\u636e\u7c7b\u578b      |  \u9ed8\u8ba4\u503c  |\n| :------: | :------------------: | :---------------: | :------: |\n|  parent  |       \u7236\u7ea7\u5bb9\u5668       |    tkinter\u5bb9\u5668    |          |\n|   text   |       \u63d0\u793a\u6587\u5b57       |        str        | '\u8bf7\u586b\u5199' |\n| command  | \u70b9\u51fb\u6309\u94ae\u65f6\u6267\u884c\u7684\u5185\u5bb9 | \u51fd\u6570 / lambda\u8bed\u53e5 |   None   |\n|  btntxt  |    \u6309\u94ae\u663e\u793a\u7684\u6587\u5b57    |        str        |  '\u63d0\u4ea4'  |\n|    fg    |        \u524d\u666f\u8272        |        str        |   None   |\n|    bg    |        \u80cc\u666f\u8272        |        str        |   None   |\n|   font   |         \u5b57\u4f53         |       tuple       |   None   |\n| fontsize |       \u5b57\u4f53\u5927\u5c0f       |        int        |   None   |\n\n**\u989d\u5916\u5185\u5bb9\uff1a**\u5982\u679c\u60a8\u6307\u5b9a\u4e86command\u53c2\u6570\uff08\u4e14\u4e0d\u4e3aNone\uff09\uff0cbtntxt\u53c2\u6570\u624d\u4f1a\u8d77\u4f5c\u7528\u3002\u5982\u679c\u60a8\u6307\u5b9a\u4e86fontsize\u53c2\u6570\uff08\u4e14\u4e0d\u4e3aNone\uff09\uff0c\u5219font\u53c2\u6570\u4e0d\u4f1a\u8d77\u4f5c\u7528\u3002\n\n#### \u51fd\u6570\n\n##### set\n\n\u6e05\u9664\u5e76\u8bbe\u7f6e\u8f93\u5165\u6846\u7684\u5185\u5bb9\u3002\n\n**\u53c2\u6570**\n\n| \u540d\u79f0 |    \u89e3\u91ca    | \u6570\u636e\u7c7b\u578b | \u9ed8\u8ba4\u503c |\n| :--: | :--------: | :------: | :----: |\n| txt  | \u8bbe\u5b9a\u7684\u6587\u5b57 |   str    |        |\n\n##### clear\n\n\u6e05\u7a7a\u8f93\u5165\u6846\u5185\u7684\u5185\u5bb9\u3002\n\n##### get\n\n\u83b7\u53d6\u8f93\u5165\u6846\u7684\u503c\n\n**\u53c2\u6570**\n\n**\u4e0d\u51fa\u610f\u5916\u7684\u8bdd**\uff0c\u6240\u6709\u53c2\u6570\u5c06\u4f1a\u539f\u5c01\u4e0d\u52a8\u5730\u4f20\u5165self.enter.get()\n\n##### refresh\n\n\u91cd\u65b0\u4ee5\u5f53\u524d\u7684\u5c5e\u6027\u8c03\u7528\u521d\u59cb\u5316\u51fd\u6570\uff0c\u5982\u679c\u518d\u5b9e\u4f8b\u5316\u540e\u91cd\u65b0\u6307\u5b9a\u4e86`command`\u5c5e\u6027\uff0c\u5219\u5efa\u8bae\u8c03\u7528\u4e00\u6b21\u672c\u51fd\u6570\n\n### BtnRow\n\n\u5305\u542b\u4e00\u6392\u6309\u94ae\uff0c\u60a8\u53ea\u9700\u8981\u7b80\u5355\u5730\u6307\u5b9a\u63a7\u4ef6\u7684\u7236\u5bb9\u5668\u548c\u6309\u94ae\u5185\u5bb9\u5373\u53ef\u3002\n\n**\u6ce8\uff1a\u201cbg\u201d\u53c2\u6570\u6307\u5b9a\u7684\u662fFrame\u7684\u80cc\u666f\u8272\uff0c\u800c\u975e\u6309\u94ae\u80cc\u666f\u8272\u3002**\u6b64\u4e3atkinter.ttk\u7684\u9650\u5236\uff0c\u4ec5\u53ef\u901a\u8fc7\u8bbe\u7f6e\u4e3b\u9898\u6765\u4fee\u6539\uff0ctttk\u5219\u56e0\u8fc7\u4e8e\u590d\u6742\u800c\u672a\u4f7f\u7528\u672c\u89e3\u51b3\u65b9\u6848\u3002\n\n![BtnRow](https://raw.githubusercontent.com/TotoWang-hhh/tttk/main/docs/img/BtnRow.png)\n\n#### \u53c2\u6570\n\n|   \u540d\u79f0   |   \u89e3\u91ca   |  \u6570\u636e\u7c7b\u578b   | \u9ed8\u8ba4\u503c |\n| :------: | :------: | :---------: | :----: |\n|  parent  |   \u7236\u7ea7   | tkinter\u5bb9\u5668 |        |\n| content  | \u6309\u94ae\u5185\u5bb9 |    dict     |        |\n| seperate | \u6309\u94ae\u95f4\u9694 |     int     |   5    |\n|    bg    |  \u80cc\u666f\u8272  |     str     |  None  |\n\n##### \u8be6\u89e3`content`\u53c2\u6570\u7684\u5b57\u5178\u683c\u5f0f\n\n`content`\u662f\u8be5\u63a7\u4ef6\u7684\u5173\u952e\u53c2\u6570\uff0c\u5176\u76f4\u63a5\u6307\u5b9a\u8be5\u63a7\u4ef6\u7684\u5185\u5bb9\u3002\u4e0d\u8981\u614c\u5f20\uff0c\u8fd9\u4e2a\u53c2\u6570\u7684\u683c\u5f0f\u5f88\u7b80\u5355\uff0c\u800c\u4e14\u60a8\u6b63\u5728\u4e86\u89e3\u5b83\u3002\n\n\u9996\u5148\uff0c\u5982\u4e0a\u8868\u6240\u8ff0\uff0c`content`\u7684\u5185\u5bb9\u5e94\u8be5\u4e3a\u4e00\u4e2a\u5b57\u5178\uff08dict\uff09\u3002\u5982\u679c\u60a8\u4e0d\u6e05\u695a\u5b57\u5178\u662f\u4ec0\u4e48\uff0c\u8bf7\u5148\u53bb\u4e86\u89e3\u76f8\u5173\u5185\u5bb9\uff0c\u60a8\u53ef\u4ee5\u76f4\u63a5\u641c\u7d22`python \u5b57\u5178`\u6216`json`\uff0c\u7f51\u7edc\u4e0a\u7684\u7ed3\u679c\u5e94\u8be5\u4f1a\u4ecb\u7ecd\u5b57\u5178\u3002\u5982\u679c\u60a8\u4e0d\u60f3\u79bb\u5f00\uff0c\u90a3\u4e48\u770b\u770b\u6587\u6863\u5185\u7684[\u6781\u7b80\u4ecb\u7ecd](#json\u7684\u6781\u7b80\u4ecb\u7ecd)\u4e5f\u65e0\u59a8\u2026\u2026\n\n\u4f5c\u4e3a`content`\u53c2\u6570\u7684\u5b57\u5178\u662f\u6709\u4e00\u5b9a\u683c\u5f0f\u8981\u6c42\u7684\u3002\u5b57\u5178\u8868\u793a\u6574\u884c\u6309\u94ae\u7684\u5185\u5bb9\uff0c\u4e00\u4e2a\u6309\u94ae\u7684\u5185\u5bb9\u81ea\u7136\u5c31\u662f\u4e00\u4e2a\u952e\u503c\u5bf9\u3002\u6839\u636e\u903b\u8f91\uff0c\u6bcf\u4e2a\u952e\u5c31\u662f\u6309\u94ae\u7684\u6587\u5b57\uff0c\u6bcf\u4e2a\u503c\u5c31\u662f\u70b9\u51fb\u6309\u94ae\u6267\u884c\u7684\u51fd\u6570\u3002\n\n**\u4f8b\u5982**\uff0c\u5982\u679c\u60a8\u60f3\u5236\u4f5c\u4e00\u6392\u6309\u94ae\u6765\u663e\u793a\u4e00\u4e9b\u7f51\u5740\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u5148\u5b9e\u4f8b\u5316\u4e00\u4e2aBtnRow\u5bf9\u8c61\uff0c\u4f20\u5165`parent`\u53c2\u6570\uff0c\u7136\u540e\u518d\u5199`content={}`\uff0c\u5f00\u59cb\u5199\u5b57\u5178\u3002\u9996\u5148\u6211\u4eec\u6765\u521b\u5efa\u4e00\u4e2a\u6307\u5411\u767e\u5ea6\uff08baidu.com\uff09\uff0c\u6587\u5b57\u4e3a\u201c\u767e\u5ea6\u201d\u7684\u6309\u94ae\uff0c\u6211\u4eec\u9700\u8981\u5148\u5199\u6253\u5f00\u767e\u5ea6\u7684\u51fd\u6570`webbrowser.open(\"https://www.baidu.com\")`\uff0c\u5c06\u5176\u653e\u5728lambda\u8bed\u53e5\u91cc\uff0c\u7136\u540e\u5728\u5b57\u5178\u5185\u5199\u4e00\u4e2a\u952e\u503c\u5bf9\uff0c\u7ed3\u679c\u5c31\u662f\u5982\u6b64`{'\u767e\u5ea6':lambda:webbrowser.open(\"https://www.baidu.com\")}`\u3002\u63a5\u4e0b\u6765\uff0c\u8ba9\u6211\u4eec\u5236\u4f5c\u4e00\u4e2a\u6307\u5411`example()`\u51fd\u6570\uff0c\u6587\u5b57\u4e3a\u201c\u793a\u4f8b\u201d\u7684\u6309\u94ae\uff0c\u6211\u4eec\u9700\u8981\u5148\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a\u201cexample\u201d\u7684\u51fd\u6570\uff0c\u7136\u540e\u518d\u5148\u524d\u5b57\u5178\u7684\u7b2c\u4e00\u4e2a\u952e\u503c\u5bf9\u540e\u9762\u6dfb\u4e0a\u9017\u53f7\uff0c\u52a0\u4e0a\u7b2c\u4e8c\u4e2a\u6309\u94ae\u7684\u4fe1\u606f\uff0c\u5982\u679c\u6211\u4eec\u7684example\u51fd\u6570\u5e76\u4e0d\u9700\u8981\u4f20\u5165\u4efb\u4f55\u53c2\u6570\uff0c\u90a3\u4e48\u201clambda\u201d\u548c\u51fd\u6570\u540d\u540e\u7684\u62ec\u53f7\u5c31\u90fd\u53ef\u4ee5\u88ab\u8f9e\u9000\u4e86\uff0c\u6545\u7ed3\u679c\u5e94\u5982\u6b64`{'\u767e\u5ea6':lambda:webbrowser.open(\"https://www.baidu.com\"),'\u793a\u4f8b':example}`\u3002\n\n\u5982\u679c\u60a8\u4ecd\u65e0\u6cd5\u7406\u89e3\uff0c\u53ef\u4ee5\u8fd0\u884c\u672c\u9879\u76ee\u7684Demo\uff0c\u5e76\u67e5\u770b\u5176\u4ee3\u7801\u3002\u4e24\u4e2aDemo\u7684\u754c\u9762\u5e95\u90e8\u90fd\u5305\u542b\u4e00\u4e2aBtnRow\uff0c\u8fd9\u7edd\u5bf9\u662f\u4e00\u4e2a\u6613\u61c2\u7684\u4f8b\u5b50\u3002\n\n## \u9644\u52a0\u5185\u5bb9\n\n### json\u7684\u6781\u7b80\u4ecb\u7ecd\n\n\u5728\u5927\u90e8\u5206\u4f4d\u7f6e\uff0c**\u5b57\u5178**\u7528**\u5927\u62ec\u53f7\uff08u+007b\u548cu+007d `{}`\uff09\u62ec\u8d77\u6765**\u3002\u4e00\u4e2a**\u5b57\u5178**\u5305\u542b**\u82e5\u5e72\u952e\u503c\u5bf9**\uff0c\u5728Python\u4e2d\u7528**\u82f1\u6587\u9017\u53f7\uff08u+002c `,`\uff09\u5206\u9694**\uff0c\u7b80\u5355\u6765\u8bf4\uff0c\u60a8\u53ef\u4ee5\u7406\u89e3\u6210\u4e00\u79cd\u7c7b\u4f3c\u4e8e\u5217\u8868\uff08list\uff09\u7684\u6570\u636e\u7c7b\u578b\uff0c\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\u60a8\u53ef\u4ee5\u81ea\u7531\u6307\u5b9a\u6bcf\u4e00\u9879\u7684\u540d\u79f0\uff0c\u4ea6\u53ef\u7406\u89e3\u4e3a\u81ea\u7531\u6307\u5b9a\u5176\u4e0b\u6807\u3002**\u952e\u503c\u5bf9**\u5206\u4e3a**\u952e\uff08key\uff09**\u548c**\u503c\uff08value\uff09**\uff0c\u5728Python\u4e2d\u4ee5**\u82f1\u6587\u5192\u53f7\uff08u+003A `:`\uff09**\u5206\u9694\u3002**\u952e**\u53ef\u4ee5\u7406\u89e3\u4e3a**\u503c\u7684\u540d\u79f0**\uff0c\u5728Python\u4e2d\u4e3a\u4e00\u4e2a**\u5b57\u7b26\u4e32**\u3002**\u503c**\u662f\u952e\u5bf9\u5e94\u7684**\u5185\u5bb9**\uff0c\u5728Python\u4e2d\u53ef\u4ee5\u662f**\u51e0\u4e4e\u4efb\u4f55\u6570\u636e\u7c7b\u578b**\uff0c\u751a\u81f3\u662f\u53e6\u4e00\u4e2a\u5b57\u5178\u3002\u603b\u7684\u6765\u8bf4\uff0cPython\u4e2d\u5b57\u5178**\u5927\u6982\u5c31\u662f\u8fd9\u6837**`{key:value,key:value,key:value}`\u3002\n\n\u5982\u679c\u60a8\u4ecd\u65e0\u6cd5\u7406\u89e3\uff0c\u5219\u4ee5\u4e0b\u662f\u4e00\u4e2apython\u4e2d\u5b57\u5178\u7684**\u4f8b\u5b50**\uff0c\u6b64\u65f6food\u53d8\u91cf\u5373\u4e3a\u5b57\u5178`food={'\u6c34\u679c':[\u82f9\u679c','\u9999\u8549','\u897f\u74dc'],'\u852c\u83dc':{'\u7eff\u8272\u852c\u83dc':['\u767d\u83dc','\u5305\u83dc']},'\u5176\u4ed6':'\u60f3\u4e0d\u5230\u4e86\u2026\u2026'}`\u3002\n\n\u5982\u679c\u60a8\u89c9\u5f97\u5355\u884c\u7684\u5b57\u5178\u5f88\u96be\u770b\u6e05\u7ed3\u6784\uff0c\u5219**\u53ef\u4ee5\u5728\u9017\u53f7\u5904\u6362\u884c**\uff0c\u6bcf\u884c\u7684\u952e\u503c\u5bf9\u6570\u91cf\u4e0d\u9650\uff0c\u5982\u4ee5\u4e0b\u4ee3\u7801\uff1a\n\n```python\nfood={'\u6c34\u679c':[\u82f9\u679c','\u9999\u8549','\u897f\u74dc'],\n      '\u852c\u83dc':{'\u7eff\u8272\u852c\u83dc':['\u767d\u83dc','\u5305\u83dc']},\n      '\u8089\u7c7b':'\u8981\u5c11\u5403','\u5176\u4ed6':'\u60f3\u4e0d\u5230\u4e86\u2026\u2026'}\n```",
    "bugtrack_url": null,
    "license": "MPL 2.0",
    "summary": "tkinter\u7684\u589e\u5f3a\u5e93",
    "version": "1.0.3",
    "split_keywords": [
        "tttk",
        "tkinter\u589e\u5f3a",
        "tk\u589e\u5f3a"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bca392993afa981295bf2834e909849813a61986b369fcfc516067dc389fc466",
                "md5": "a022dab6ba34f103916c62f6bd817ef6",
                "sha256": "d2cc00906eb8d8672d62336ad0aac3386390d0f7f278e9bb906dcb4cd68f6cec"
            },
            "downloads": -1,
            "filename": "tttk-1.0.3-py3.7.egg",
            "has_sig": false,
            "md5_digest": "a022dab6ba34f103916c62f6bd817ef6",
            "packagetype": "bdist_egg",
            "python_version": "1.0.3",
            "requires_python": null,
            "size": 16653,
            "upload_time": "2023-01-05T06:17:58",
            "upload_time_iso_8601": "2023-01-05T06:17:58.613518Z",
            "url": "https://files.pythonhosted.org/packages/bc/a3/92993afa981295bf2834e909849813a61986b369fcfc516067dc389fc466/tttk-1.0.3-py3.7.egg",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ddb2c647f86a44215c218c637b20ac820f1df348fc5e017a102ab50cfabb2b96",
                "md5": "41cd4d6d46764dc9465b496d5acbd41d",
                "sha256": "8c6128d448f83ddb88e1c27a365d6464337d4887adb544773ade696a8ba9acfd"
            },
            "downloads": -1,
            "filename": "tttk-1.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "41cd4d6d46764dc9465b496d5acbd41d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 11237,
            "upload_time": "2023-01-05T06:18:00",
            "upload_time_iso_8601": "2023-01-05T06:18:00.845325Z",
            "url": "https://files.pythonhosted.org/packages/dd/b2/c647f86a44215c218c637b20ac820f1df348fc5e017a102ab50cfabb2b96/tttk-1.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-01-05 06:18:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "TotoWang-hhh",
    "github_project": "tttk",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "tttk"
}
        
Elapsed time: 0.04829s