Day 25 : Tkinter实战,配合pillow制作简易的处理照片程序(上)

今天会来配合pillow简单制作一个旋转图片的GUI,并且会增加一些pillow的功能到这个GUI上,让使用者可以用非常简单的小程序处理照片。

先来我这次预计做的程序:
https://ithelp.ithome.com.tw/upload/images/20211008/201380608tliid9N8z.png
主要就是实作针对照片处理的一些功能,那废话不多说直接将前面所学用上吧!

版面配置

先把版面配置做好吧,我们需要三个Button、三个Label、三个Radiobutton、两个Checkbutton以及

两个Entry。

这边我使用place去做排版,毕竟这种小程序我会把萤幕大小锁定,用place排版可以有更高的自订性:

win = tk.Tk()
win.title('照片旋转.exe')
win.geometry('380x400')
win.resizable(False, False)
win.iconbitmap('icon.ico')
'''Label区域'''
lb = tk.Label(text="请选取档案",bg ="grey",fg="white",height=1)
lb.place(x=0 ,y=0)
lb2 = tk.Label(text="特殊效果",fg="blue",height=1)
lb2.place(x=0 ,y=50)
lb3 = tk.Label(text="增加字元",fg="green",height=1)
lb3.place(x=0 ,y=120)
'''Label区域'''
'''Entry区域'''
loadFile_en = tk.Entry(width=40)
loadFile_en.place(x=70 ,y=0)
input_word = tk.Entry(width=40)
input_word.place(x=70 ,y=120)
'''Entry区域'''
'''Radiobutton区域'''
radioVar = tk.IntVar()
radio1 = tk.Radiobutton(text='向右90度',variable=radioVar, value=1) 
radio2 = tk.Radiobutton(text='向左90度',variable=radioVar, value=2) 
radio3 = tk.Radiobutton(text='180度旋转',variable=radioVar, value=3)
radio1.place(x=40,y=25)
radio2.place(x=140,y=25)
radio3.place(x=240,y=25)
'''Radiobutton区域'''
'''checkbutton区域'''
color_checkbutton = tk.IntVar()
color_checkbutton1 = tk.Checkbutton(text='黑白化',variable=color_checkbutton)
color_checkbutton1.place(x=40,y=80)
Binarization_checkbutton = tk.IntVar() 
Binarization_checkbutton1 = tk.Checkbutton(text='二值化',variable=Binarization_checkbutton)
Binarization_checkbutton1.place(x=140,y=80)
'''checkbutton区域'''
'''Button区域'''
loadFile_btn = tk.Button(text="...",height=1)
loadFile_btn.place(x=355 ,y=0)
color_choice = tk.Button(text="颜色选择")
color_choice.place(x=70,y=140)
output_btn = tk.Button(text="输出",height=1)
output_btn.place(anchor=CENTER,x=180 ,y=200)
'''Button区域'''
win.mainloop()

ㄜ...超长,可是应该没什麽困难的点,就是把元件排版全部打出来,再用一些参数微调而已而已。
https://ithelp.ithome.com.tw/upload/images/20211008/20138060rerzPKtyb4.png
画面就这样写好了,可是此时还没有任何功能,再来就慢慢的把功能加进去吧!

功能实作

先把选取档案的部分做出来吧,我希望这个程序可以在选取档案时,针对照片来选择,其他附档名不要显示出来,我们来写个函式,将点击三个点的那个按钮指向这个函式:

from tkinter import filedialog
def loadFile():
    if loadFile_en.get() is None:
        file_path = filedialog.askopenfilename(filetypes = (("png files","*.png"),("all files","*.*")))
        loadFile_en.insert(0,file_path) 
    else:
        file_path = filedialog.askopenfilename(filetypes = (("png files","*.png"),("all files","*.*")))
        loadFile_en.delete(0,'end')
        loadFile_en.insert(0,file_path)

wait,一上来就这麽多东西,没关系,我一行一行解释。

第一行我们先把filedialog功能import进来,这个功能专门用来开启档案对话框。再来定义loadFile()这个函式:filedialog.askopenfilename()可以用来开启档案对话框并且选择档案。我们可以设定参数filetypes,显示指定的副档名。然後再把这串路径用insert()的方式丢到旁边的Entry中。这边要注意的是若再次选择档案的话,要将旧档案路径的文字清除,所以我利用get()来判断Entry是否为空,否的话就要使用delete()函式,从第一个字元清到end(结束)。

打好这部分後,就可以把三个点的button加入command = loadFile,让按键按下後可以执行这个函式:

loadFile_btn = tk.Button(text="...",height=1,command=loadFile) #这行多加command=loadFile

https://ithelp.ithome.com.tw/upload/images/20211008/20138060R6FmPTsFed.png
https://ithelp.ithome.com.tw/upload/images/20211008/201380602FZoxjADvA.png
这样就达到我们要的功能罗!

下一步来处理颜色选择那个按键好了,那边是用来选择嵌入字样的颜色,先来写一个函式将颜色选择器写进来。这边会用到tkinter.colorchooser中的cc功能,所以一样先import进来:

import tkinter.colorchooser as cc
def colorChoice():
    color=cc.askcolor()
    print(str(color))
color_choice = tk.Button(text="颜色选择",command=colorChoice) #这行改成这样

一样将command指到我们新建立的colorChoice()函式。我先使用cc.askcolor()这个函式,这个函示可以叫出颜色选择器选择颜色。然後将这个函式的输出用字串显示出来。执行程序後应该会长这样:
https://ithelp.ithome.com.tw/upload/images/20211008/201380607TsQuXXcYs.png
随便选个颜色案确定,他就会把颜色的值输出到cmd上:
https://ithelp.ithome.com.tw/upload/images/20211008/20138060ujg0vWQHLU.png

colorPrint = tk.Label(height=1,width=2) #新增到Label区域
colorPrint.place(x=130 ,y=143) #新增到Label区域

前置作业就做好了,再来就是传入值了。想想刚刚显示在cmd上面的东西,如果还记得的话,这就是我们之前讲的tuple型态。tkinter的颜色参数可以使用HEX的形式,所以我们要做的事情就是将tuple的第二个值取出,并改变刚刚新定义的Label中的参数,要更动参数可以用config()这个函式,我这边选择改变它的bg(背景)参数。

#改成这样
def colorChoice():
    color=cc.askcolor()
    color = color[1] 
    colorPrint.config(bg=color)
#改成这样

取出第二个值,使用config参数将刚刚新定义的Label的bg参数改成我们取出的值。基本上这样就好了,来看一下成果ㄅ:
https://ithelp.ithome.com.tw/upload/images/20211008/20138060XryjKaKW8A.png
这样使用者就可以知道自己选了甚麽颜色了!

明天就开始来撰写照片处理的部分以及输出吧,好久没打这麽多字了...


<<:  [第二十三只羊] 迷雾森林舞会XVII 玩家x座位x游戏角色 多对多关联

>>:  [Python 爬虫这样学,一定是大拇指拉!] DAY23 - 实战演练:HTML Response - 抓取股票代码清单 (2)

Google Apps Script 语言

Google Apps Script 语言 https://wolkesau.medium.com/...

Day1 研究AR的起因&初心(刚出新手村的萌新)

选择研究/探讨AR相关技术是因为希望未来可以做出一些很酷的东西,像Pokemon GO或是游戏王卡的...

【30天Lua重拾笔记28】进阶议题: Meta Programming

同步发表於个人网站 Meta Programming / 元程序设计 元程序设计(英语:Metap...

11. Bug x Debug x Debug Tool

Bug 在 debug 之前我们要知道什麽是 bug。 请勾选属於 bug 的东西: [ ] 正常网...

Day 24 ATT&CK for ICS - Lateral Movement(2)

T0843 Program Download 攻击者可能透过程序下载已将使用者的程序码传输到控制器中...