pyhon之Tkinter实例化学习
来源:互联网 发布:轩辕剑祥云进阶数据 编辑:程序博客网 时间:2024/04/29 07:33
Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口,位Python的内置模块,直接import tkinter即可使用。
作为实践, 用Tkinter做了个ascii码转化查询表
1. 产品介绍
界面
功能
- 通过输入字符或数字查询对应的信息
- 通过选择列表中的信息查询对应的信息
2. 设计规划
规划图
3. 相关知识
首先看怎么产生第一个窗口
from Tkinter import * #引用Tk模块root = Tk() #初始化Tk()root.mainloop() #进入消息循环
几个常用属性
- title: 设置窗口标题
- geometry: 设置窗口大小
- resizable():设置窗口是否可以变化长 宽
# -*- coding: cp936 -*-from Tkinter import *root = Tk()root.title("hello world")root.geometry('200x100') #是x 不是*root.resizable(width=False, height=True) #宽不可变, 高可变,默认为Trueroot.mainloop()
介绍以下几个控件的用法
- Label
- Frame
- Entry
- Text
- Button
- Listbox
- Scrollbar
说明每个控件最后要加上pack().否则控件是无法显示的.
3.1 Label
说明
标签
用法
Label(根对象, [属性列表])
属性
- text 要现实的文本
- bg 背景颜色
- font 字体(颜色, 大小)
- width 控件宽度
- height 控件高度
以下介绍的控件差不多都有这几个属性, 更详细的属性查看参考网页
举例
# -*- coding: cp936 -*-from Tkinter import *root = Tk()root.title("hello world")root.geometry('300x200')l = Label(root, text="show", bg="green", font=("Arial", 12), width=5, height=2)l.pack(side=LEFT) #这里的side可以赋值为LEFT RTGHT TOP BOTTOMroot.mainloop()
效果
3.2 Frame
说明
在屏幕上创建一块矩形区域,多作为容器来布局窗体
用法
Frame(根对象, [属性列表])
举例
要在控件中出现这样的四个词语
校训
厚德 敬业
博学 乐群
可以规划为
# -*- coding: cp936 -*-from Tkinter import *root = Tk()root.title("hello world")root.geometry('300x200')Label(root, text='校训'.decode('gbk').encode('utf8'), font=('Arial', 20)).pack()frm = Frame(root)#leftfrm_L = Frame(frm)Label(frm_L, text='厚德'.decode('gbk').encode('utf8'), font=('Arial', 15)).pack(side=TOP)Label(frm_L, text='博学'.decode('gbk').encode('utf8'), font=('Arial', 15)).pack(side=TOP)frm_L.pack(side=LEFT)#rightfrm_R = Frame(frm)Label(frm_R, text='敬业'.decode('gbk').encode('utf8'), font=('Arial', 15)).pack(side=TOP)Label(frm_R, text='乐群'.decode('gbk').encode('utf8'), font=('Arial', 15)).pack(side=TOP)frm_R.pack(side=RIGHT)frm.pack()root.mainloop()
效果
3.3 Entry
说明
创建单行文本框
用法
- 创建:lb =Entry(根对象, [属性列表])
- 绑定变量 var=StringVar() lb=Entry(根对象, textvariable = var)
- 获取文本框中的值 var.get()
- 设置文本框中的值 var.set(item1)
举例
# -*- coding: cp936 -*-from Tkinter import *root = Tk()root.title("hello world")root.geometry()var = StringVar()e = Entry(root, textvariable = var)var.set("hello")e.pack() root.mainloop()
效果
3.4 Text
说明
向该空间内输入文本
用法
t = Text(根对象)
插入:t.insert(mark, 内容)
删除:t.delete(mark1, mark2)
其中,mark可以是行号,或者特殊标识,例如
- INSERT:光标的插入点CURRENT:鼠标的当前位置所对应的字符位置
- END:这个Textbuffer的最后一个字符
- SEL_FIRST:选中文本域的第一个字符,如果没有选中区域则会引发异常
- SEL_LAST:选中文本域的最后一个字符,如果没有选中区域则会引发 异常
举例
# -*- coding: cp936 -*-from Tkinter import *root = Tk()root.title("hello world")root.geometry('300x200')t = Text(root)t.insert(1.0, 'hello\n')t.insert(END, 'hello000000\n')t.insert(END, 'nono')t.pack()root.mainloop()
效果
3.5 Button
说明
创建按钮
用法
Button(根对象, [属性列表])
举例
# -*- coding: cp936 -*-from Tkinter import *root = Tk()root.title("hello world")root.geometry()def printhello(): t.insert('1.0', "hello\n") t = Text()t.pack()Button(root, text="press", command = printhello).pack()root.mainloop()
效果
3.6 Listbox
说明
列表控件,可以含有一个或多个文本想,可单选也可多选
用法
- 创建:lb = ListBox(根对象, [属性列表])
- 绑定变量 var=StringVar() lb=ListBox(根对象, listvariable = var)
- 得到列表中的所有值 var.get()
- 设置列表中的所有值 var.set((item1, item2, .....))
- 添加:lb.insert(item)
- 删除:lb.delete(item,...)
- 绑定事件 lb.bind('<ButtonRelease-1>', 函数)
- 获得所选中的选项 lbl.get(lb.curselection())
属性
selectmode可以为BROWSE MULTIPL SINGLE
举例
# -*- coding: cp936 -*-from Tkinter import *root = Tk()root.title("hello world")root.geometry()def print_item(event): print lb.get(lb.curselection()) var = StringVar()lb = Listbox(root, listvariable = var)list_item = [1, 2, 3, 4] #控件的内容为1 2 3 4for item in list_item: lb.insert(END, item)lb.delete(2, 4) #此时控件的内容为1 3
var.set(('a', 'ab', 'c', 'd')) #重新设置了,这时控件的内容就编程var的内容了print var.get()lb.bind('<ButtonRelease-1>', print_item)lb.pack() root.mainloop()
效果
3.7 Scrollbar
说明
在屏幕上创建一块矩形区域,多作为容器来布局窗体
用法
Frame(根对象, [属性列表]), 最长用的用法是和别的控件一起使用.
举例
from Tkinter import *root = Tk()root.title("hello world")root.geometry()def print_item(event): print lb.get(lb.curselection()) var = StringVar()lb = Listbox(root, height=5, selectmode=BROWSE, listvariable = var)lb.bind('<ButtonRelease-1>', print_item)list_item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]for item in list_item: lb.insert(END, item) scrl = Scrollbar(root)scrl.pack(side=RIGHT, fill=Y)lb.configure(yscrollcommand = scrl.set)lb.pack(side=LEFT, fill=BOTH)scrl['command'] = lb.yviewroot.mainloop()
效果
4. 源码附件
代码
# -*- coding:cp936 -*-from Tkinter import *class show: num_info_hash = {} char_info_hash = {} num_char = {} char_num = {} def __init__(self): self.root = Tk() self.root.title("ASCII码查询".decode('gbk').encode('utf8')) #self.root.geometry('470x320') ######## self.frm = Frame(self.root) #Top Label(self.root, text="ASCII码查询".decode('gbk').encode('utf8'), font=('Arial', 15)).pack() self.load_sys() self.frm = Frame(self.root) #Left self.frm_L = Frame(self.frm) self.frm_LT = Frame(self.frm_L) self.var_char = StringVar() Entry(self.frm_LT, textvariable=self.var_char, width = 5, font =('Verdana',15)).pack(side=RIGHT) Label(self.frm_LT, text = '字符'.decode('gbk').encode('utf8'), font =('Arial',12)).pack(side=LEFT) self.frm_LT.pack() self.var_L_char = StringVar() self.lb_char = Listbox(self.frm_L, selectmode=BROWSE, listvariable=self.var_L_char, font =('Verdana',12), width=10, height=13) self.lb_char.bind('<ButtonRelease-1>', self.get_char) for key in self.char_num: self.lb_char.insert(END, key[0]) self.scrl_char = Scrollbar(self.frm_L) self.scrl_char.pack(side=RIGHT, fill=Y) self.lb_char.configure(yscrollcommand = self.scrl_char.set) self.lb_char.pack(side=LEFT, fill=BOTH) self.scrl_char['command'] = self.lb_char.yview self.frm_L.pack(side = LEFT) #Mid self.frm_M = Frame(self.frm) self.t_show = Text(self.frm_M, width=20, height=5, font =('Verdana',15)) self.t_show.insert('1.0', '') self.t_show.pack() self.frm_MB = Frame(self.frm_M) Button(self.frm_MB, text="清除".decode('gbk').encode('utf-8'), command=self.clear, width=6, height=1, font=('Arial', 10)).pack(side=LEFT) Button(self.frm_MB, text="查询".decode('gbk').encode('utf-8'), command=self.search, width=6, height=1, font=('Arial', 10)).pack(side=RIGHT) self.frm_MB.pack(side=BOTTOM) self.frm_M.pack(side=LEFT) #Right self.frm_R = Frame(self.frm) self.frm_RT = Frame(self.frm_R) self.var_int = StringVar() Entry(self.frm_RT, textvariable=self.var_int, width=5, font =('Verdana',15)).pack(side=LEFT) Label(self.frm_RT, text='十进制'.decode('gbk').encode('utf-8'), font =('Arial',12)).pack(side=RIGHT) self.frm_RT.pack() self.var_R_int = StringVar() self.lb_int = Listbox(self.frm_R, selectmode=BROWSE, listvariable=self.var_R_int, font =('Verdana',12), width=10, height=13) self.lb_int.bind('<ButtonRelease-1>', self.get_int,) for key in self.num_char: self.lb_int.insert(END, key[0]) self.scrl_int = Scrollbar(self.frm_R) self.scrl_int.pack(side=RIGHT, fill=Y) self.lb_int.configure(yscrollcommand = self.scrl_int.set) self.lb_int.pack(side=LEFT, fill=BOTH) self.scrl_int['command'] = self.lb_int.yview self.frm_R.pack(side = LEFT) self.frm.pack() ######## def get_char(self, event): self.var_char.set('') self.var_int.set('') tmp = self.lb_char.get(self.lb_char.curselection()) self.var_char.set(tmp) def get_int(self, event): self.var_int.set('') self.var_char.set('') tmp = self.lb_int.get(self.lb_int.curselection()) self.var_int.set(tmp) def clear(self): self.var_char.set('') self.var_int.set('') self.t_show.delete('1.0', '10.0') def search(self): self.t_show.delete('1.0', '100.0') tmp_char = self.var_char.get() tmp_int = self.var_int.get() if tmp_char != '': if not self.char_info_hash.has_key(tmp_char): self.t_show.insert('1.0', "您输入的字符不在128个字符之内".decode('gbk').encode('utf8')) else: self.t_show.insert('1.0', '十六进制:'.decode('gbk').encode('utf8') + '\t' + self.char_info_hash[tmp_char][2] + '\n') self.t_show.insert('1.0', '十进制:'.decode('gbk').encode('utf8') +'\t' + self.char_info_hash[tmp_char][1] + '\n') self.t_show.insert('1.0', '八进制:'.decode('gbk').encode('utf8') + '\t' + self.char_info_hash[tmp_char][0] + '\n') self.t_show.insert('1.0', '字符:'.decode('gbk').encode('utf8') +'\t' + tmp_char + '\n\n') self.var_char.set('') self.var_int.set('') elif tmp_int !='': if not self.num_info_hash.has_key(tmp_int): self.t_show.insert('1.0', "请输入介于0~127之间的整数".decode('gbk').encode('utf8')) else: self.t_show.insert('1.0', '字符:'.decode('gbk').encode('utf8') +'\t' + self.num_info_hash[tmp_int][2] + '\n') self.t_show.insert('1.0', '十六进制:'.decode('gbk').encode('utf8') + '\t' + self.num_info_hash[tmp_int][1] + '\n') self.t_show.insert('1.0', '八进制:'.decode('gbk').encode('utf8') + '\t' + self.num_info_hash[tmp_int][0] + '\n') self.t_show.insert('1.0', '十进制:'.decode('gbk').encode('utf8') + '\t' + tmp_int + '\n\n') self.var_char.set('') self.var_int.set('') else: self.t_show.insert('1.0', '请选择或输入'.decode('gbk').encode('utf8')) def load_sys(self): f = file('asc') for line in f: chunk = line.strip().split('\t') self.num_char[int(chunk[1])] = chunk[3] self.char_num[chunk[3]] = int(chunk[1]) self.num_info_hash[chunk[1]] = [chunk[0], chunk[2], chunk[3]] self.char_info_hash[chunk[3]] = [chunk[0], chunk[1], chunk[2]] self.num_char =sorted(self.num_char.iteritems(), key = lambda asd:asd[0]) self.char_num =sorted(self.char_num.iteritems(), key = lambda asd:asd[1])def main(): d = show() mainloop()if __name__== "__main__": main()
- pyhon之Tkinter实例化学习
- pyhon之Tkinter实例化学习
- pyhon之Tkinter实例化学习
- pyhon之Tkinter实例化学习------之----python3版
- 关于java实例化学习
- C++调用Pyhon实例
- C++ 构造函数与实例化学习!
- C++类及其实例化学习笔记
- pyhon学习之 (一)
- Pyhon变量赋值操作实例
- boost之序列化学习(一)
- Html5之数据持久化学习
- sql 2005 的实例化学习 sql2005 1
- sql 2005 的实例化学习 sql2005 2
- sql 2005 的实例化学习 sql2005 3
- tkinter listbox实例
- 【化学汇报】之别开生面
- Boost序列化学习之二——binary_oarchive追本溯源
- C++钩子技术,拦截带有某些关键字的窗体
- 液压机构的断路器故障分析及解决方案
- wdcp上nginx+apache双引擎大文件上传配置
- 递归无限极分类
- 【环境搭建】Windows下MySQL 5.7.X 压缩包方式安装
- pyhon之Tkinter实例化学习
- android获取系统相关信息代码测试
- 第 7 章 - 6 查找富文本字段的组件
- php 敏感词替换
- 成功学和伪成功学的区别
- 按键盘enter键触发提交啊钮
- ajax 设置Access-Control-Allow-Origin实现跨域访问
- Calendar类常用方法
- Atitit 边缘检测原理attilax总结