Python簡(jiǎn)單的GUI程序示例詳解
更新時(shí)間:2022年02月13日 10:51:27 作者:軟件開(kāi)發(fā)技術(shù)愛(ài)好者軟件開(kāi)發(fā)技術(shù)愛(ài)好者
這篇文章主要為大家詳細(xì)介紹了Python簡(jiǎn)單的GUI程序示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
一、記事本
源碼
#python簡(jiǎn)易記事本
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
import os
filename='' #文件名,全局變量
def about():
messagebox.showinfo('提示','這是一個(gè)消息框')
def openFile():
global filename #使用全局變量
filename=filedialog.askopenfilename(defaultextension='.txt') #打開(kāi)文件,默認(rèn)擴(kuò)展名是xtxt
if filename=='': #如果沒(méi)有選擇
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') #只寫方式打開(kāi)文件
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) #第一個(gè)菜單欄
filemenu.add_command(label='打開(kāi)',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簡(jiǎn)易記事本
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
import os
filename='' #文件名,全局變量
def about():
messagebox.showinfo('提示','這是一個(gè)消息框')
def openFile():
global filename #使用全局變量
filename=filedialog.askopenfilename(defaultextension='.txt') #打開(kāi)文件,默認(rèn)擴(kuò)展名是xtxt
if filename=='': #如果沒(méi)有選擇
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') #只寫方式打開(kāi)文件
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) #第一個(gè)菜單欄
filemenu.add_command(label='打開(kāi)',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()運(yùn)行效果:

二、簡(jiǎn)單畫(huà)圖
# 畫(huà)圖程序
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: #抬起左鍵畫(huà)直線
canvas.create_line(X.get(),Y.get(),event.x,event.y,fill=foreColor)
elif penType.get()==3: #抬起左鍵就畫(huà)矩形
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) #能否畫(huà)圖,1:能,0:不能
penType=tkinter.IntVar(value=1) #畫(huà)筆類型,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()運(yùn)行效果:

總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
JS設(shè)計(jì)模式之責(zé)任鏈模式實(shí)例詳解
這篇文章主要介紹了JS設(shè)計(jì)模式之責(zé)任鏈模式,結(jié)合實(shí)例形式詳細(xì)分析了責(zé)任鏈模式的概念、原理、功能、使用場(chǎng)景及相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
django配置使用asgi的實(shí)現(xiàn)步驟
本文主要介紹了django配置使用asgi的實(shí)現(xiàn)步驟,支持 ASGI 協(xié)議能處理傳統(tǒng)HTTP請(qǐng)求,也能支持實(shí)時(shí)WebSocket通信,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
Python循環(huán)實(shí)現(xiàn)n的全排列功能
這篇文章主要介紹了Python循環(huán)實(shí)現(xiàn)n的全排列功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
Python?OpenCV?Canny邊緣檢測(cè)算法的原理實(shí)現(xiàn)詳解
這篇文章主要介紹了Python?OpenCV?Canny邊緣檢測(cè)算法的原理實(shí)現(xiàn)詳解,由于邊緣檢測(cè)對(duì)噪聲敏感,因此對(duì)圖像應(yīng)用高斯平滑以幫助減少噪聲,具體詳情需要的小伙伴可以參考一下2022-07-07
詳解Python的Django框架中的模版相關(guān)知識(shí)
這篇文章主要介紹了Python的Django框架中的模版相關(guān)知識(shí),模版的存在大大簡(jiǎn)化了創(chuàng)作頁(yè)面時(shí)HTML的相關(guān)工作,需要的朋友可以參考下2015-07-07
Github?Copilot的申請(qǐng)以及在Pycharm的配置與使用詳解
GitHub在聯(lián)合OpenAI推出了一款"GitHub Copilot"工具,可以根據(jù)上下文自動(dòng)寫代碼,下面這篇文章主要給大家介紹了關(guān)于Github?Copilot的申請(qǐng)以及在Pycharm的配置與使用的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
python的dict,set,list,tuple應(yīng)用詳解
這篇文章主要介紹了python的dict,set,list,tuple應(yīng)用詳解,需要的朋友可以參考下2014-07-07

