GUI的最终选择Tkinter模块初级篇
一、Tkinter模块的基本使用
1)实例化窗口程序
import tkinter as tk
app = tk.Tk()
app.title("FishC Demo")
app.mainloop()

2)窗口生成一个标题文本
import tkinter as tk
# 第一步实例化tk,用于容纳整个程序
app = tk.Tk()
app.title("FishC Demo") # 设置标题栏 # 第二步,用于显示文本,或图片
thelabel =tk.Label(app,text="我的第二个窗口程序") # Label 实例化标签
thelabel.pack() # 用于自动调节组件的尺寸 # 窗口的组事件循环
app.mainloop()

3)用类来实现简单的窗口
import tkinter as tk class App:
def __init__(self,master):
frame = tk.Frame(master)
frame.pack() self.hi_there = tk.Button(frame,text='打招呼',fg = 'blue')
self.hi_there.pack() root = tk.Tk()
app = App(root)
root.mainloop()

4)类中,创建点击方法,修改文本位置,及背景方法
import tkinter as tk class App:
def __init__(self,master):
frame = tk.Frame(master)
frame.pack(side = tk.LEFT,padx = ,pady = )
self.hi_there = tk.Button(frame,text='打招呼',bg = 'blue',fg = 'white',command=self.say_hi)
self.hi_there.pack()
def say_hi(self):
print('欢迎来到GUI编程') root = tk.Tk()
app = App(root)
root.mainloop()

5)添加图片功能
from tkinter import * root = Tk()
textlabel = Label(root,text='你勇敢吗!')
textlabel.pack(side = LEFT) photo = PhotoImage(file = "1.png")
imgLabel = Label(root,image=photo)
imgLabel.pack(side = RIGHT) mainloop()

6)对文字属性编辑
from tkinter import * root = Tk()
textlabel = Label(root,text='你勇敢吗!,\n敢来吗',justify=LEFT,padx=) # justify=LEFT 左对齐 padx= 边距是10
textlabel.pack(side = LEFT) photo = PhotoImage(file = "1.png")
imgLabel = Label(root,image=photo)
imgLabel.pack(side = RIGHT) mainloop()

7)设置成背景图片
from tkinter import * root = Tk()
photo = PhotoImage(file='1.jpg')
theLabel = Label(root,
text="the beautiful girl",
justify= LEFT,
image=photo,
compound=CENTER,
font=("宋体",),
fg="black")
theLabel.pack()
mainloop()

二、Button组件
1)Button点击触发事件
from tkinter import *
def callback():
var.set("吹吧,我才不信")
pass root = Tk() frame1 = Frame(root)
frame2 = Frame(root) var = StringVar()
var.set("你勇敢吗!,\n敢来吗")
textlabel = Label(frame1,
textvariable=var,
justify=LEFT,
padx=) # textvariable是变量字符串 justify=LEFT 左对齐 padx= 边距是10
textlabel.pack(side = LEFT) photo = PhotoImage(file = "1.png")
imgLabel = Label(frame1,image=photo)
imgLabel.pack(side = RIGHT) theButton = Button(frame2,text="确定,你就点啊",command = callback)
theButton.pack() frame1.pack(padx=,pady=)
frame2.pack(padx=,pady=) mainloop()

2)记录Button的点击记录事件
from tkinter import * root = Tk() v = IntVar() c = Checkbutton(root,text="测试一下",variable=v) # variable=v 表示按钮状态是否被按下
c.pack() l = Label(root,textvariable=v) # 记录选中状态
l.pack() mainloop()

3)Button点击事件列表应用

from tkinter import * root = Tk() GIRLS = ["西施","苍老师",'东施'] v = [] for girl in GIRLS:
v.append(IntVar())
b = Checkbutton(root,text=girl,variable=v[-])
b.pack(anchor=W) # 名字左对齐 mainloop()

4)互斥事件
from tkinter import * root = Tk() v = IntVar() Radiobutton(root,text='One',variable=v,value=).pack(anchor=W)
Radiobutton(root,text='Two',variable=v,value=).pack(anchor=W)
Radiobutton(root,text='Threr',variable=v,value=).pack(anchor=W) mainloop()

5)for循环使用互斥事件和按钮的多样式
from tkinter import *
root = Tk()
LANGS=[("python",),
("java",),
("php",),
("ruby",)]
v = IntVar()
v.set()
for lang,num in LANGS:
b = Radiobutton(root,text=lang,variable=v,value=num,indicatoron=False) # indicatoron=False 设置点击的样式,默认的小原点
b.pack(fill=X) # 按钮横向填充
mainloop()

6)选择回答选项设置
from tkinter import * root = Tk() group = LabelFrame(root,text="最好的脚本语言是?",padx=,pady=)
group.pack(padx=,pady=) LANGS=[("python",),
("java",),
("php",),
("ruby",)] v = IntVar()
# v.set() # 这个是默认选择第一个 for lang,num in LANGS:
b = Radiobutton(group,text=lang,variable=v,value=num) # indicatoron=False 设置点击的样式,默认的小原点
b.pack(anchor=W)
mainloop()

三、Entry输入框方法
1)初探输入框
from tkinter import * root = Tk() e = Entry(root)
e.pack(padx=,pady=) mainloop()

2)生成默认输入框文本
from tkinter import * root = Tk() e = Entry(root)
e.pack(padx=,pady=) e.delete(,END)
e.insert(,"默认文本...") mainloop()

3)获取用户交互点击信息
from tkinter import * root = Tk() Label(root,text="作品:").grid(row=,column=)
Label(root,text="作者:").grid(row=,column=) e1 = Entry(root)
e2 = Entry(root)
e1.grid(row=,column=,padx=,pady=)
e2.grid(row=,column=,padx=,pady=) def show():
print("作品:<%s>" % e1.get())
print("作者:<%s>" % e2.get()) Button(root,text="获取信息",width=,command=show)\
.grid(row=,column=,sticky=W,padx=,pady=)
Button(root,text="退出",width=,command=root.quit) \
.grid(row=, column=, sticky=E, padx=, pady=) mainloop()

4)输入框隐藏输入密码功能
from tkinter import * root = Tk() Label(root,text="账号:").grid(row=,column=)
Label(root,text="密码:").grid(row=,column=) v1 = StringVar()
v2 = StringVar() e1 = Entry(root,textvariable=v1)
e2 = Entry(root,textvariable=v2,show="*")
e1.grid(row=,column=,padx=,pady=)
e2.grid(row=,column=,padx=,pady=) def show():
print("账号:%s" % e1.get())
print("密码:%s" % e2.get()) Button(root,text="芝麻开门",width=,command=show)\
.grid(row=,column=,sticky=W,padx=,pady=)
Button(root,text="退出",width=,command=root.quit) \
.grid(row=, column=, sticky=E, padx=, pady=) mainloop()
5)输入框正确则保留,错误清空重新输入
from tkinter import * master = Tk() def test():
if e1.get() == "python":
print("正确")
return True
else:
print("错误")
e1.delete(,END)
return False v = StringVar()
e1 = Entry(master,textvariable=v,validate="focusout",validatecommand=test)
e2 = Entry(master)
e1.pack(padx = ,pady=)
e2.pack(padx = ,pady=)
mainloop()

6)函数调用使用
#-*-coding: utf- -*-
from tkinter import * master = Tk() def test1():
if e1.get() == "python":
print("正确")
return True
else:
print("错误")
e1.delete(,END)
return False def test2():
print("python被调用了")
return True v = StringVar()
e1 = Entry(master,textvariable=v,validate="focusout",\
validatecommand=test1,invalidcommand=test2)
e2 = Entry(master)
e1.pack(padx = ,pady=)
e2.pack(padx = ,pady=) mainloop()

7)验证函数的额外选项

from tkinter import * master = Tk() v = StringVar()
def test(content,reason,name):
if content == "python":
print("正确")
print(content,reason,name)
return True
else:
print("错误")
print(content, reason, name)
return False testCMD = master.register(test)
e1 = Entry(master,textvariable=v,validate="focusout",\
validatecommand=(testCMD,'%P','%v','%W'))
e2 = Entry(master)
e1.pack(padx = ,pady=)
e2.pack(padx = ,pady=) mainloop()

8)实现一个简单的加法计算器
from tkinter import * master = Tk() frame = Frame(master)
frame.pack(padx=,pady=) v1 = StringVar()
v2 = StringVar()
v3 = StringVar()
def test(content):
return content.isdigit() testCMD = master.register(test)
e1 = Entry(frame,width=,textvariable=v1,validate="key",\
validatecommand=(testCMD,'%P')).grid(row=,column=)
Label(frame,text="+").grid(row=,column=) e2 = Entry(frame,width=,textvariable=v2,validate="key",\
validatecommand=(testCMD,'%P')).grid(row=,column=)
Label(frame,text="=").grid(row=,column=)
e3 = Entry(frame,width=,textvariable=v3,state="readonly").grid(row=,column=) def calc():
result = int(v1.get()) + int(v2.get())
v3.set(str(result))
Button(frame,text='计算结果',command=calc).grid(row=,column=,pady=)
mainloop()

9)Listbox组件使用,引出滚动条
实现单一的删除操作
from tkinter import * master = Tk()
theLB = Listbox(master)
theLB.pack() for item in ['鸡蛋','鸭蛋','鹅蛋','狗蛋']:
theLB.insert(END,item) theButton = Button(master, text="删除它",\
command = lambda x=theLB:x.delete(ACTIVE))
theButton.pack()
# theLB.delete(,END) # 全部删除
mainloop()
theLB = Listbox(master,selectmode=EXTENDED) # 多选
theLB = Listbox(master,selectmode=SINGLE) # 单选
theLB = Listbox(master,selectmode=SINGLE,height=) # 增加高度
四、滚动条操作
1)Scrikkbar生成滚动条方法
from tkinter import * root = Tk()
sb = Scrollbar(root)
sb.pack(side=RIGHT,fill =Y) mainloop()

2)另一种 Scale增加精度的滚动条
from tkinter import * root = Tk() Scale(root,from_=, to =).pack()
Scale(root,from_=, to =,orient = HORIZONTAL).pack() mainloop()

3)获取该精度的位置
from tkinter import * root = Tk() s1 = Scale(root,from_=, to =)
s1.pack()
s2 = Scale(root,from_=, to =,orient = HORIZONTAL)
s2.pack() def show():
print(s1.get(),s2.get()) Button(root,text="获取位置",command =show).pack() mainloop()

4)精度的具体演示
from tkinter import * root = Tk() s1 = Scale(root,from_=, to =,tickinterval=,resolution=,length=)
s1.pack()
s2 = Scale(root,from_=, to =,tickinterval=,orient = HORIZONTAL,length=)
s2.pack() mainloop()

五、insert插入功能
1)插入文本
from tkinter import * root = Tk() text = Text(root, width=, height=)
text.pack() text.insert(INSERT,"I love \n")
text.insert(END,"YOU") def show():
print("我被点了一下")
b1 = Button(text,text="点我啊",command=show)
text.window_create(INSERT,window=b1)

2)插入图片
from tkinter import * root = Tk() text = Text(root, width=, height=)
text.pack() phone = PhotoImage(file = "1.jpg") def show():
text.image_create(END,image=phone) b1 = Button(text,text="点我啊",command=show)
text.window_create(INSERT,window=b1) mainloop()
3)指定位置改变字体颜色
from tkinter import * root = Tk() text = Text(root,width=,height=)
text.pack() text.insert(INSERT,"I love FishC.com!") text.tag_add("tag1","1.7","1.12","1.14")
text.tag_config("tag1",background="yellow",foreground="red") mainloop()

4)颜色覆盖,后者覆盖前者
from tkinter import * root = Tk() text = Text(root,width=,height=)
text.pack() text.insert(INSERT,"I love FishC.com!") text.tag_add("tag1","1.7","1.12","1.14")
text.tag_add("tag2","1.1","1.9","1.14")
text.tag_config("tag1",background="yellow",foreground="red")
text.tag_config("tag2",foreground="blue") mainloop()

5)绑定事件,超链接
from tkinter import *
import webbrowser root = Tk() text = Text(root,width=,height=)
text.pack() text.insert(INSERT,"I love FishC.com!") text.tag_add("link","1.7","1.16")
text.tag_config("link",foreground="blue",underline=True) def show_arrow_cursor(event):
text.config(cursor="arrow")
def show_xterm_curror(event):
text.config(cursor="xterm")
def click(event):
webbrowser.open("http://www.baidu.com")
text.tag_bind("link","<Enter>",show_arrow_cursor)
text.tag_bind("link","<Leave>",show_xterm_curror)
text.tag_bind("link","<Button-1>",click)
mainloop()

6)检查文本是否发生了变动
from tkinter import *
import hashlib root = Tk() text = Text(root,width=,height=)
text.pack() text.insert(INSERT,"I love FishC.com!")
contents = text.get("1.0",END) def getSig(contents):
m = hashlib.md5(contents.encode())
return m.digest()
sig = getSig(contents) def check():
contents = text.get("1.0", END)
if sig != getSig(contents):
print("警报:内容发生变动")
else:
print("风平浪静") Button(root,text="检查",command=check).pack() mainloop()

7)对文本进行全局收索
from tkinter import *
import hashlib root = Tk() text = Text(root,width=,height=)
text.pack() text.insert(INSERT,"I love FishC.com!") def getIndex(start,index):
return tuple(map(int,str.split(text.index(index),"."))) start = "1.0"
while True:
pos = text.search("o",start,stopindex=END)
if not pos:
break
print("找到啦,位置是:",getIndex(text,pos))
start = pos + "+1c" mainloop()

8)撤销操作,自动插入分隔符
from tkinter import * root = Tk() text = Text(root,width=,height=,undo=True)
text.pack() text.insert(INSERT,"I love FishC.com!") def show():
text.edit_undo() Button(root,text="撤销",command=show).pack() mainloop()

9)撤销,一个字符一个字符的删除
from tkinter import * root = Tk() text = Text(root,width=,height=,undo=True,autoseparators=False) # autoseparators 去销自动插入分隔符
text.pack() text.insert(INSERT,"I love FishC.com!") def callback(event): # 绑定事件需要加参数
text.edit_separator() # 人为的插入分割符 text.bind('<Key>',callback) def show():
text.edit_undo() Button(root,text="撤销",command=show).pack() mainloop()
原文链接:http://bbs.fishc.com/thread-59443-1-1.html
GUI的最终选择Tkinter模块初级篇的更多相关文章
- GUI的最终选择Tkinter模块练习篇
一.Canvas画布练习 1)简单的绘制图框 from tkinter import * # 构建一个窗口 tk = Tk() # 画布 canvas= Canvas(tk,width=,height ...
- Python之GUI的最终选择(Tkinter)
首先,Tkinter是Python默认的GUI库,想IDLE就是用Tkinter设计出来的,因此直接导入Tkinter模块就可以啦 1 import tkinter (1)Tkinter初体验: 1 ...
- GUI的最终选择 Tkinter(一):Tkinter最初体验
EasyGui就是一个简单的文字交互界面模块,从今天开始来开始学习Tkinter Tkinter是Python标准的Gui库,它实际是建立在Tk技术上的,Tk最初是为Tcl(一门工具名语言)所涉及的, ...
- GUI的最终选择 Tkinter(五):Text用法
Text组件 绘制单行文本使用Label组件,多行选使用Listbox,输入框使用Entry,按钮使用Button组件,还有Radiobutton和Checkbutton组件用于提供单选或多选的情况, ...
- GUI的最终选择 Tkinter(四):Entry、Listbox、Scrollbar和Scale组件
Entry组件 Entry组件就是平时所说的输入框.输入框是程序员用到的最多的一个程序,例如在输入账号和密码的时候需要提供两个输入框,用于接收密码的输入框还会有星号将实际输入的内容隐藏起来. Tkin ...
- GUI的最终选择 Tkinter(九):事件
Tkinter事件处理 Tkinter应用会花费大部分的时间在处理事件循环中(通过mainloop()方法进入),事件可以是触发的鼠标,键盘的操作,管理窗口触发的重绘事件(在多数情况下都是有用户间接引 ...
- GUI的最终选择 Tkinter(七):菜单Menu组件、Menubutton组件、OptionMenu组件
Menu组件 今天说的Menu组件就是一些菜单组件,开始点点点... Tkinter提供了一个Menu组件,可以实现顶级菜单,下拉菜单和弹出菜单.由于底层是代码实现和优化的,所以不太建议通过按钮和其他 ...
- GUI的最终选择 Tkinter(三):Checkbutton组件和Radiobutton组件、LabelFrame组件
Checkbutton组件 Checkbutton组件就是常见的多选按钮,而Radiobutton则是单选按钮 from tkinter import * root = Tk() v = IntVar ...
- GUI的最终选择 Tkinter(二):Label和Button组件
Label组件 Lable组件是用于界面上输出描述的标签,例如提示用户“您下载的电影含有未成年人限制内容,请满18岁以后点击观看!”,先来上结果图: 在来看下它的代码: from tkinter im ...
随机推荐
- NumPy 迭代数组
NumPy 迭代数组 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 接下来我们使用 arange() ...
- LibreOj 6279数列分块入门 3 练习了一下set
题目链接:https://loj.ac/problem/6279 推荐博客:https://blog.csdn.net/qq_36038511/article/details/79725027 这题区 ...
- linux之基本命令讲解
前言 [root@localhost python]# vim /root/.bashrc export PS1='\[\e[32;1m\][\u@\h \w \t]#\[\e[0m\] source ...
- OpenGL ES 2 for Android - A Quick Start Guide
英文原版,语法很简单,带书签,带实例,很好的书,从头到尾讲述OpenGL强烈推荐!~~~ 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com ...
- composer windows安装,使用新手入门
一.前期准备: 1.下载安装包,https://getcomposer.org/download/ 2.在php.ini文档中打开extension=php_openssl.dll 3.下载php_s ...
- HTML基础学习笔记(2)
HTML学习笔记(2) 1 head标签中的结构 编码结构:<meta charset="UTF-8"> charset---编码 ascll ansi Unicode ...
- Android开发之动态设置字体的样式和粗细
字体设置通常有两种形式: 1:在xml中直接设置 android:textStyle="bold" android:typeface="sans" 2:用jav ...
- oracle 单表导出导入
exp username/password@服务名 file=d:\daochu.dmp tables=(tableneme,...)
- DNA甲基化测序方法介绍
DNA甲基化测序方法介绍 甲基化 表观遗传学 DNA 甲基化是表观遗传学(Epigenetics)的重要组成部分,在维持正常细胞功能.遗传印记.胚胎发育以及人类肿瘤发生中起着重要作用,是目前新的研究热 ...
- Luogu 2059 [JLOI2013]卡牌游戏 - 概率DP
Solution 设状态 $F[i][j] $为 还剩余 $i$ 个人时, 第 $j$ 个人 的胜率. 边界: $F[1][1] = 1$(只剩下一个人了). 这样设置状态就能使 $i-1$ 个人的答 ...