如果满足某些条件,如何使用 tkinter 创建弹出消息?

How to create a popup message with tkinter if certain conditions are met?

作为一种学习方式 python,我正在创建一个程序来跟踪我在学习弹奏贝司时的日常进度。我正在跟踪的一件事(以及其他)是我每天练习的多达 3 位艺术家。下面的代码只是我正在处理的其余代码的一小部分,但它应该足以解释我的问题。

from tkinter import *
from tkinter.ttk import *
from tkinter import ttk, Menu

# Create empty Lists
raw_artists_list, raw_genre_list = [], []
collapsed_artists_list, collapsed_genre_list = [], []

# Define click function
def click_done():
    input_a1 = str(entrybox_a1.get())
    input_a2 = str(entrybox_a2.get())
    input_a3 = str(entrybox_a3.get())

    # Append to raw artist list
    raw_artists_list.append(input_a1)
    raw_artists_list.append(input_a2)
    raw_artists_list.append(input_a3)

    # Determines if new artist has been added and asks for it's genre
    for art in raw_artists_list:

        if art not in collapsed_artists_list:
            
            collapsed_artists_list.append(art)
            input_gen = input("What is "+art+"'s genre?")
            collapsed_genre_list.append(input_gen)

        else: continue

# GUI 
window = Tk()
window.title("Program Title")
window.geometry('300x100')

# Artist 1
lbl_a1 = Label(window, text="Artist 1: ", width=20)
lbl_a1.grid(sticky="w", column=0, row=10, padx=10)
entrybox_a1 = Entry(window, width=15)
entrybox_a1.grid(sticky="w", column=1, row=10)

# Artist 2
lbl_a2 = Label(window, text="Artist 2: ", width=20)
lbl_a2.grid(sticky="w", column=0, row=11, padx=10)
entrybox_a2 = Entry(window, width=15)
entrybox_a2.grid(sticky="w", column=1, row=11)

# Artist 3
lbl_a3 = Label(window, text="Artist 3: ", width=20)
lbl_a3.grid(sticky="w", column=0, row=12, padx=10)
entrybox_a3 = Entry(window, width=15)
entrybox_a3.grid(sticky="w", column=1, row=12)

# Done button
btn_done = Button(window, text='Done', command=click_done)
btn_done.grid(column=1, row=15)

window.mainloop()

一旦我输入了当天的艺术家,比如艺术家 A、B 和 C,我希望我的程序识别这些艺术家是新条目,然后我自己输入每个新艺术家的流派(我我们已经设法弄清楚了,但通过终端)。我认为最好的方法是为每位新艺术家显示一条弹出消息,询问该艺术家的流派。最后,一旦程序识别出所有新艺术家的流派都被考虑在内,然后清除之前条目的内容。

加分:同样,这只是我正在处理的一小部分,我开始对我的代码的所有部分必须在何处或如何排序和嵌套感到困惑。例如,作为每日进度跟踪器,在记录第二天的条目之前必须发生某些事情。换句话说,事情变得一团糟。如果您对如何为 GUI 进度跟踪程序理想地构建代码的教程有任何建议或建议,我们将不胜感激。

感谢您的帮助。

你可以用simpledialog.askstring()代替input()。您还可以使用字典来保存艺术家的姓名和流派,而不是两个单独的列表。

下面是修改后的 click_done():

from tkinter.simpledialog import askstring
...

artist_list = {}

def click_done():
    for entry in (entrybox_a1, entrybox_a2, entrybox_a3):
        artist = entry.get().strip()
        # ask for genre only when name is input and not in artist list
        if artist and artist not in artist_list:
            genre = askstring('Add artist', f"What is {artist}'s genre?")
            if genre:
                artist_list[artist] = genre
        entry.delete('0', 'end')  # clear entry
    print(artist_list)