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 ...
随机推荐
- json 相关知识
一:json标准格式: 标准JSON的合法符号:{(左大括号) }(右大括号) "(双引号) :(冒号) ,(逗号) [(左中括号) ](右中括号) JSON字符串:特殊字符可在 ...
- CSS3实现图片循环旋转
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Delphi: TMethod转普通方法为对象方法
回看旧时代码,以往清楚之记忆渐渐模糊,事隔多年,遗忘正在发生. TMethod方法,当初熟练再看已陌生,再做复习以作备忘. 简言之,它做为一相桥接,将普通事件或方法转换为类方法,其多用于事件动态设置中 ...
- c#调用dll接口传递utf-8字串方法
1. 起源: VCU10之视频下载模块,采用纯python编码实现,c++代码调用pythonrun.h配置python运行环境启动python模块,编译为dll给c#调用,以使界面UI能够使用其中功 ...
- Windows如何安装Android SDK
我们都知道App测试分为Android和IOS两种客户端,当我们测试Android版本的App的时候经常要安装Android环境,那么安装Android SDK 就是必不可少的,接下来我们就来看看如何 ...
- swift - 闭包 -定义和使用
方法一: 1.定义 typealias OpenOrderSuccessResultBlock = ( _ dataArray:[String])->Void 2.类方法实现属性 var bac ...
- jq里面关于disable的用法
//两种方法设置disabled属性$('#areaSelect').attr("disabled",true);$('#areaSelect').attr("disab ...
- Service里边启动Activity注意事项
Intent intentv = new Intent(Intent.ACTION_VIEW); intentv.setData(uri); intentv.putExtra("keepTi ...
- 一行代码轻松搞定各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题? 百度源代码如下: <!Doctype html& ...
- input,textarea在ios和Android上阴影和边框的处理方法(在移动端)
1.去掉ios上阴影的方法只需要在css文件上添加input,textarea{-webkit-appearance: none;}就可以了 2.在移动端上input和textarea边框问题,也是在 ...