隔壁是我的一个项目实例,对一下用法有实际使用:python 快速实践之:tkinker openpyxl点击打开链接
python作为脚本语言可以快速实现很多功能,不过有时候也希望能够有个比较简单的交互环境,用控制台方式的交互过于简陋,交互性也不能满足需要,因此抽时间自学了下简单的tkinker。
Tkinker是python自带的GUI库,目前只有非常简单的几个控件可以使用,大概试了下,效果图如下:
还有些别的没有去做demo,比如画布一类的,具体的可以参考菜鸟学院的介绍:http://www.runoob.com/python/python-gui-tkinter.html
复杂的如:comboBox/Grid/tableWidget等目前还没有。
由于之前用过C++的Qt和MFC以及C#相关的界面编程,这块的操作接受起来还是比较简单的。只需要注意一下几个点就可以入门:
1. 控件的初始化需要制定其ROOT,初始化之后需要将其挂上去,使用pack方法(控件嵌套在哪个root或者frame下就直接制定即可),
如:
tt = Text(frmB) #frmB为一个frame
tt.insert(END, 'hello123\n')
tt.pack()
2. 窗口的布局依赖于frame控件:frame类似Qt的layout,是一个能挂控件的区域。
注意的是:
(1.)一旦使用了frame,所有的控件都需要挂在frame下,如果只有一个控件,则可以直接挂在root下面。
(2.) frame可以嵌套,主frame需要挂在root下。
(3.) frame也需要pack才能显示出来
如:
frm1 = Frame(root)
frmU = Frame(frm1)
frmB = Frame(frm1)
frmU.pack()
frmB.pack()
frm1.pack()
3.窗口建立需要自己的事件循环,直接给root打卡mainLoop即可:
如:
root.mainloop()
4. 控件的方法绑定:需要写一个独立方法,然后在控件初始化的时候把方法绑定到控件上:
def btnClicked():
tt.insert(END, varList1.get())
btn1 = Button(frmB, text = '---OK---', fg = 'green', bg = 'red', command = btnClicked)# command link Cant contain ()
5. 控件的其他属性:
控件的各个属性都可以通过初始化挂上去,这里给大家推荐一个blog可以直接去查:
http://blog.csdn.net/yingshukun/article/details/78705337
附上我的demo代码:
#import tkinter
from tkinter import *
root = Tk()
li = ['a', 'b', 'c']
movie = ['abc', 'ecd']
frm1 = Frame(root)
frmU = Frame(frm1)
frmB = Frame(frm1)
varList1 = StringVar()
listb = Listbox(frmU, listvariable = varList1)
listb2 = Listbox(frmU)
for item in li:
listb.insert(0, item)
for item in movie:
listb2.insert(0, item)
def print_item(event):
print(listb2.get(listb2.curselection()))
listb2.bind('', print_item)
listb.pack(side = LEFT)
listb2.pack(side = RIGHT)
frmU.pack()
var = StringVar()
lb = Entry(frmB, textvariable = var)
var.set("hello")
lb.pack(side = LEFT)
tt = Text(frmB)
tt.insert(1.0, 'hello\n')
tt.insert(END, 'hello123\n')
tt.insert(END, 'nono\n')
tt.pack()
def btnClicked():
tt.insert(END, varList1.get())
btn1 = Button(frmB, text = '---OK---', fg = 'green', bg = 'red', command = btnClicked)# command link Cant contain ()
btn1.pack(side = RIGHT)
frmB.pack()
frm1.pack()
root.mainloop()
掌握了以上内容,基本上就可以设计出比较好用的小工具了,但是如果希望设计比较复杂的界面结构,用tkinker还是比较勉强。