首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正试图用Python制作一个音乐应用程序,但是我得到了一个我无法修复的错误

我正试图用Python制作一个音乐应用程序,但是我得到了一个我无法修复的错误
EN

Stack Overflow用户
提问于 2021-08-12 14:59:24
回答 3查看 89关注 0票数 0

我正在尝试用python制作一个音乐应用程序,用于我的12年级项目,但我得到了一个错误,我不知道如何修复。我要做的是用GUI制作功能齐全的类似应用程序的python程序,并且能够同时播放在线和离线音乐。

起初,我只是从一个程序开始,在这个程序中,我们可以搜索并找到Youtube上出现的第一个结果,然后播放、暂停并停止它。我后来对此进行了改进,这样我们就可以在Youtube.I中播放前10个结果,我实际上有了从堆栈溢出本身搜索和查找部件的想法(顺便说一句,这是非常有用的。)并从中开发了其余的代码。我们也可以播放/暂停/停止音乐。但我希望它看起来更好,所以.我使用tkinter添加了一个GUI,这在一开始是相当困难的,但很快就足够容易了。我现在能做的就是在Tkinter窗口和搜索按钮中键入音乐名称(添加了搜索按钮,这样当我按下它时,它就会运行“链接查找和播放程序”)。我现在使用的库是:

  • 请求。
  • 帕菲
  • python
  • 平纹机

程序代码:

代码语言:javascript
复制
    from tkinter import *
    import re,requests, urllib.parse, urllib.request
    import vlc
    import pafy
    root = Tk()
    root.geometry('475x225'); root.title('PyMu6')
    Entry = Entry(root, width=26,font=('Circular',13))
    Entry.place(x=127,y=17)
    def search():
        music_name = Entry.get()
        print(music_name)
        if type(music_name)==str:
            query_string = urllib.parse.urlencode({"search_query": music_name})
            formatUrl = urllib.request.urlopen("https://www.youtube.com/results?" + query_string)
            search_results = re.findall(r"watch\?v=(\S{11})", formatUrl.read().decode())
            clip = requests.get("https://www.youtube.com/watch?v=" + "{}".format(search_results[0]))
            clip1 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[0])
            clip2 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[1])
            clip3 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[2])
            clip4 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[3])
            clip5= "https://www.youtube.com/watch?v=" + "{}".format(search_results[4])
            clip6 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[5])
            clip7 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[6])
            clip8 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[7])
            clip9 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[8])
            clip10 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[9])
            title1 = pafy.new(clip1)
            title2 = pafy.new(clip2)
            title3 = pafy.new(clip3)
            title4 = pafy.new(clip4)
            title5 = pafy.new(clip5)
            title6 = pafy.new(clip6)
            title7 = pafy.new(clip7)
            title8 = pafy.new(clip8)
            title9 = pafy.new(clip9)
            title10 = pafy.new(clip10)
            video1 = title1.title
            video2 = title2.title
            video3 = title3.title
            video4 = title4.title
            video5 = title5.title
            video6 = title6.title
            video7 = title7.title
            video8 = title8.title
            video9 = title9.title
            video10 = title10.title
            Label(root,text=video1,fg='blue').place(x=60,y=70)
            print()
            print('1)', video1)
            print('2)', video2)
            print('3)', video3)
            print('4)', video4)
            print('5)', video5)
            print('6)', video6)
            print('7)', video7)
            print('8)', video8)
            print('9)', video9)
            print('10)', video10)
            print()
            e = input('Enter Song: ')
            if e == '1':
                print(clip1)
                url = clip1
            if e == '2':
                print(clip2)
                url = clip2
            if e == '3':
                print(clip2)
                url = clip3
            if e == '4':
                print(clip4)
                url = clip4
            if e == '5':
                print(clip5)
                url = clip5
            if e == '6':
                print(clip6)
                url = clip6
            if e == '7':
                print(clip7)
                url = clip7
            if e == '8':
                print(clip8)
                url = clip8
            if e == '9':
                print(clip9)
                url = clip9
            if e == '10':
                print(clip10)
                url = clip10
            video = pafy.new(url)
            best = video.getbest()
            media = vlc.MediaPlayer(best.url)
            titl = video.title
            print(titl)
            media.play()
    def play():
        media.play()
    def pause():
        media.pause()
    def stop():
        media.stop()
    Search_button = Button(root, text = 'Search',  width = 10, font = ('Circular.', 10),bg='#1DB954',command=MusicPlayer.search)
    Play = Button(root, text = 'Play',  width = 10,font = ('Circular.', 10),bg='#1DB954',command=play)
    Pause = Button(root,text = 'Pause',  width = 10, font = ('Circular.', 10),bg='#1DB954',command=pause)
    Stop = Button(root,text = 'Stop',  width = 10, font = ('Circular.',10),bg='#1DB954',command=stop)
    Search_button.place(x=380,y=15);Play.place(x=120,y=170);Pause.place(x=220,y=170);Stop.place(x=320,y=170)
    root.mainloop()

在暂停/播放/停止按钮之前,这段代码运行得相当好。每当我尝试按下这些按钮时,我都会得到一个ValueError:未定义名称'media‘。这是我得到的错误图像的链接。.The问题,我认为是因为我试图使用的东西不是它的缩进(媒体)。

这是玩家在工作的时候

我也尝试过其他方法来返回这个媒体属性,但它们似乎对我不起作用。所以,如果有人能帮我解决这个错误并修复it.Also,那就太好了,欢迎你对这个程序提出任何建议。

谢谢

斯里拉姆

EN

回答 3

Stack Overflow用户

发布于 2021-08-12 15:11:59

在函数中,使media全局变量。然而,使用global是不好的。您可以使用OOP方法,在该方法中,只要定义了实例变量,就可以在函数的任何地方访问它。

代码语言:javascript
复制
global media
media = vlc.MediaPlayer(best.url)
票数 1
EN

Stack Overflow用户

发布于 2021-08-12 15:06:56

我不知道这是否有效,但尝试在def中传递媒体值,例如:

代码语言:javascript
复制
def play(media):
   media.play()
票数 0
EN

Stack Overflow用户

发布于 2021-08-12 15:47:07

您可以在search()之外创建media.set_mrl(),并在search()中使用media.set_mrl()

代码语言:javascript
复制
media = vlc.MediaPlayer()

def search():
    ...
    best = video.getbest()
    media.set_mrl(best.url)
    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68759818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档