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) #宽不可变, 高可变,默认为True
root.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 BOTTOM
root.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)
#left
frm_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) #right
frm_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 4
for 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.yview root.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()

文本

00    0    00    nul
01 1 01 soh
02 2 02 stx
03 3 03 etx
04 4 04 eot
05 5 05 enq
06 6 06 ack
07 7 07 bel
10 8 08 bs
11 9 09 ht
12 10 0a nl
13 11 0b vt
14 12 0c ff
15 13 0d er
16 14 0e so
17 15 0f si
20 16 10 dle
21 17 11 dc1
22 18 12 dc2
23 19 13 dc3
24 20 14 dc4
25 21 15 nak
26 22 16 syn
27 23 17 etb
30 24 18 can
31 25 19 em
32 26 1a sub
33 27 1b esc
34 28 1c fs
35 29 1d gs
36 30 1e re
37 31 1f us
40 32 20 sp
41 33 21 !
42 34 22 "
43 35 23 #
44 36 24 $
45 37 25 %
46 38 26 &amp;
47 39 27 `
50 40 28 (
51 41 29 )
52 42 2a *
53 43 2b +
54 44 2c ,
55 45 2d -
56 46 2e .
57 47 2f /
60 48 30 0
61 49 31 1
62 50 32 2
63 51 33 3
64 52 34 4
65 53 35 5
66 54 36 6
67 55 37 7
70 56 38 8
71 57 39 9
72 58 3a :
73 59 3b ;
74 60 3c &lt;
75 61 3d =
76 62 3e &gt;
77 63 3f ?
100 64 40 @
101 65 41 A
102 66 42 B
103 67 43 C
104 68 44 D
105 69 45 E
106 70 46 F
107 71 47 G
110 72 48 H
111 73 49 I
112 74 4a J
113 75 4b K
114 76 4c L
115 77 4d M
116 78 4e N
117 79 4f O
120 80 50 P
121 81 51 Q
122 82 52 R
123 83 53 S
124 84 54 T
125 85 55 U
126 86 56 V
127 87 57 W
130 88 58 X
131 89 59 Y
132 90 5a Z
133 91 5b [
134 92 5c \
135 93 5d ]
136 94 5e ^
137 95 5f _
140 96 60 '
141 97 61 a
142 98 62 b
143 99 63 c
144 100 64 d
145 101 65 e
146 102 66 f
147 103 67 g
150 104 68 h
151 105 69 i
152 106 6a j
153 107 6b k
154 108 6c l
155 109 6d m
156 110 6e n
157 111 6f o
160 112 70 p
161 113 71 q
162 114 72 r
163 115 73 s
164 116 74 t
165 117 75 u
166 118 76 v
167 119 77 w
170 120 78 x
171 121 79 y
172 122 7a z
173 123 7b {
174 124 7c |
175 125 7d }
176 126 7e ~
177 127 7f del

参考资料

通用控件属性:http://my.oschina.net/TyLucifer/blog/112961

文件路径:http://blog.sina.com.cn/s/blog_76129c6f0101892q.html

pyhon之Tkinter实例化学习的更多相关文章

  1. [转]pyhon之Tkinter实例化学习

    本文转自:http://www.cnblogs.com/kaituorensheng/p/3287652.html 阅读目录 1. 产品介绍 2. 设计规划 3. 相关知识 4. 源码附件 Tkint ...

  2. python-GUI之tkinter的学习

    最近看了哔哩哔哩的python的学习,直接看代码吧,以后会更新 先来个基础的 import tkinter as tk #导入包 app = tk.Tk() #抽象出一个GUI app.title(& ...

  3. Python之Tkinter模块学习

    本文转载自:http://www.cnblogs.com/kaituorensheng/p/3287652.html Tkinter模块("Tk 接口")是Python的标准Tk ...

  4. 关不掉的小姐姐程序python tkinter实现 学习---打包教程

    首先,我们先准备两个.py文件,还要图片文件         代码//是我自己手写的,copy时记得删掉,不然有可能错误,比如中英文啥的    当然 一些语法的无问题就百度,都能给你答案 第一个.py ...

  5. Python Tkinter的学习

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...

  6. python tkinter组件学习

    http://blog.csdn.net/pfm685757/article/details/50162567

  7. Python入门 —— 03GUI界面编程

    GUI(Graphical User Interface) 即图形用户接口,又称图形用户接口. 是指采用图形方式显示的计算机操作用户界面.GUI 是屏幕产品的视觉体验和互动操作部分. "你的 ...

  8. Python:GUI之tkinter学习笔记1控件的介绍及使用

    相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Mes ...

  9. tkinter内嵌Matplotlib系列(一)之解读官网教材

    目录 目录 前言 (一)小目标 1.首页卷面: 2.绘制一条函数曲线: 3.绘制多条曲线: (二)官方教材 1.对GUI框架的支持: 2.内嵌于tkinter的说明文档: (三)对官方教程的解读 目录 ...

随机推荐

  1. sqlite3之基本操作(二)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...

  2. jquery重置html form

    很多时候在ajax提交或者对话框隐藏之后,我们希望重置默认值以便下次打开对话框时保持干净. 因为jquery选择器返回的是list,并且没有对此提供reset方法,所以需要针对单个元素进行reset. ...

  3. 媲美oracle awr/statspack的mysql awr第一版发布

    现发布alpha版mysql awr,其提供的特性类似于oracle awr或statspack+集中式监控.对于原来从事oracle dba或者相关运维的人原来说,这会是个不错的选择. 至于我为什么 ...

  4. DirectX 9 SDK安装后在vs2010里编译BaseClasses出错问题解决方法

    打开你的dx的sdk安装目录,例如: D:/DX90SDK/Samples/C++/DirectShow/ 这里就有一个叫baseclasses的工程,为安全起见,请先备份此工程. 1,双击basec ...

  5. SharePoint 2013 - REST API about Content

    1. 获取所有子站点信息(Sub Site): var subSitesInfo = "{0}/_api/Web/WebInfos?$orderby=Title desc"; // ...

  6. 实战3--应用EL表达式判断用户登录信息

    1.判断用户名是否为空,空则显示提示信息 (1)编写index.jsp页面 <%@ page language="java" contentType="text/h ...

  7. C语言原子接口与实现

    原子是一个指向唯一的.不可变的0个或任意多个字节序列的指针,大多数原子都是指向以空字符结束的字符串,但是任何一个指向任意字节序列的指针都可以使原子.任何原子只能出现一次.如果两个原子指向同一个内存单元 ...

  8. QA:java.lang.RuntimeException:java.io.FileNotFoundException:Resource nexus-maven-repository-index.properties does not exist.

    QA:java.lang.RuntimeException:java.io.FileNotFoundException:Resource nexus-maven-repository-index.pr ...

  9. mybatis3.3 + struts2.3.24 + mysql5.1.22开发环境搭建及相关说明

    一.新建Web工程,并在lib目录下添加jar包 主要jar包:struts2相关包,mybatis3.3相关包,mysql-connector-java-5.1.22-bin.jar, gson-2 ...

  10. 论近年来IT媒体的怪现象

    之前在Svbtle上看过一篇文章干掉这帮搞IT新闻的!,作者因为CNET曲解原意,称Instagram要单方面售卖用户自己照片的乌龙事件,致使内心遭受严重刺激,怒吼出「科技媒体记者都应该被枪毙」的言论 ...