好记性不如铅笔头

python && jython, 编程

Python绘制框架tkinter简单学习笔记

CONTENTS

介绍

tkinter是python默认的UI开发框架,它是基于tcl/tk命令框架实现的。因此tkinter的文档也要参考tcl/tk使用文档【http://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm】。简单起见,这里只笔记最简单的使用方式。

作者当前的环境的python3.5.2。

最简单代码如下图:

Label控件

label控件来源于tcl/tk的label命令,关于label的各种属性配置,可以参考【 http://www.tcl.tk/man/tcl8.6/TkCmd/label.htm 】。最简单代码如下:

from tkinter import * ;
root = Tk();
label = Label(root, text="This Is Label");
label.pack(fill=BOTH);
root.mainloop();

其他UI控件就不笔记了,使用时再笔记吧。

事件响应

先贴一份最简单代码:

from tkinter import * ;

def OnShowWinSize(event):
    label["text"] = root.geometry();

root = Tk();
root.title("This Is Title");
root.geometry("400x300");
label = Label(root, text="This Is Label");
label.pack(fill=BOTH);
root.resizable(width=True, height=True);
root.bind("<Configure>", OnShowWinSize);
root.mainloop();

可以看到,事件响应是通过bind命令来实现的,bind的详细介绍请参考【http://www.tcl.tk/man/tcl8.6/TkCmd/bind.htm】。运行如下图:

控件放置方式

pack

pack函数来源于【http://www.tcl.tk/man/tcl8.6/TkCmd/pack.htm】是tkinter各种学习笔记中使用最多的方法。Pack默认是按顺序竖向排列的:

from tkinter import * ;
root = Tk();

label1 = Label(root, text="Label1");
label1.pack();

label2 = Label(root, text="Label2");
label2.pack();

label3 = Label(root, text="Label3");
label3.pack();

print("The Slaves Of Root:");
print(root.slaves());
print("The Info Of Label3:");
print(label3.info());

root.mainloop();

输出如下:

place

place函数来源于【http://www.tcl.tk/man/tcl8.6/TkCmd/place.htm】,是一种绝对位置放置方法

from tkinter import * ;
root = Tk();
root.geometry("500x300");
label1 = Label(root, text="Label1");
label1.place(x=0, y=0);

label2 = Label(root, text="Label2");
label2.place(x=100, y=100, width=300);
label2.info


label3 = Label(root, text="Label3");
label3.place(x=300, y=200);

print("The Slaves Of Root:");
print(root.place_slaves());
print("The Info Of label2:");
print(label2.place_info());

root.mainloop();

输出如下:

grid

grid函数来源于【 http://www.tcl.tk/man/tcl8.6/TkCmd/grid.htm 】,是一种表格位置方法

from tkinter import * ;
root = Tk();

label1 = Label(root, text="Label1");
label1.grid(row=0, column=0);

label2 = Label(root, text="Label2");
label2.grid(row=3, column=1);

label3 = Label(root, text="Label3");
label3.grid(row=4, column=6);

print("The Slaves Of Root:");
print(root.grid_slaves());
print("The Info Of Label3:");
print(label3.grid_info());

root.grid_columnconfigure("all", minsize=100);
root.grid_rowconfigure("all", minsize=100);

x,y = root.grid_location(300, 120);
print("x:%d y:%d"%(x,y));

maxX,maxY = root.grid_size();
print("maxX:%d maxY:%d"%(maxX,maxY));

root.mainloop();

输出如下图:

发表评论

1 × 2 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据