溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python如何實現(xiàn)簡單的GUI程序

發(fā)布時間:2022-02-14 09:31:27 來源:億速云 閱讀:139 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹Python如何實現(xiàn)簡單的GUI程序,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、記事本

源碼

#python簡易記事本
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
import os
filename=''   #文件名,全局變量
def about():
    messagebox.showinfo('提示','這是一個消息框')
def openFile():
    global filename   #使用全局變量
    filename=filedialog.askopenfilename(defaultextension='.txt')   #打開文件,默認(rèn)擴(kuò)展名是xtxt
    if filename=='':   #如果沒有選擇
        filename=None
    else:
        root.title('FileName:'+os.path.basename(filename))   #將文件名顯示在標(biāo)題欄中
        textPad.delete(1.0,END)   #刪除文本框中原有內(nèi)容
        f=open(filename,'r',encoding='UTF-8')   #獲取文件中內(nèi)容
        textPad.insert(1.0,f.read())   #顯示到文本框
        f.close()
def saveOtherFile():
    global filename
    f=filedialog.asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt')   #保存文件
    filename=f
    root.title('FileName:' + os.path.basename(filename))
    fh=open(f,'w',encoding='UTF-8')   #只寫方式打開文件
    msg=textPad.get(1.0,END)   #從文本框中獲取內(nèi)容
    fh.write(msg)
    fh.close()
root=Tk()   #設(shè)置菜單欄
root.title('記事本')
root.geometry('500x500+100+100')   #widthxheight+x+y
menubar=Menu(root)
root.config(menu=menubar)
filemenu=Menu(menubar)   #第一個菜單欄
filemenu.add_command(label='打開',accelerator='Ctrl+N',command=openFile)
filemenu.add_command(label='保存',accelerator='Ctrl+T',command=saveOtherFile)
menubar.add_cascade(label='文件',menu=filemenu)
aboutmenu=Menu(menubar)
aboutmenu.add_command(label='關(guān)于',accelerator='Ctrl+Y',command=about)
menubar.add_cascade(label='幫助',menu=aboutmenu)
status=Label(root,text='Ln20',bd=1,relief=SUNKEN,anchor=W)   #底部狀態(tài)欄
status.pack(side=BOTTOM,fill=X)
lnlabel=Label(root,width=2,bg='antique white')   #左邊邊界欄
lnlabel.pack(side=LEFT,fill=Y)
textPad=Text(root,undo=True)   #設(shè)置文本框
textPad.pack(expand=YES,fill=BOTH)
scroll=Scrollbar(textPad)   #右邊進(jìn)度條欄
textPad.config(yscrollcommand=scroll.set)
scroll.config(command=textPad.yview)
scroll.pack(side=RIGHT,fill=Y)
root.mainloop()#python簡易記事本
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
import os
filename=''   #文件名,全局變量
def about():
    messagebox.showinfo('提示','這是一個消息框')
def openFile():
    global filename   #使用全局變量
    filename=filedialog.askopenfilename(defaultextension='.txt')   #打開文件,默認(rèn)擴(kuò)展名是xtxt
    if filename=='':   #如果沒有選擇
        filename=None
    else:
        root.title('FileName:'+os.path.basename(filename))   #將文件名顯示在標(biāo)題欄中
        textPad.delete(1.0,END)   #刪除文本框中原有內(nèi)容
        f=open(filename,'r',encoding='UTF-8')   #獲取文件中內(nèi)容
        textPad.insert(1.0,f.read())   #顯示到文本框
        f.close()
def saveOtherFile():
    global filename
    f=filedialog.asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt')   #保存文件
    filename=f
    root.title('FileName:' + os.path.basename(filename))
    fh=open(f,'w',encoding='UTF-8')   #只寫方式打開文件
    msg=textPad.get(1.0,END)   #從文本框中獲取內(nèi)容
    fh.write(msg)
    fh.close()
root=Tk()   #設(shè)置菜單欄
root.title('記事本')
root.geometry('500x500+100+100')   #widthxheight+x+y
menubar=Menu(root)
root.config(menu=menubar)
filemenu=Menu(menubar)   #第一個菜單欄
filemenu.add_command(label='打開',accelerator='Ctrl+N',command=openFile)
filemenu.add_command(label='保存',accelerator='Ctrl+T',command=saveOtherFile)
menubar.add_cascade(label='文件',menu=filemenu)
aboutmenu=Menu(menubar)
aboutmenu.add_command(label='關(guān)于',accelerator='Ctrl+Y',command=about)
menubar.add_cascade(label='幫助',menu=aboutmenu)
status=Label(root,text='Ln20',bd=1,relief=SUNKEN,anchor=W)   #底部狀態(tài)欄
status.pack(side=BOTTOM,fill=X)
lnlabel=Label(root,width=2,bg='antique white')   #左邊邊界欄
lnlabel.pack(side=LEFT,fill=Y)
textPad=Text(root,undo=True)   #設(shè)置文本框
textPad.pack(expand=YES,fill=BOTH)
scroll=Scrollbar(textPad)   #右邊進(jìn)度條欄
textPad.config(yscrollcommand=scroll.set)
scroll.config(command=textPad.yview)
scroll.pack(side=RIGHT,fill=Y)
root.mainloop()

運行效果:

Python如何實現(xiàn)簡單的GUI程序

二、簡單畫圖

# 畫圖程序
import os
import tkinter
import tkinter.simpledialog
import tkinter.colorchooser
import tkinter.filedialog
from PIL import Image
from PIL import ImageGrab
def openItem():
    global img
    filename=tkinter.filedialog.askopenfilename(title="Open",filetypes=[('Image','*.png *.gif')])
    if filename:
        img=tkinter.PhotoImage(file=filename)
        canvas.create_image(400,300,image=img)
def saveItem():
    saveX=int(root.winfo_rootx())
    saveY=int(root.winfo_rooty())
    saveW=root.winfo_width()
    saveH=root.winfo_height()
    im=ImageGrab.grab((saveX,saveY,saveX+saveW,saveY+saveH))      
    filename=tkinter.filedialog.asksaveasfilename(title='Save',filetypes=[('Image','*.png *.gif')])
    if not filename:
        return
    try:
        if filename[filename.index('.'):] in ['.png','.gif']==False:
            filename+='.png'
    except:
        filename+='.png'
    im.save(filename)
def clearItem():
    for i in canvas.find_all():
        canvas.delete(i)
def curveType():   
    penType.set(1)
def lineType():
    penType.set(2)
def rectangleType():
    penType.set(3)
def textType():
    global userText
    userText=tkinter.simpledialog.askstring(title="Please input your words", prompt='')
    penType.set(4)
def eraseType():
    penType.set(5)
def chooseForeColor():
    global foreColor    
    foreColor=tkinter.colorchooser.askcolor()[1]
def chooseBackColor():
    global backColor
    backColor=tkinter.colorchooser.askcolor()[1]
def onClickLeft(event):
    global userText
    canDraw.set(1)
    X.set(event.x)
    Y.set(event.y)
    if penType.get()==4:
        canvas.create_text(event.x,event.y,text=userText)
def onMoveLeft(event):
    global lastPaint,foreColor,backColor
    if canDraw.get()==0:
        return
    if penType.get()==1:        #繪制曲線
        canvas.create_line(X.get(),Y.get(),event.x,event.y,fill=foreColor)
        X.set(event.x)
        Y.set(event.y)
    elif penType.get()==2:      #繪制直線(預(yù)覽)
        try:
            canvas.delete(lastPaint)
        except:
            pass
        lastPaint=canvas.create_line(X.get(),Y.get(),event.x,event.y,fill=foreColor)
    elif penType.get()==3:      #繪制矩形(預(yù)覽)
        try:
            canvas.delete(lastPaint)
        except:
            pass
        lastPaint=canvas.create_rectangle(X.get(),Y.get(),event.x,event.y,fill=backColor,outline=foreColor)
    elif penType.get()==5:      #橡皮擦
        canvas.create_rectangle(event.x-5,event.y-5,event.x+5,event.y+5,fill=backColor,outline=backColor)
def onReleaseLeft(event):
    global lastPaint,foreColor,backColor
    lastPaint=0  
    if penType.get()==2:         #抬起左鍵畫直線
        canvas.create_line(X.get(),Y.get(),event.x,event.y,fill=foreColor)
    elif penType.get()==3:      #抬起左鍵就畫矩形
        canvas.create_rectangle(X.get(),Y.get(),event.x,event.y,fill=backColor,outline=foreColor)
    canDraw.set(0)
def onReleaseRight(event):
    menu.post(event.x_root, event.y_root)
root=tkinter.Tk()
root.title("Paint")
root.geometry("800x600+280+50")
lastPaint=0
userText=""
foreColor='black'
backColor='white'
X=tkinter.IntVar(value=0)
Y=tkinter.IntVar(value=0)
canDraw=tkinter.IntVar(value=0)     #能否畫圖,1:能,0:不能
penType=tkinter.IntVar(value=1)     #畫筆類型,1:曲線,2:直線,3:矩形,4:文本,5:橡皮擦
menu=tkinter.Menu(root,tearoff=0)
subMenu=tkinter.Menu(menu,tearoff=0)
img=tkinter.PhotoImage()
canvas=tkinter.Canvas(root,bg='white',width=800,height=600)
canvas.create_image(800,600,image=img)
menu.add_command(label='Open',command=openItem)
menu.add_command(label='Save as',command=saveItem)
menu.add_separator()
subMenu.add_command(label='Curve',command=curveType)
subMenu.add_command(label='Line',command=lineType)
subMenu.add_command(label='Rectangle',command=rectangleType)
subMenu.add_command(label='Text',command=textType)
subMenu.add_command(label='Erase',command=eraseType)
menu.add_cascade(label='Pen Type',menu=subMenu)
menu.add_separator()
menu.add_command(label='Foreground Color',command=chooseForeColor)
menu.add_command(label='Bakckground Color',command=chooseBackColor)
menu.add_separator()
menu.add_command(label='Clear',command=clearItem)
canvas.bind('<Button-1>', onClickLeft)
canvas.bind('<B1-Motion>',onMoveLeft)
canvas.bind('<ButtonRelease-1>',onReleaseLeft)
canvas.bind('<ButtonRelease-3>',onReleaseRight)
canvas.pack(fill=tkinter.BOTH,expand=tkinter.YES)
root.mainloop()

 運行效果:

Python如何實現(xiàn)簡單的GUI程序

以上是“Python如何實現(xiàn)簡單的GUI程序”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI