我正在创建一个程序,该程序生成随机的歌曲列表,并具有一个功能,如果用户要从随机生成的列表中保存歌曲,则用户应单击它旁边的按钮。然后用户可以在新窗口中打印他/她保存的歌曲,但是在我的代码中,用于该功能的功能似乎仅在终端中打印已保存的歌曲,而我仅获得空窗口。如何正确实施?
这段代码:
from tkinter import *
from PIL import ImageTk, Image
import random
root = Tk()
root.title('UMIND')
root.geometry('')
a = [
'Bruised and Scarred - Mayday Parade',
'All Too Well - Taylor Swift',
'Gravity - Sara Bareilles',
'Perfectly Perfect - Simple Plan',
'Welcome To The Black Parade - My Chemical Romance',
'Everything Has Changed - Taylor Swift',
'Champagne - Taylor Swift',
'Piece of Your Heart - Mayday Parade',
'Blame It On The Rain - He Is We',
'Sad Song - We The Kings',
'Give It All - He Is We',
'Heavy - Linkin Park',
'Ride - Twenty One Pilot',
'One more light - Linkin Park',
'Ride Home - Ben and Ben',
'Leaves - Ben and Ben',
'Fall - Ben and Ben',
'Maybe the night - Ben and Ben',
'Sunrise - Ben and Ben'
]
def show():
global alist
alist = []
if genre.get() == 'Favorite':
# alist.clear()
top = Toplevel()
top.title('Your Playlist')
for i, title in enumerate(random.sample(a, k=10)):
myLabel = Label(top, text=title, font='times 12', anchor=W)
myLabel.grid(column=2, columnspan=2, sticky=W + E, row=i)
Button(top,
text=str(i + 1) + ".",
border=5,
padx=5,
pady=5,
command=lambda title=title: alist.append(title)
).grid(column=0, row=i)
btn2 = Button(top, text='close window', command=top.destroy).grid(row=12, column=1, columnspan=3, sticky=W + E)
def my_playlist():
global alist
blist = []
global myLabel
for song in alist:
if song not in alist:
blist.append(song)
top = Toplevel()
top.title('Your Playlist')
for i, title in enumerate(blist):
myLabel = Label(top, text=title, font='times 12', anchor=W)
myLabel.grid(column=2, columnspan=2, sticky=W + E, row=i)
print(alist)
options = [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Favorite"
]
genre = StringVar()
genre.set('From what genre?')
drop = OptionMenu(root, genre, *options)
drop.grid(row=2, column=0, ipadx=20, ipady=10, padx=15, pady=15)
generate_btn = Button(root, text="Generate Playlist", command=show).grid(row=2, column=1, ipadx=30, ipady=10, padx=15,
pady=15)
playlist_btn = Button(root, text="My Playlist", command=my_playlist).grid(row=3, column=0, ipadx=30, ipady=10,
padx=15, pady=15)
Grid.columnconfigure(root, 0, weight=1)
row_con = [ drop, generate_btn, playlist_btn]
row_num = 0
for row in row_con:
Grid.rowconfigure(root, row_num, weight=1)
row_num += 1
root.mainloop()
我的事情你所有的问题,是因为你使用的变量silimar名alist
和blist
最后你在代码中使用错误列表
for song in alist:
if song not in alist: # <-- should be `blist`
blist.append(song)
应该
for song in alist:
if song not in blist: # <-- should be `blist`
blist.append(song)
在您的版本中,您可以从中获得alist
并与之进行比较,alist
因此它始终会给False
与,而不会增加blist
最终,您可以set()
用来识别新标题。
但我认为您还有其他问题-您尝试blist
仅添加到新项目,但在for
使用-loop之前
blist = []
因此您的清单为空,无需检查要移动的内容,blist
因为您可以移动所有东西
blist = alist
如果您想保留以前的项目,那么您就不应该烦恼,blist = []
而应将其保留为全局列表。
编辑
我的完整版本带有其他更改:功能和变量的更好名称,所有功能在其余代码之前,等等。
import tkinter as tk # PEP8: `import *` is not preferred
import random
# --- functions ---
def show_generated_list():
global generated_list
generated_list = []
if genre.get() == 'Favorite':
# generated_list.clear()
top = tk.Toplevel()
top.title('Your Playlist')
for i, title in enumerate(random.sample(a, k=10)):
my_label = tk.Label(top, text=title, font='times 12', anchor='w') # PEP8: `lower_case_names` for variales
my_label.grid(column=2, columnspan=2, sticky='we', row=i)
tk.Button(top,
text=str(i+1) + ".",
border=5,
padx=5,
pady=5,
command=lambda title=title: generated_list.append(title)
).grid(column=0, row=i)
tk.Button(top, text='close window', command=top.destroy).grid(row=12, column=1, columnspan=3, sticky='we')
def show_my_playlist(): # verb for function name, noun for variable
global generated_list # PEP8: all `global` at the beginning
#global my_label # PEP8: `lower_case_names` for variales # you don't need it
for song in generated_list:
if song not in my_playlist:
my_playlist.append(song)
top = tk.Toplevel()
top.title('Your Playlist')
for i, title in enumerate(my_playlist):
my_label = tk.Label(top, text=title, font='times 12', anchor='w')
my_label.grid(column=2, columnspan=2, sticky='we', row=i)
print(generated_list)
# --- main ---
# - data -
a = [
'Bruised and Scarred - Mayday Parade',
'All Too Well - Taylor Swift',
'Gravity - Sara Bareilles',
'Perfectly Perfect - Simple Plan',
'Welcome To The Black Parade - My Chemical Romance',
'Everything Has Changed - Taylor Swift',
'Champagne - Taylor Swift',
'Piece of Your Heart - Mayday Parade',
'Blame It On The Rain - He Is We',
'Sad Song - We The Kings',
'Give It All - He Is We',
'Heavy - Linkin Park',
'Ride - Twenty One Pilot',
'One more light - Linkin Park',
'Ride Home - Ben and Ben',
'Leaves - Ben and Ben',
'Fall - Ben and Ben',
'Maybe the night - Ben and Ben',
'Sunrise - Ben and Ben'
]
options = [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Favorite"
]
generated_list = [] # created at start to make sure it always exists
my_playlist = [] # created at start to make sure it always exists
- gui -
root = tk.Tk()
root.title('UMIND')
#root.geometry('') # empty geometry is useless
genre = tk.StringVar()
genre.set('From what genre?')
drop = tk.OptionMenu(root, genre, *options)
drop.grid(row=2, column=0, ipadx=20, ipady=10, padx=15, pady=15)
generate_btn = tk.Button(root, text="Generate Playlist", command=show_generated_list)
generate_btn.grid(row=2, column=1, ipadx=30, ipady=10, padx=15, pady=15)
playlist_btn = tk.Button(root, text="My Playlist", command=show_my_playlist)
playlist_btn.grid(row=3, column=0, ipadx=30, ipady=10, padx=15, pady=15)
root.columnconfigure(0, weight=1)
row_con = [drop, generate_btn, playlist_btn]
for row_num in range(len(row_con)):
root.rowconfigure(row_num, weight=1)
root.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句