Python GUI 图像打开和显示(二)

在初步实现GUI显示图片后,考虑Python能否像MATLAB和QT那样通过按钮打开文件夹,选择任意图片并打开,主要代码如下

    OpenFile = tk.Tk()   #创建新窗口
    OpenFile.withdraw()
    file_path = filedialog.askopenfilename() # 获取路径

再结合之前的图片显示代码实现任意图片的打开和显示,整体代码如下



from PIL import Image, ImageTk # 导入图像处理函数库
import tkinter as tk
from tkinter import filedialog   #导入文件对话框函数库

# 创建窗口 设定大小并命名
window = tk.Tk()
window.title('图像显示界面')
window.geometry('600x500')
global img_png           # 定义全局变量 图像的
var = tk.StringVar()    # 这时文字变量储存器

# 创建打开图像和显示图像函数
def Open_Img():
    global img_png
    OpenFile = tk.Tk() #创建新窗口
    OpenFile.withdraw()
    file_path = filedialog.askopenfilename()
    Img = Image.open(file_path)
    img_png = ImageTk.PhotoImage(Img)
    var.set('已打开')
def Show_Img():
    global img_png
    var.set('已显示')   # 设置标签的文字为 'you hit me'
    label_Img = tk.Label(window, image=img_png)
    label_Img.pack()

# 创建文本窗口,显示当前操作状态
Label_Show = tk.Label(window,
    textvariable=var,   # 使用 textvariable 替换 text, 因为这个可以变化
    bg='blue', font=('Arial', 12), width=15, height=2)
Label_Show.pack()
# 创建打开图像按钮
btn_Open = tk.Button(window,
    text='打开图像',      # 显示在按钮上的文字
    width=15, height=2,
    command=Open_Img)     # 点击按钮式执行的命令
btn_Open.pack()    # 按钮位置
# 创建显示图像按钮
btn_Show = tk.Button(window,
    text='显示图像',      # 显示在按钮上的文字
    width=15, height=2,
    command=Show_Img)     # 点击按钮式执行的命令
btn_Show.pack()    # 按钮位置

# 运行整体窗口
window.mainloop()

实现程序的打包.exe

  1. 首先需要在Python安装目录下安装pyinstaller。
  2. 之后将编写好的程序复制到C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts下
    在这里插入图片描述
  3. 打开cmd,找到该路径C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts在这里插入图片描述
    输入 pyinstaller Image_Openfiles.py,程序运行完,就打包成功了,打包后的文件中有很多东西,找到应用程序,打开即可
    在这里插入图片描述
    运行结果如下在这里插入图片描述
    在这里插入图片描述

目前存在的问题:
a. 界面中的面板位置不能任意放置,图片位置不固定
b. 重复显示图片,图像会重复显示到当前图的下方,
c. 界面不太美观,考虑进一步优化,或者找其他创建界面的方式

可以使用OpenCV库和Tkinter库实现在Python中通过GUI打开和关闭摄像头。以下是一个简单的示例代码: ```python import cv2 import tkinter as tk from PIL import Image, ImageTk class CameraApp: def __init__(self, video_source=0): self.cap = cv2.VideoCapture(video_source) self.root = tk.Tk() self.root.title("Camera App") # 创建一个Canvas对象来显示视频流 self.canvas = tk.Canvas(self.root, width=self.cap.get(cv2.CAP_PROP_FRAME_WIDTH), height=self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) self.canvas.pack() # 创建一个按钮来打开/关闭摄像头 self.btn = tk.Button(self.root, text="Open Camera", command=self.toggle_camera) self.btn.pack(pady=10) self.update() self.root.mainloop() def toggle_camera(self): if self.btn["text"] == "Open Camera": self.cap = cv2.VideoCapture(0) self.btn["text"] = "Close Camera" else: self.cap.release() self.btn["text"] = "Open Camera" def update(self): ret, frame = self.cap.read() if ret: # 将OpenCV帧转换为PIL图像 image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) image = Image.fromarray(image) photo = ImageTk.PhotoImage(image) self.canvas.create_image(0, 0, image=photo, anchor=tk.NW) self.root.after(15, self.update) if __name__ == '__main__': app = CameraApp() ``` 在这个示例代码中,使用了`cv2.VideoCapture`来打开摄像头,并将视频流显示在一个Tkinter的Canvas对象中。同时,还创建了一个按钮来控制打开/关闭摄像头,使用了`cv2.cvtColor`将OpenCV帧转换为PIL图像,并使用`ImageTk.PhotoImage`将其转换为Tkinter的PhotoImage对象。最后,使用`after`方法来定时更新视频流。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangxiaobei2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值