针对来自LCJ尘埃大佬的python电子相册的相关内容修正

针对来自LCJ尘埃大佬的python电子相册的相关内容修正

针对来自LCJ尘埃大佬的python电子相册的相关内容修正

源博客链接在这:https://blog.csdn.net/LCJ106/article/details/84037145#commentsedit

我发现如果直接使用大佬的代码的话会出现
NameError: name ‘self’ is not defined
或者
‘return’ outside function的报错
因为我是初学者,所以有些不到位甚至错误的地方麻烦大家多多指教
我通过通读大佬的代码,发现从第14行开始后面的代码几乎都往前进了4个空格导致各个方法与类的关系发生混乱
因此我通过修改得到的可运行的代码如下:

import wx
from PIL import Image
import matplotlib.pyplot as plt
import os
import tkinter
import re
import pygame


class wxGUI(wx.App):
    def OnInit(self):
        self.frame = wx.Frame(parent=None, title='x', size=(600, 600))
        self.panel = wx.Panel(self.frame, -1)

        wx.StaticText(parent=self.panel, label='相册路径名', pos=(120, 60))  # 静态文本控件
        self.inputN1 = wx.TextCtrl(parent=self.panel, pos=(240, 60))  # 文本框

    # 添加按钮
        self.buttonCheck1 = wx.Button(parent=self.panel, label='确定', pos=(400, 60))
        self.Bind(wx.EVT_BUTTON, self.OnButtonCheck1, self.buttonCheck1)

        self.buttonCheck6 = wx.Button(parent=self.panel, label='播放相册', pos=(140, 400))  # 添加按钮
        self.Bind(wx.EVT_BUTTON, self.OnButtonCheck6, self.buttonCheck6)

        self.buttonCheck7 = wx.Button(parent=self.panel, label='停止播放', pos=(300, 400))  # 添加按钮
        self.Bind(wx.EVT_BUTTON, self.OnButtonCheck7, self.buttonCheck7)

        wx.StaticText(parent=self.panel, label='裁剪', pos=(120, 140))  # 静态文本控件
        self.inputN2 = wx.TextCtrl(parent=self.panel, pos=(240, 140))  # 文本框
        self.buttonCheck2 = wx.Button(parent=self.panel, label='确定', pos=(400, 140))  # 添加按钮
        self.Bind(wx.EVT_BUTTON, self.OnButtonCheck2, self.buttonCheck2)

        wx.StaticText(parent=self.panel, label='缩放', pos=(120, 190))  # 静态文本控件
        self.buttonCheck3 = wx.Button(parent=self.panel, label='确定', pos=(400, 190))  # 添加按钮
        self.inputN3 = wx.TextCtrl(parent=self.panel, pos=(240, 190))  # 文本框
        self.Bind(wx.EVT_BUTTON, self.OnButtonCheck3, self.buttonCheck3)

        wx.StaticText(parent=self.panel, label='旋转', pos=(120, 240))  # 静态文本控件
        self.inputN4 = wx.TextCtrl(parent=self.panel, pos=(240, 240))  # 文本框
        self.buttonCheck4 = wx.Button(parent=self.panel, label='确定', pos=(400, 240))  # 添加按钮
        self.Bind(wx.EVT_BUTTON, self.OnButtonCheck4, self.buttonCheck4)

    # 组合框
        self.comboBox1 = wx.ComboBox(self.panel, value='click here', choices=[], pos=(100, 100), size=(200, 130))
        self.Bind(wx.EVT_COMBOBOX, self.OnCombo1, self.comboBox1)

        self.frame.Show()
        return True


# 按钮设置实时更新组合框
    def OnButtonCheck1(self, event):
        path = self.inputN1.GetValue()
        images = [f for f in os.listdir(path) if f.endswith('.jpg')]
        self.comboBox1.Set(images)


# 裁剪
    def OnButtonCheck2(self, event):
        path = self.inputN1.GetValue()
        name = self.comboBox1.GetValue()
        f = path + '\\' + name
        img = Image.open(f)
        x = self.inputN2.GetValue()
        pattern = re.compile(r',')
        y = pattern.split(x)
        print(y)
        left = int(y[0])
        upper = int(y[1])
        right = int(y[2])

        lower = int(y[3])
        box = (left, upper, right, lower)
        img1 = img.crop(box)  # 该tuple中信息为(left, upper, right, lower)。系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点。
        plt.figure(2)
        plt.title('img1')
        plt.imshow(img1), plt.axis('off')
        plt.show()


# 缩放
    def OnButtonCheck3(self, event):
        path = self.inputN1.GetValue()
        name = self.comboBox1.GetValue()
        f = path + '\\' + name
        img = Image.open(f)
        m = self.inputN3.GetValue()
        pattern = re.compile(r',')
        n = pattern.split(m)
        width = int(n[0])
        height = int(n[1])
        img2 = img.resize((width, height), Image.ANTIALIAS)
        plt.title('img2')
        plt.imshow(img2)
        plt.axis('off')
        plt.show()


    def OnButtonCheck4(self, event):
        plt.figure(4)
        path = self.inputN1.GetValue()
        name = self.comboBox1.GetValue()
        f = path + '\\' + name
        img = Image.open(f)
        angle = int(self.inputN4.GetValue())
        img3 = img.rotate(angle)
        plt.title('img3')
        plt.imshow(img3), plt.axis('off')
        plt.show()


# 相册播放
    def OnButtonCheck6(self, event):
        global i
        i = 1
        path = self.inputN1.GetValue()
        images = [f for f in os.listdir(path) if f.endswith('.jpg')]
        pygame.mixer.init()
        plt.figure(5)
        file = r'F:\QQ.music\刘瑞琦 - 歌路.mp3'
        file = file.encode('utf-8')
        pygame.mixer.music.load(file)
        pygame.mixer.music.play(-1)
        plt.ion()
        while 1:
            for f in images:
                f = path + '\\' + f
                im = Image.open(f)
                plt.imshow(im)
                plt.axis('off')
                plt.pause(3)
                if (i == 0):
                    break
            if (i == 0):
                break
        plt.close()
        plt.ioff()


# 停止播放
    def OnButtonCheck7(self, event):
        global i
        i = 0
        pygame.mixer.music.stop()


# 组合框选定显示对应图片
    def OnCombo1(self, event):
        path = self.inputN1.GetValue()
        name = self.comboBox1.GetValue()
        plt.figure(1)
        f = path + '\\' + name
        im = Image.open(f)
        print(im.size)
        plt.imshow(im)
        plt.axis('off')
        plt.show()


app = wxGUI()
app.MainLoop()

注意最后两行代码我建议加上if语句方便其他文件引用:

if __name__ == '__main__':
    app = wxGUI()
    app.MainLoop()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值