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
相關文章
相關標籤/搜索