Python 组合tkinter和pygame时不显示小部件

Python 组合tkinter和pygame时不显示小部件,python,tkinter,widget,pygame,Python,Tkinter,Widget,Pygame,我正在使用tkinter和pygame制作一个音乐播放器应用程序。我在网上找到了一些实现这两个模块(,)的方法,但我的按钮不可见。pygame屏幕显示良好,但我无法让按钮显示出来 以下是我的代码的缩写版本: from tkinter import * import tkinter.filedialog as tk import tkinter.messagebox as tk2 import os import pygame playlist = ['song1.mp3', 'song2.mp

我正在使用tkinter和pygame制作一个音乐播放器应用程序。我在网上找到了一些实现这两个模块(,)的方法,但我的按钮不可见。pygame屏幕显示良好,但我无法让按钮显示出来

以下是我的代码的缩写版本:

from tkinter import *
import tkinter.filedialog as tk
import tkinter.messagebox as tk2
import os
import pygame

playlist = ['song1.mp3', 'song2.mp3', 'song3.mp3', 'song4.mp3']

class Application(Frame):

    def __init__(self,master):
        super(Application, self).__init__(master)

        #create widgets
        self.playlistbox = Listbox(self, selectmode = SINGLE) #listbox
        for song in playlist:
            self.playlistbox.insert(END, song)
        self.playlistbox.grid(row = 1)
        self.playButton = Button(self, text = 'Play', command = self.play)  #button
        self.playButton.grid(row=1, column = 1)

        #pygame init
        embed = tk.Frame(root, width = 200 , height = 200)
        embed.pack()
        embed.pack(side = LEFT)
        os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
        os.environ['SDL_VIDEODRIVER'] = 'windib'
        pygame.display.init() 
        windowSurface = pygame.display.set_mode((200,100))
        pygame.mouse.set_visible(True)

    def play(self):   #play song function
        pygame.mixer.music.stop()
        selectedSongs = self.playlistbox.curselection()
        pygame.mixer.music.load(self.playlistbox.get(0))
        pygame.mixer.music.play(0, 0.0)

root = Tk()
root.title('Text Editor')
root.geometry('700x600')
app = Application(root)
app.mainloop()
你在这里做的真是太过分了。
我用你在这里使用的东西给一个音乐播放器编码。。python、pygame和tkinter..

您不需要初始化pygame的显示模块,因为相信我,您不需要它。
我会告诉你我做了什么。

我使用pygame的音乐模块使用Sound类播放曲目。
我创建了一个名为SoundPanel的类,它从Frame类继承到group:一个音量刻度、一个play/stop checkbutton和一个标签,用于查看曲目名称的前23个字母,如果曲目名称大于此值,则添加一些点。
为了使其可用,我添加了一个“打开文件”按钮,将曲目添加到视图中(使用tkinter的文件对话框)(即创建一个播放曲目的新SoundPanel对象),并添加了一个“打开文件夹”按钮,将具有特定扩展名的所有文件(由用户使用包含文本框的对话框定义)添加到视图中。

我想你不需要更多了。
我不是说你必须模仿我的解决方案,但我认为你的解决方案太复杂了。

顺便说一句,这些小部件不会显示,因为创建完对象后必须打包框架。

Amr Ayman下面的回答可能是一个很好的建议,但是如果您想知道您的问题是忘记包含
self.pack()
(不是嵌入框架,而是主tkinter框架)在您初始化列表框和按钮之后。谢谢您的回答!我之所以使用pygame的显示模块,是因为我计划在应用程序上做一些图形/设计工作,但你是对的,仅仅将其用于音频太过了。