tkinter学习02

 https://docs.python.org/3/library/tkinter.html#tkinter-moduleshtml

http://effbot.org/tkinterbook/python

小例子演示:app

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from tkinter import *   #导入 Tkinter 模块

root =Tk() #实例

label = Label(root, text='Hello world')
label.pack() # 将小部件放置到主窗口中
root.mainloop() # 进入消息循环

 

用类建立ide

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from tkinter import *

class App:
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        self.button = Button(frame, text='Exit Class', fg='blue', command=frame.quit)

        self.button.pack()

        self.hiButton = Button(frame, text='Say Hi', command=self.say_hi)
        self.hiButton.pack()

    def say_hi(self):
        print ("Hi Sundy , Thanks!")

root = Tk()
app = App(root)
root.mainloop()
#root.destroy()

 

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *
class App:
    def __init__(self,master):
        frame=Frame(master)
        frame.pack()

        self.buttom=Button(frame,text="Exit Class",fg="blue",command=frame.quit)
        self.buttom.pack()

        self.hiButton=Button(frame,text="Say hi",command=self.say_hi)
        self.hiButton.pack()

    def say_hi(self):
        print("Hi,Tom, good job!")

if __name__=="__main__":
    root=Tk()
    app=App(root)
    root.mainloop()
    #root.destroy()
View Code

"D:\Program Files (x86)\python36\python.exe" F:/python从入门到放弃/tkinter/10.30/helloclass.py
Hi,Tom, good job!
Hi,Tom, good job!
Hi,Tom, good job!

  


 

如何设计GUI类库》》》tkinter设计结构 函数

 

 若是在开发的时候忘记配置样式,能够经过配置文件来配置工具

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *
root=Tk()
label=Label(root,text="hello world!")
label.config(cursor="gumby")
label.config(width=80,height=10,fg='yellow',bg="dark green")
label.config(font=("times","28","bold"))
label.pack()
root.mainloop()

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator
2018/10/30
'''
from tkinter import *
import setting
root=Tk()
label=Label(root,text="hello world!")
setting.config(label)
# label.config(cursor="gumby")
# label.config(width=80,height=10,fg='yellow',bg="dark green")
# label.config(font=("times","28","bold"))
label.pack()
root.mainloop()
helloworld.py
#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
def config(obj):
    obj.config(cursor="gumby")
    obj.config(width=80, height=10, fg='yellow', bg="dark green")
    obj.config(font=("times", "28", "bold"))
setting.py

 Widget Styling  能够配置的组件样式

 http://effbot.org/tkinterbook/tkinter-widget-styling.htmoop

 


样式演示布局

 1 #!/usr/bin/env python3
 2 #-*- coding:utf-8 -*-
 3 '''
 4 Administrator 
 5 2018/10/30 
 6 '''
 7 from tkinter import *
 8 button = Button(text='SundyButton',padx=10,pady=10)
 9 button.config(cursor='gumby')
10 button.config(bd=8,relief=FLAT)
11 button.config(bg='green',fg='yellow')
12 button.config(font=('Helvetica',10,'bold italic'))
13 button.pack()
14 button.mainloop()
View Code

 

relief
This option controls how to draw the 3D border. It can be set to one of SUNKEN, RAISED, GROOVE, RIDGE, and FLAT.

 


 

事件 和 事件绑定

 http://effbot.org/tkinterbook/tkinter-events-and-bindings.htmui

 绑定的三种方式:this

一、经过command = 回调函数  链接事件   (按钮级)

二、 经过bind 绑定事件   (按钮级)

三、 经过协议protocol  去监听窗体改变来绑定事件   (系统级)

 

import tkMessageBox

root= Tk()
'''
def button1Click():
    print('button clicked')

button = Button(text='hello', command=button1Click)
button.pack()
root.mainloop()
'''
def callback(event):

    frame.focus_set()
    print('clicked at:', event.x, event.y)
def key(event):
    print("pressed", repr(event.char))

frame = Frame(root,width=100,height=100)
frame.bind('<Button-1>',callback)
frame.bind('<Key>',key)
frame.pack()

root.protocol('WM_DELETE_WINDOW',)
root.mainloop()
View Code

 

 1 #!/usr/bin/env python3
 2 #-*- coding:utf-8 -*-
 3 '''
 4 Administrator 
 5 2018/10/30 
 6 '''
 7 # import tkMessageBox
 8 from tkinter import *
 9 root= Tk()
10 
11 def button1Click():
12     print('button clicked')
13 
14 button = Button(text='hello', command=button1Click)
15 button.pack()
16 root.mainloop()
demo1

效果:

 

 

command绑定事件的限制性  : 标签没有command属性,没有办法绑定事件

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
# import tkMessageBox
from tkinter import *
root= Tk()
def callback(event):
    print("Button-1 在frame上面 单击鼠标左键,打印出来")
frame = Frame(root,width=100,height=100)
frame.bind('<Button-1>',callback)
frame.pack()
root.mainloop()
演示2

 

 1 #!/usr/bin/env python3
 2 #-*- coding:utf-8 -*-
 3 '''
 4 Administrator 
 5 2018/10/30 
 6 '''
 7 from tkinter import *
 8 import tkinter.messagebox
 9 
10 root= Tk()
11 def callback(event):
12     frame.focus_set()#系统函数,每次点击前获得一个焦点
13     print('clicked at:', event.x, event.y)#鼠标点击时的x,y轴坐标是多少
14     print("距离左边的长度:%s  ,距离上面的长度:%s"%(event.x_root,event.y_root))
15 def key(event):
16     print("pressed", repr(event.char))#repr 函数  表示将字符用ASCII码打印出来  也能够用str  char输入键盘输入的是什么字符
17 def closeWindow():
18     if tkinter.messagebox.askokcancel("提示","是否要退出?"):
19         root.destroy()
20 
21 
22 
23 frame = Frame(root,width=100,height=100)
24 frame.bind('<Button-1>',callback)
25 frame.config(bg="dark green")
26 frame.bind('<Key>',key)
27 frame.pack()
28 
29 root.protocol('WM_DELETE_WINDOW',closeWindow)#经过协议监控 WM_DELETE_WINDOW Windows manages 删除 窗口发生时,调用函数  closeWindow
30 root.mainloop()
protocol

 


 

在窗体上新建一个窗体 

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30
'''
from tkinter import *

root = Tk()
root.title('root window')
top = Toplevel(bg='red')
top.title('top level')
root.mainloop()
View Code

 

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator
2018/10/30
'''
from tkinter import *

root = Tk()
root.title('root window')
# top = Toplevel(bg='red')
# top.title('top level')
top = Toplevel()
top.title("About this application...")
def about_message():
    return "this is a tkinter demo application"
msg = Message(top, text=about_message())
msg.pack()

button = Button(top, text="Dismiss", command=top.destroy)
button.pack()

root.mainloop()
View Code

 

 

from tkinter import *
import tkinter.messagebox
root = Tk()

def callback():
    if tkinter.messagebox.showerror('Sundy','HI Sundy'):
        print ('Clciked Yes')
    else:
        print ('Clicked No')

button = Button(root, text='Button1', command=callback)
button.pack()
root.mainloop()
消息框

 

 

 菜单

from tkinter import *

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

root = Tk()
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)

root.mainloop()
View Code

 

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *

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

root = Tk()
menu = Menu(root)
root.config(menu=menu)#设置一下root 里面菜单 就是上一行实例化的菜单

filemenu = Menu(menu)#添加一个菜单 绑定在menu上面
menu.add_cascade(label='File',menu=filemenu)#添加一个子菜单,绑定在filemunu上面 而且设置一个名字
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)

root.mainloop()
View Code

 

 

工具条

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *

root = Tk()

def callback():
    print ("clicked tool bar button ")

toolbar = Frame(root)#因为tkinter没有工具条的类,咱们用Frame来代替工具条的布局
b = Button(toolbar,text='new',width=6,command=callback)
b.pack(side=LEFT,padx=2,pady=2)

c = Button(toolbar,text='open',width=6,command=callback)
c.pack(side=LEFT,padx=2,pady=2)

toolbar.pack(side=TOP,fill=X)#放在最上面
root.mainloop()
View Code

 

 消息框

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *
import tkinter.messagebox
root = Tk()

def callback():
    if tkinter.messagebox.showerror('Sundy','HI Sundy'):
        print ('Clciked Yes')
    else:
        print ('Clicked No')

button = Button(root, text='Button1', command=callback)
button.pack()
root.mainloop()
View Code

 

 

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *
import tkinter.messagebox
root = Tk()

def callback():
    if tkinter.messagebox.askyesno('Sundy','HI Sundy'):
        print ('Clciked Yes')
    else:
        print ('Clicked No')

button = Button(root, text='Button1', command=callback)
button.pack()
root.mainloop()
View Code

 画布

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *

master = Tk()

w = Canvas(master, width=200, height=100,bg="yellow")
w.pack()

w.create_line(0, 0, 200, 100)
w.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))

w.create_rectangle(50, 25, 150, 75, fill="blue")

mainloop()
View Code

 输入框

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *
master=Tk()
e = Entry(master)
e.pack()

e.delete(0, END)
e.insert(0, "a default value")
print(e.get())
master.mainloop()
View Code

 

 布局

 

from Tkinter import *

root = Tk()
Label(root,text='First').grid(row=0)
Label(root,text='Second').grid(row=1)
e1 = Entry(root)
e2 = Entry(root)

e1.grid(row=0,column=1)
e2.grid(row=1,column=1)

Button(root,text='OK').grid(row=2)

root.mainloop()
View Code

 

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *

root = Tk()
Label(root,text='First').grid(row=0)
Label(root,text='Second').grid(row=1)
e1 = Entry(root)
e2 = Entry(root)
#
# e1.grid(row=0,column=1)
# e2.grid(row=1,column=1)
#
# Button(root,text='OK').grid(row=2)

root.mainloop()
View Code

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *

root = Tk()
Label(root,text='First').grid(row=0)
Label(root,text='Second').grid(row=1)
e1 = Entry(root)
e2 = Entry(root)

e1.grid(row=0,column=1)
e2.grid(row=1,column=1)

# Button(root,text='OK').grid(row=2)

root.mainloop()
View Code

 

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/10/30 
'''
from tkinter import *

root = Tk()
Label(root,text='First').grid(row=0)
Label(root,text='Second').grid(row=1)
e1 = Entry(root)
e2 = Entry(root)

e1.grid(row=0,column=1)
e2.grid(row=1,column=1)

Button(root,text='OK',width=10).grid(row=2,column=1)

root.mainloop()
View Code

 

 状态栏

from tkinter import *

root = Tk()
status =Label(root,text='Ln20',bd=1,relief=SUNKEN,anchor=W)
status.pack(side=BOTTOM, fill=X)
root.mainloop()
View Code

 


小项目,编写一个记事本
__author__ = 'Sundy'
# -*- encoding: utf8 -*-


from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *
import os


filename = ''

def author():
    showinfo('做者信息','本软件由麦子学院Sundy完成')


def about():

    showinfo('版权信息.Copyright','本软件版权归属为麦子学院')

def openfile():
    global filename
    filename = askopenfilename(defaultextension = '.txt')
    if filename == '':
        filename = None
    else:
        root.title('FileName:'+os.path.basename(filename))
        textPad.delete(1.0,END)
        f = open(filename,'r')
        textPad.insert(1.0,f.read())
        f.close()

def new():
    global filename
    root.title('未命名文件')
    filename = None
    textPad.delete(1.0,END)

def save():
    global filename
    try:
        f = open(filename,'w')
        msg = textPad.get(1.0,END)
        f.write(msg)
        f.close()
    except:
        saveas()


def saveas():
    f = asksaveasfilename(initialfile= '未命名.txt', defaultextension='.txt')
    global filename
    filename = f
    fh = open(f,'w')
    msg = textPad.get(1.0,END)
    fh.write(msg)
    fh.close()
    root.title('FileName:'+os.path.basename(f))

def cut():
    textPad.event_generate('<<Cut>>')

def copy():
    textPad.event_generate('<<Copy>>')

def paste():
    textPad.event_generate('<<Paste>>')

def redo():
    textPad.event_generate('<<Redo>>')

def undo():
    textPad.event_generate('<<Undo>>')

def selectAll():
    textPad.tag_add('sel','1.0',END)

def search():
    topsearch = Toplevel(root)
    topsearch.geometry('300x30+200+250')
    label1 = Label(topsearch,text='Find')
    label1.grid(row=0, column=0,padx=5)
    entry1 = Entry(topsearch,width=20)
    entry1.grid(row=0, column=1,padx=5)
    button1 = Button(topsearch,text='查找')
    button1.grid(row=0, column=2)


root = Tk()
root.title('Sundy Node')
root.geometry("800x500+100+100")

#Create Menu
menubar = Menu(root)
root.config(menu = menubar)

filemenu = Menu(menubar)
filemenu.add_command(label='新建', accelerator='Ctrl + N', command= new)
filemenu.add_command(label='打开', accelerator='Ctrl + O',command = openfile)
filemenu.add_command(label='保存', accelerator='Ctrl + S', command=save)
filemenu.add_command(label='另存为', accelerator='Ctrl + Shift + S',command=saveas)
menubar.add_cascade(label='文件',menu=filemenu)

editmenu = Menu(menubar)
editmenu.add_command(label='撤销', accelerator='Ctrl + Z', command=undo)
editmenu.add_command(label='重作', accelerator='Ctrl + y', command=redo)
editmenu.add_separator()
editmenu.add_command(label = "剪切",accelerator = "Ctrl + X",command=cut)
editmenu.add_command(label = "复制",accelerator = "Ctrl + C", command=copy)
editmenu.add_command(label = "粘贴",accelerator = "Ctrl + V", command= paste)
editmenu.add_separator()
editmenu.add_command(label = "查找",accelerator = "Ctrl + F", command=search)
editmenu.add_command(label = "全选",accelerator = "Ctrl + A", command= selectAll)
menubar.add_cascade(label = "编辑",menu = editmenu)
aboutmenu = Menu(menubar)
aboutmenu.add_command(label = "做者", command=author)
aboutmenu.add_command(label = "版权", command = about)
menubar.add_cascade(label = "关于",menu=aboutmenu)

#toolbar
toolbar = Frame(root, height=25,bg='light sea green')
shortButton = Button(toolbar, text='打开',command = openfile)
shortButton.pack(side=LEFT, padx=5, pady=5)

shortButton = Button(toolbar, text='保存', command = save)
shortButton.pack(side=LEFT)
toolbar.pack(expand=NO,fill=X)

#Status Bar
status = Label(root, text='Ln20',bd=1, relief=SUNKEN,anchor=W)
status.pack(side=BOTTOM, fill=X)

#linenumber&text
lnlabel =Label(root, width=2, bg='antique white')
lnlabel.pack(side=LEFT, fill=Y)

textPad = Text(root, undo=True)
textPad.pack(expand=YES, fill=BOTH)

scroll = Scrollbar(textPad)
textPad.config(yscrollcommand= scroll.set)
scroll.config(command = textPad.yview)
scroll.pack(side=RIGHT,fill=Y)



root.mainloop()
View Code
相关文章
相关标签/搜索