tkinter官方文档学习笔记

文档地址:http://effbot.org/tkinterbook/


主界面
root = Tk()
root.mainloop()
框架
frame = Frame(root, width=100, height=100)
frame.pack()
按钮
button = Button(frame, text="te\nxt", justify="left", wraplength="50", fg="red", font="宋体", command=func)
button.pack(side=LEFT)
fg - 前景色
bg - 背景色
可用颜色:
Red, Green, Blue, Yellow, and LightBlue 等,还可接受 #ffff00 输入
font 指定字体,可同时指定大小,加粗,斜体
font = "Helvetica 10 bold italic"
font = ("Courier New", 10, "bold italic") 注意:如果字体名称中有空格,必须采用tuple形式
可以在text属性的字符串中加入'\n'来换行
justify 用来设置文本的对齐方式,可用值为 left,right,center,默认为center
wraplength  用来设置文本的自动换行宽度,宽度单位为像素
bd 设置边框宽度,宽度单位为像素
relief 设置浮雕效果,可用值:flat, groove, raised, ridge, solid, or sunken
.bind("<Button-1>", callback)  给组件绑定事件响应函数
.focus_set()  将焦点设置在组件上。对于键盘按键事件,需要先设置焦点在组件上
"<Button-1>"  鼠标左键点击
callback(event)  
event.x, event.y  鼠标点击x,y坐标
event.char  按键码


事件描述字符串 <modifier-type-detail>
type - 是事件描述中最重要的部分,比如Button, Key, Enter, Configure等
如果仅仅为了匹配一个特定的按键,可以省略两边的尖括号,直接输入按键
常用事件:
<Button-1> 鼠标点击事件,1-左键 2-中键 3-右键
<B1-Motion> 鼠标按下后移动,1-左键 2-中键 3-右键
<ButtonRelease-1>  鼠标抬起,1-左键 2-中键 3-右键
<Double-Button-1>  鼠标双击,1-左键 2-中键 3-右键
<Enter>  鼠标进入组件范围
<Leave>  鼠标离开组件范围
<FocusIn>  焦点聚焦到组件范围
<FocusOut>  焦点离开组件范围
<Return> 按回车键
<Shift_L>  左shift键
Cancel (the Break key)
BackSpace
Tab
Control_L
Alt_L
Pause, Caps_Lock, Escape, Prior (Page Up), Next (Page Down), End, Home, Left, Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Num_Lock, and Scroll_Lock
<Key> 按下任意键盘键,event.char 返回按下的键。特殊按键返回空字符串
<space>  按下空格
<less>  左括号
<Shift-Up>  按住shift同时按上键,附加按键有Alt, Shift, and Control
<Configure>  改变组件大小 event.width event.height 返回新的大小 


bind的绑定层级
bind 绑定组件实例
bind 绑定顶级组件root
bind_class 绑定组件类
bind_all  绑定所有组件


绑定事件,后绑定覆盖先绑定
text.bind("<Return>", lambda e: "break")  屏蔽某text的回车事件
top.bind_class("Text", "<Return>", lambda e: None)  屏蔽所有Text的回车事件
官方不建议这样修改,会影响程序的拓展性,更好的解决方案是使用自定义的类
class MyText(Text):
    def __init__(self, master, **kw):
        apply(Text.__init__, (self, master), kw)
        self.bind("<Return>", lambda e: "break")


除了绑定事件外,还有协议事件。以下例子为关闭窗口时弹出是否关闭的确认框
from tkinter import *
from tkinter import messagebox


def callback():
    if messagebox.askokcancel("Quit", "Do you really wish to quit?"):
        root.destroy()


root = Tk()
root.protocol("WM_DELETE_WINDOW", callback)


root.mainloop()


创建两个窗口,Toplevel不能使用pack等布局方法
root = Tk()
top = Toplevel()
root.mainloop()


创建菜单实例
from tkinter import *


def callback():
    print "called the callback!"


root = Tk()


# create a menu
menu = Menu(root)
root.config(menu=menu)


filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New", command=callback)
filemenu.add_command(label="Open...", command=callback)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=callback)


helpmenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpmenu)
helpmenu.add_command(label="About...", command=callback)


mainloop()


使用Frame做为工具栏,如果需要使用图标,使用PhotoImage载入图片,使用image属性指定图片
root = Tk()
toolbar = Frame(root)
b = Button(toolbar, text='new', width=6, command=callback)
b.pack(side=LEFT, padx=2,pady=2)
b = Button(toolbar, text='open', width=6, command=callback)
b.pack(side=LEFT, padx=2,pady=2)
# fill=X 为填满整个宽度
toolbar.pack(side=TOP, fill=X)
root.mainloop()


root.geometry("600x480") 设置主界面大小


状态栏
status = Label(root, text="状态栏", bd=1, relief=SUNKEN, anchor=W)
status.pack(side=BOTTOM, fill= X)


消息框,可用选项为showinfo, showwarning, showerror, askquestion, askokcancel, askyesno, or askretrycancel
if tkMessageBox.askyesno("Print", "Print this report?"):
        report.print()


一个dialog的实例
class Dialog(Toplevel):
    def __init__(self, parent, title = None):
        Toplevel.__init__(self, parent)
        self.transient(parent)
        if title:
            self.title(title)
        self.parent = parent
        self.result = None
        body = Frame(self)
        self.initial_focus = self.body(body)
        body.pack(padx=5, pady=5)
        self.buttonbox()
        self.grab_set()
        if not self.initial_focus:
            self.initial_focus = self
        self.protocol("WM_DELETE_WINDOW", self.cancel)
        self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
                                  parent.winfo_rooty()+50))
        self.initial_focus.focus_set()
        self.wait_window(self)
    #
    # construction hooks
    def body(self, master):
        # create dialog body.  return widget that should have
        # initial focus.  this method should be overridden
        pass


    def buttonbox(self):
        # add standard button box. override if you don't want the
        # standard buttons
        box = Frame(self)
        w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)
        w.pack(side=LEFT, padx=5, pady=5)
        w = Button(box, text="Cancel", width=10, command=self.cancel)
        w.pack(side=LEFT, padx=5, pady=5)
        self.bind("<Return>", self.ok)
        self.bind("<Escape>", self.cancel)
        box.pack()
    #
    # standard button semantics
    def ok(self, event=None):
        if not self.validate():
            self.initial_focus.focus_set() # put focus back
            return
        self.withdraw()
        self.update_idletasks()
        self.apply()
        self.cancel()


    def cancel(self, event=None):
        # put focus back to the parent window
        self.parent.focus_set()
        self.destroy()
    #
    # command hooks
    def validate(self):
        return 1 # override


    def apply(self):
        pass # override




class MyDialog(Dialog):
    def body(self, master):
        Label(master, text="First:").grid(row=0)
        Label(master, text="Second").grid(row=1)
        self.e1 = Entry(master)
        self.e2 = Entry(master)
        self.e1.grid(row=0, column=1)
        self.e2.grid(row=1, column=1)
        return self.e1
    def apply(self):
        first = int(self.e1.get())
        second = int(self.e2.get())
        print(first,second)


root = Tk()
MyDialog(root)
root.mainloop()


pack 可用属性
padx, pady 水平,垂直方向间隔
side 放置方向,LEFT TOP RIGHT BOTTOM
fill 延展方向 X-铺满


grid 可用属性
row, column 行列位置
sticky  对齐方向 W E N S 



  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值