tkinter – 高效简单
最后更新于:2022-04-02 02:17:11
[TOC]
> [官方文档](https://docs.python.org/3.6/library/tkinter.html)
[中文参考文档](https://morvanzhou.github.io/tutorials/python-basic/tkinter/)
---
## 选项属性
```python
activebackground, activeforeground -颜色
#当按钮被激活时所使用的颜色。
ancho -按钮内容位置
#控制按钮上内容的位置。使用N, NE, E, SE, S, SW, W, NW, or CENTER这些值之一。默认值是CENTER。
background (bg), foreground (fg)
#按钮的颜色。默认值与特定平台相关。
bitmap -位图
#显示在窗口部件中的特定图标(位图)。如果image选项被指定了,则这个选项被忽略。下面的位图在所有平台上都有 效:error, gray75, gray50, gray25, gray12, hourglass, info, questhead, question, 和 warning.
#仅在Macintosh上有 效:document, stationery, edition, application, accessory, folder, pfolder, trash, floppy, ramdisk, cdrom, preferences, querydoc, stop, note, 和 caution.
#你也可以从一个XBM文件中装载位图。只需要在XBM文件名前加一个前缀@,例如"@sample.xbm"。
borderwidth (bd) -按钮边框长
#按钮边框的宽度。默认值与特定平台相关。但通常是1或2象素。
command -回调
#当按钮被按下时所调用的一个函数或方法。所回调的可以是一个函数、方法或别的可调用的Python对象。
cursor -光标
#当鼠标移动到按钮上时所显示的光标。
default -常量
#如果设置了,则按钮为默认按钮。注意这个语法在Tk 8.0b2中已改变。
disabledforeground -按钮无效时颜色
#当按钮无效时的颜色。
font -字体
# font=(‘字体名’,20)
#按钮所使用的字体。按钮只能包含一种字体的文本。
highlightbackground, highlightcolor -控制焦点所在的高亮边框的颜色
#控制焦点所在的高亮边框的颜色。当窗口部件获得焦点的时候,边框为highlightcolor所指定的颜色。否则边框为highlightbackground所指定的颜色。默认值由系统所定。
highlightthickness -控制焦点所在的高亮边框的宽度
#控制焦点所在的高亮边框的宽度。默认值通常是1或2象素。
image -部件中显示的图象
#在部件中显示的图象。如果指定,则text和bitmap选项将被忽略。
justify -多行文本如何对齐
#定义多行文本如何对齐。可取值有:LEFT, RIGHT, 或 CENTER。
padx, pady -指定文本或图象与按钮边框的间距
#padx-x轴,pady-y轴指定文本或图象与按钮边框的间距。
relief -边框的装饰
#边框的装饰。通常按钮按下时是凹陷的,否则凸起。另外的可能取值有GROOVE, RIDGE, 和 FLAT。
state -按钮的状态
#按钮的状态:NORMAL, ACTIVE 或 DISABLED。默认值为NORMAL。
takefocus -可以Tab键来将焦点移到这个按钮上
#表明用户可以Tab键来将焦点移到这个按钮上。默认值是一个空字符串,意思是如果按钮有按键绑定的话,它可以通过所绑定的按键来获得焦点。
text -字符串内容
#显示在按钮中的文本。文本可以是多行。如果bitmaps或image选项被使用,则text选项被忽略。
textvariable -可变内容
#与按钮相关的Tk变量(通常是一个字符串变量)。如果这个变量的值改变,那么按钮上的文本相应更新。
underline
#在文本标签中哪个字符加下划线。默认值为-1,意思是没有字符加下划线。
width, height -按钮的尺寸
#按钮的尺寸。如果按钮显示文本,尺寸使用文本的单位。如果按钮显示图象,尺寸以象素为单位(或屏幕的单位)。如果尺寸没指定,它将根据按钮的内容来计算。
wraplength
#确定一个按钮的文本何时调整为多行。它以屏幕的单位为单位。默认不调整。
compound
# tk.Label(app,image=img,text='ceshiziti',compound=tk.CENTER)
#复合属性,可同时显示文字和图片,且文字位置可以调整
```
## 组件的三种调用
```
import tkinter as tk
window = tk.Tk()
window.title("窗口标题-demo")
window.geometry('200x100')
def demo():
print("测试出发效果")
# 方法一
twoButton = tk.Button(window, text='测试按钮2', command=demo)
twoButton.pack()
# 方法二
oneButton = tk.Button(window) # 通过查看源码可查看Button的标准参数和特定参数
oneButton['text'] = '测试按钮'
oneButton['command'] = demo
oneButton.pack()
# 方法三 类
class ThreeButton(object):
def __init__(self, window):
self.window = window
self.create_button()
def create_button(self):
self.treeButton = tk.Button(self.window)
# self.threeButton=tk.Button(self) #或直接输入slef 即可
self.treeButton['text'] = '测试按钮三'
self.treeButton['command'] = self.treeDemo
self.treeButton.pack()
def treeDemo(self):
print("测试按钮三")
ThreeButton(window) # 实例化
window.mainloop()
```
## Frame子框架,lable中导入图片,可变字符串
```
import tkinter as tk
def callback():
varString.set('字符串变了')
app = tk.Tk() # 根窗口
#建立两个子框架
frame1 = tk.Frame(app)
frame2 = tk.Frame(app)
# 在lable中导入图片,格式只有gif
img = tk.PhotoImage(file='5.gif')
textLable = tk.Label(frame1, image=img)
textLable.pack(side=tk.LEFT)
# 设置可变字符串
varString = tk.StringVar()
varString.set("这是测试可变字符串的")
demoLabe = tk.Label(frame1, textvariable=varString, padx=10)
demoLabe.pack(side=tk.LEFT)
# 添加回调函数,不要括号,加括号则未点击就触发一次
button1 = tk.Button(frame2, text='按钮1', command=callback)
button1.pack()
#子框架打包
frame1.pack(padx=10, pady=10)
frame2.pack(padx=10, pady=10)
app.mainloop()
```
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2cef2cd7d6d48d17ad9c911bd2583569_1714x1184.png)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/ae7ecf8b80749a72d255154ea53961d3_1582x1184.png)
## Checkbutton 组件
```
varInt = tk.IntVar() #初始化一个整数变量
#variable 值选中切为1,取消且为0
check = tk.Checkbutton(app, text='hello word',variable=varInt)
check.pack()
lable = tk.Label(app, textvariable=varInt)
lable.pack()
```
## Radiobutton 组件
```
import tkinter as tk
app = tk.Tk()
app.title("Fish Demo") # 窗口标题
group = tk.LabelFrame(app, text='最好的语言是什么', padx=5, pady=5)
group.pack(padx=10, pady=10)
langs = [
('php', 2),
('python', 3),
('java', 4),
('oc', 5),
]
v = tk.IntVar()
v.set(2) # 设置默认值为php
for lang, num in langs:
b = tk.Radiobutton(group, text=lang, value=num, variable=v, indicatoron=tk.FALSE)
b.pack(fill='x')
app.mainloop()
```
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e1998f2596eb58677602ff0aa3cbc67c_506x560.png)
## Entry组件
```
import tkinter as tk
app = tk.Tk()
app.title("Fish Demo") # 窗口标题
enter = tk.Entry(app)
enter.delete(0, tk.END) # 先清空输入框内容
enter.insert(0, "请输入内容") # 0表示从第几个字符插入内容
enter.pack(padx=20, pady=20)
app.mainloop()
```
';