Python与Tkinter编程
⑴ python怎么安装tkinter
tkinter是python自带的,无需安装
Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口。作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多直观的功能,比如想开发一个计算器,如果只是一个程序输入,输出窗口的话,是没用用户体验的。所有开发一个图像化的小窗口,就是必要的。
对于稍有GUI编程经验的人来说,Python的Tkinter界面库是非常简单的。python的GUI库非常多,选择Tkinter,一是最为简单,二是自带库,不需下载安装,随时使用,三则是从需求出发,Python作为一种脚本语言,一种胶水语言,一般不会用它来开发复杂的桌面应用,它并不具备这方面的优势,使用Python,可以把它作为一个灵活的工具,而不是作为主要开发语言,那么在工作中,需要制作一个小工具,肯定是需要有界面的,不仅自己用,也能分享别人使用,在这种需求下,Tkinter是足够胜任的!
⑵ Python 中用 Tkinter GUI编程
可以使用sqlite,下面是使用方法。
导入PythonSQLITE数据库模块
Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~
importsqlite3
2.创建/打开数据库
在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。
cx=sqlite3.connect("E:/test.db")
也可以创建数据库在内存中。
con=sqlite3.connect(":memory:")
3.数据库连接对象
打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:
commit()--事务提交
rollback()--事务回滚
close()--关闭一个数据库连接
cursor()--创建一个游标
关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。
4.使用游标查询数据库
我们需要使用游标对象SQL语句查询数据库,获得查询对象。通过以下方法来定义一个游标。
cu=cx.cursor()
游标对象有以下的操作:
execute()--执行sql语句
executemany--执行多条sql语句
close()--关闭游标
fetchone()--从结果中取一条记录,并将游标指向下一条记录
fetchmany()--从结果中取多条记录
fetchall()--从结果中取出所有记录
scroll()--游标滚动
1.建表
cu.execute("createtablecatalog(idintegerprimarykey,pidinteger,namevarchar(10)UNIQUE,nicknametextNULL)")
上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以及一个nickname默认为NULL。
2.插入数据
请注意避免以下写法:
#Neverdothis--insecure会导致注入攻击
pid=200
c.execute("...wherepid='%s'"%pid)
正确的做法如下,如果t只是单个数值,也要采用t=(n,)的形式,因为元组是不可变的。
fortin[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
cx.execute("insertintocatalogvalues(?,?,?,?)",t)
简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.
cx.commit()
3.查询
cu.execute("select*fromcatalog")
要提取查询到的数据,使用游标的fetch函数,如:
In[10]:cu.fetchall()
Out[10]:[(0,10,u'abc',u'Yu'),(1,20,u'cba',u'Xu')]
如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.
4.修改
In[12]:cu.execute("updatecatalogsetname='Boy'whereid=0")
In[13]:cx.commit()
注意,修改数据以后提交
5.删除
cu.execute("deletefromcatalogwhereid=1")
cx.commit()
6.使用中文
请先确定你的IDE或者系统默认编码是utf-8,并且在中文前加上u
x=u'鱼'
cu.execute("updatecatalogsetname=?whereid=0",x)
cu.execute("select*fromcatalog")
cu.fetchall()
[(0,10,u'u9c7c',u'Yu'),(1,20,u'cba',u'Xu')]
如果要显示出中文字体,那需要依次打印出每个字符串
In[26]:foritemincu.fetchall():
....:forelementinitem:
....:printelement,
....:
010鱼Yu
120cbaXu
7.Row类型
Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有内存开销。原文如下:
sqlite3.Rowprovidesbothindex-basedandcase-insensitivename-.-basedapproachorevenadb_rowbasedsolution.
Row对象的详细介绍
classsqlite3.Row
_factoryforConnectionobjects..
,iteration,representation,equalitytestingandlen().
,theycompareequal.
Changedinversion2.6:Addediterationandequality(hashability).
keys()
.Immediatelyafteraquery,.description.
Newinversion2.6.
下面举例说明
In[30]:cx.row_factory=sqlite3.Row
In[31]:c=cx.cursor()
In[32]:c.execute('select*fromcatalog')
Out[32]:<sqlite3.Cursorobjectat0x05666680>
In[33]:r=c.fetchone()
In[34]:type(r)
Out[34]:<type'sqlite3.Row'>
In[35]:r
Out[35]:<sqlite3.Rowobjectat0x05348980>
In[36]:printr
(0,10,u'u9c7c',u'Yu')
In[37]:len(r)
Out[37]:4
In[39]:r[2]#使用索引查询
Out[39]:u'u9c7c'
In[41]:r.keys()
Out[41]:['id','pid','name','nickname']
In[42]:foreinr:
....:printe,
....:
010鱼Yu
使用列的关键词查询
In[43]:r['id']
Out[43]:0
In[44]:r['name']
Out[44]:u'u9c7c'
⑶ Python编程的tkinter窗口编译成exe文件无法正确执行
最后一行加括号,改成root.mainloop()
⑷ python Tkinter编程问题
可以用这个frame的winfo_width()方法获得实际宽度,winfo_height()可以获得高度,比如:
fr=Frame(tk)
fr.pack(side=TOP, fill=BOTH, expand=True)
print "frame size before update: ", fr.winfo_width(), fr.winfo_height()
fr.update()
print "frame size after update: ", fr.winfo_width(), fr.winfo_height()
⑸ python与tkinter编程哪个有优势
pyqt还不错,它是Python语言的GUI编程解决方案之一。可以用来代替Python内置的Tkinter。其它替代者还有PyGTK、wxPython等
优点:
PyQt的API与Qt类似,Qt的文档通常仍然可以应用于PyQt。因此,PyQt的文档比PyGTK、wxPython、Tkinter等GUI编程库的文档丰富得多。
如果程序员具备使用Qt的经验,一般很快就可以过渡到PyQt上。而使用PyQt的程序员,如果同时精通C++的话,也可以很快地过渡到Qt平台上。
利用SIP,大多数为Qt开发的控件可以方便地port到PyQt。——然而,SIP也需要一些学习成本。
有方便的周边工具支持PyQt。如QtDesigner,可以使用拖拉式的方法来设计界面,简单易用。Eric4,一个使用PyQt设计的Python IDE,对PyQt有特殊的支持。
⑹ PYTHON tkinter编程,请懂的人帮忙:
界面设计有一个基本原则,同样适用于tkinter,也就是说界面是单线程的。所以界面的所有事件,如果特别是耗时,不能几毫秒解决。就需要交给后台线程去做。后台线程做完了后就将结果放在一个变量里,再通常消息通知界面刷新。这样界面就不会卡住了。
doevents的原理是。强制停下当前线程,然后处处理一下窗口消息队列里的事件。不过有时候这个方法并不灵,也会出现界面卡死。
所以你绑定了事件,然后触发成功,也执行了。不过你执行的这段代码一直在循环运行,没有很快退出,这样界面当然就没有办法刷新了。
你可以启动一个线程去做你的那件事情。
⑺ python图形化界面设计tkinter
python提供了多个图形开发界面的库,几个常用Python GUI库如下:
Tkinter:Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.,Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界面。
Jython:Jython程序可以和java无缝集成。除了一些标准模块,Jython使用Java的模块。Jython几乎拥有标准的Python中不依赖于C语言的全部模块。比如,Jython的用户界面将使用Swing,AWT或者SWT。Jython可以被动态或静态地编译成Java字节码。
1、导入Tkinter模块
2、创建控件
3、指定这个控件的master, 即这个控件属于哪一个
4、告诉GM(geometry manager)有一个控件产生了。
- 1 #!/usr/bin/python2 # -*- coding: UTF-8 -*-3 4 import Tkinter5 top = Tkinter.Tk()6 # 进入消息循环7 top.mainloop()
Tkinter 编程
Tkinter 是Python的标准GUI库。Python使用Tkinter可以快速的创建GUI应用程序。
由于Tkinter是内置到python的安装包中、只要安装好Python之后就能import Tkinter库、而且IDLE也是用Tkinter编写而成、对于简单的图形界面Tkinter还是能应付自如。
创建一个GUI程序
实例:
Tkinter 组件
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。
目前有15种Tkinter的部件。我们提出这些部件以及一个简短的介绍,在下面的表:
控件
描述
Button 按钮控件;在程序中显示按钮。
Canvas 画布控件;显示图形元素如线条或文本
Checkbutton 多选框控件;用于在程序中提供多项选择框
Entry 输入控件;用于显示简单的文本内容
Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label 标签控件;可以显示文本和位图
Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串行表给用户
Menubutton 菜单按钮控件,由于显示菜单项。
Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message 消息控件;用来显示多行文本,与label比较类似
Radiobutton 单选按钮控件;显示一个单选的按钮状态
Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text 文本控件;用于显示多行文本
Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox 输入控件;与Entry类似,但是可以指定输入范围值
PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox 用于显示你应用程序的消息框。
标准属性
标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。
属性 描述
Dimension 控件大小;
Color 控件颜色;
Font 控件字体;
Anchor 锚点;
Relief 控件样式;
Bitmap 位图;
Cursor 光标;
几何管理
Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,一下是Tkinter公开的几何管理类:包、网格、位置
几何方法 描述
pack() 包装;
grid() 网格
place() 位置
⑻ Python2.X Tkinter编程
package Sort;
import java.util.Arrays;
import java.util.Random;
public class MergeSort {
public void sort(int array[]){
if(array.length== 0 ||array.length == 1)
return;
int mid = array.length/2;
int a[] = Arrays.OfRange(array, 0, mid);
int b[] = Arrays.OfRange(array, mid, array.length);
⑼ Python编程关于tkinter图形用户界面编程的问题求助(新手求助!)
你好,下面是一个例子,你可以试试:
from tkinter import *
#import tkinter
import tkinter.messagebox as tm
import sys
#from Tkinter import *
#from tkMessageBox import *
def answer():
showerror("Answer", "Sorry, no answer available")
def callback():
if tm.askyesnocancel('Verify', 'Really quit?'):
print('Yes quit')
sys.exit(1)
else:
print('No')
Button(text='Quit', command=callback).pack(fill=X)
#Button(text='Answer', command=answer).pack(fill=X)
mainloop()