我正在使用tkinter和pygame制作音乐播放器应用程序。我在网上找到了一些实现这两个模块的方法(https://mail.python.org/pipermail/tutor/2012-September/091417.html,Using pygame features in Tkinter),但我的按钮不可见。 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()
答案 0 :(得分:1)
你在这里做的是真的过度杀伤。
我使用完全相同的东西编码了一个音乐播放器你在这里使用.. python,pygame和tkinter ..
你不需要初始化pygame的显示模块,请相信我,你不需要它..
我会告诉你我做了什么..
我使用了使用Sound类播放曲目的pygame音乐模块 我创建了一个名为 SoundPanel 的类,它从Frame类继承到组:音量标度,播放/停止检查按钮,以及用于查看曲目名称的前23个字母并添加一些点的标签曲目名称大于..
为了使其可用,我添加了一个打开的文件按钮,用于向视图添加轨道(使用tkinter的文件对话框)(即创建播放轨道的新SoundPanel对象)和打开文件夹按钮将具有特定扩展名的所有文件(由用户使用包含文本框的对话框定义)添加到视图中。
我认为你不需要更多......
我不是说你必须模仿我的解决方案,但我认为你的解决方案太复杂了
顺便说一下,小部件没有显示,因为你必须在创建对象时打包框架。