GUI编程
最近老师在教GUI编程基础,发现利用tkinter编程还挺方便的。受老师写的“随机点名工具”启发,我动手写了能够随机选图的小程序。程序挺简单,但对于我这种小白来说成果喜人。
在整体功能方面,该小程序由一个窗体,一个标签,一个画布,一个按钮组成;按钮与画布分别放于两个frame中。点击“开始”按钮后,绿色的画布上便开始显示不同的图片,此时按钮上的文字变为“停止”;点击“停止”按钮后,图片便停止滚动,按钮上的文字变为“开始“。
对于图片显示的实现,我采用如下方法,将图片放于画布中。
pic = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg', '10.jpg', '11.jpg',
'12.jpg', '13.jpg', '14.jpg'] #图片的文件名,存于与main.py同一级的文件下
img_open = Image.open(pic[index])
img_png = ImageTk.PhotoImage(img_open)
img_png.size = (10,20)
canvas.create_image(200,400, image=img_png)
canvas.grid(row=1, column=1)
index = random.randrange(0,14)
但是目前我还不知道如何改变图片的实际大小,导致呈现出来的效果如下:
并不能显示完整图片,希望有大佬能够指点指点,感激不尽。
以下为完整代码:
from tkinter import *
import tkinter
import random
import PIL
from PIL import Image, ImageTk
pic = None
img_png = None
img_open = None
start = False
index = 0
def choice():
global pic #让方法内的局部变量全局可用
global img_open
global img_png
global index
pic = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg', '10.jpg', '11.jpg',
'12.jpg', '13.jpg', '14.jpg'] #图片的文件名,存于与main.py同一级的文件下
img_open = Image.open(pic[index])
img_png = ImageTk.PhotoImage(img_open)
img_png.size = (10,20)
canvas.create_image(200,400, image=img_png)
canvas.grid(row=1, column=1)
index = random.randrange(0,14)
pass
def start_choice():
choice()
global job
job = root.after(1, start_choice) #延时器,反复回调
def run():
global start
if start == False: #一点小细节,用于改变单个按钮的功能
start_choice()
start = True
button1.configure(text = '停止')
else:
start = False
root.after_cancel(job)
button1.configure(text='开始')
root = Tk()
root.title = ("选图")
root.geometry('400x565')
label = Label(root,text = '以下图片供你选择')
label.pack()
frame0 = Frame(root)
frame0.pack()
canvas = Canvas(frame0, width=400, height=500, bg='green')
canvas.grid(row=1, column=1)
frame = Frame(root)
frame.pack()
button1 = Button(frame,text = '开始',bd = 4,bg="gray",command = run)
button1.grid(row = 1,column = 0)
root.mainloop()
其中我利用了第三方库pillow,需要自行下载。
Github链接如下:https://github.com/Chigland/Choose-your-wife