Tkinter和Python列表

七十

我正在创建一个程序,该程序生成随机的歌曲列表,并具有一个功能,如果用户要从随机生成的列表中保存歌曲,则用户应单击它旁边的按钮。然后用户可以在新窗口中打印他/她保存的歌曲,但是在我的代码中,用于该功能的功能似乎仅在终端中打印已保存的歌曲,而我仅获得空窗口。如何正确实施?

这段代码:

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名alistblist最后你在代码中使用错误列表

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 = []而应将其保留为全局列表。


编辑

我的完整版本带有其他更改:功能和变量的更好名称,所有功能在其余代码之前,等等。

PEP 8-Python代码的样式指南

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tkinter和python的框架列表

来自分类Dev

Python tkinter-删除列表框项和相应的列表项

来自分类Dev

Python和Tkinter

来自分类Dev

Python tkinter 和网格

来自分类Dev

Tkinter列表中的Python菜单

来自分类Dev

以编程方式添加和删除tkinter python标签会导致IndexError:列表索引超出范围

来自分类Dev

使用Python Tkinter和网格布局管理器调整列表框的大小

来自分类Dev

以编程方式添加和删除tkinter python标签会导致IndexError:列表索引超出范围

来自分类Dev

使用 tkinter 和列表框的 Python 无法获得按钮来提供答案

来自分类Dev

urllib和tkinter的Python错误

来自分类Dev

python从tkinter导入ttk和*

来自分类Dev

TkInter 的 Python 错误和异常

来自分类Dev

python列表的累计和

来自分类Dev

Excel和Python列表

来自分类Dev

Python列表和字典

来自分类Dev

Python列表和范围

来自分类Dev

Python 列表和元组

来自分类Dev

Python for 循环和列表

来自分类Dev

python列表和字典

来自分类Dev

Python Tkinter 条目列表不可能?

来自分类Dev

Python 3 tkinter 列表框重置

来自分类Dev

Python和Tkinter,将列表信息从一个函数传递到另一个函数

来自分类Dev

Python:合并列表和范围列表

来自分类Dev

python执行列表和功能列表

来自分类Dev

Python,比较子列表和列表

来自分类Dev

在python中遍历列表和嵌套列表

来自分类Dev

遍历列表和字典python的列表

来自分类Dev

Python 列表和 NumPy 列表输出

来自分类Dev

Python列表理解和“不在”