Проблемы с наследованием классов и вставкой tkinter listBox - PullRequest
0 голосов
/ 08 декабря 2018

В настоящее время я пытаюсь сделать простой Jukebox / Music Player на Python и столкнулся с некоторыми проблемами, связанными с наследованием классов и методом listBox от tkinter.

У меня есть два класса JukeboxGUI и JukeboxContent (один контент не полный).Класс JukeboxContent наследует JukeboxGUI:

import os
import pygame
#from PIL import Image
from tkinter.filedialog import askdirectory
from tkinter import *
import eyed3


class JukeboxGUI: 
    def __init__(self, window):
        self.photo = PhotoImage(file = "//Users//nukhbahmajid//Desktop//Jukebox//background2.gif")
        self.canvas = Canvas(width = 1000, height = 1000, bg = "black")
        self.label = Label(self.canvas, text = "Jukebox")
        self.listBox = Listbox(self.canvas)
        self.playPauseButton = Button(self.canvas, text = "Play / Pause")
        self.nextButton = Button(self.canvas, text = "Next Song")
        self.previousButton = Button(self.canvas, text = "Previous Song")
        self.stopButton = Button(self.canvas, text = "Stop")
        self.labelVar = StringVar()
        self.songLabel = Label(self.canvas, textvariable = self.labelVar, width = 20)

    def constructButtons(self):
        self.canvas.pack()
        self.canvas.create_image(0,0, image = self.photo, anchor = NW)
        self.label = self.canvas.create_window(325, 40, anchor = NW, window = self.label)
        self.listBox = self.canvas.create_window(270, 80, anchor = NW, window = self.listBox)
        self.playPauseButton = self.canvas.create_window(110, 120, anchor = NW, window = self.playPauseButton)
        self.nextButton = self.canvas.create_window(500, 120, anchor = NW, window = self.nextButton)
        self.previousButton = self.canvas.create_window(500, 180, anchor = NW, window = self.previousButton)
        self.stopButton = self.canvas.create_window(130, 183, anchor = NW, window = self.stopButton)
        self.songLabel = self.canvas.create_window(268, 268, anchor = NW, window = self.songLabel)


class JukeboxContent(JukeboxGUI):
    def __init__(self, window):
        #JukeboxGUI.__init__(self, window)
        super(JukeboxContent, self).__init__(window)
        listOfSongs = []
        songTitles = []
        num_songs = len(songTitles)
        self.index = 1
        self.listOfSongs = listOfSongs
        self.songTitles = songTitles
        self.directoryAsk = askdirectory()
        self.num_songs = num_songs
        self.Error_NoMP3s = "No \".mp3\" files found."

    def directoryChooser(self):
        self.directoryAsk
        os.chdir(self.directoryAsk)

        for files in os.listdir(self.directoryAsk):
            if files.endswith(".mp3"):
                realdir = os.path.realpath(files)
                audioTag = eyed3.load(realdir)
                self.songTitles.append(audioTag.tag.title)
                self.listOfSongs.append(files)
                print(files) ## comment out or remove later
                print("These are the Song titles:", self.songTitles) #check if the list gets appended

        for items in self.songTitles:
            self.listBox.insert(END, items) ## the list doesn't get inserted into the listbox


        pygame.mixer.init()
        pygame.mixer.music.load(self.listOfSongs[0])
        self.labelVar.set(self.songTitles[0])
        print("The label variable:", self.labelVar) ## the variable isn't set either
        print("The label is accessible:", self.songLabel) ## songLabel doesn't get updated
        pygame.mixer.music.play() # the song doesn't play 


if __name__ == "__main__":
    window = Tk()
    window.geometry("700x500+450+200")
    window.title("Jukebox")
    constructGUI = JukeboxGUI(window)
    constructGUI.constructButtons()
    initiateJukebox = JukeboxContent(window)
    initiateJukebox.directoryChooser()
    window.mainloop()

Когда я пытаюсь получить доступ к атрибутам родительского класса, таким как вставка песен в список, здесь нет конкретной ошибки, но списоклибо в поле либо

Во-вторых, когда я обновляю переменную label и songLabel и пытаюсь распечатать позже, чтобы увидеть, реализовано ли это, на терминал выводится следующее:

The label variable: PY_VAR1
The label is accessible: .!canvas2.!label2

Песня тоже не играет.В чем может быть проблема?Пожалуйста, помогите мне!Вот изображение интерфейса, если это помогает: JukeboxInterface

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...