Я воссоздал проблему в моем коде здесь. Вероятно, я неправильно определил список.
import tkinter as tk
Name=("")
j=0
AnimalNameList=["Badger","Beaver","Buffalo","Bull","Bulldog","Cobra","Curlew","Eagle","Falcon","Fox","Gannet","Hawk","Kestrel","Lion","Merlin","Otter","Owl","Panther","Peewit","Raven","Seagull","Seal","Stag","Swift","Tiger","Wolf","Woodpecker","Woodpigeon"]
for i in AnimalNameList:
j=j+1
print(i)
print(j)
root=tk.Tk()
Animals=tk.OptionMenu(root,Name,AnimalNameList)
Animals.grid(row=1,column=1)
root.mainloop()
Вы можете проверить, сколько значений оно может принять.
Вот простой пример:
import tkinter as tk
long_list = []
for i in range(50000):
long_list.append(i)
root = tk.Tk()
Animals=tk.OptionMenu(root, "start", *long_list)
Animals.grid(row=1, column=1)
root.mainloop()
Вышеупомянутое работает для меня, хотя загрузка занимает несколько секунд. Если я попытаюсь сделать 70 000 вместо этого, это не сработает. Думаю, что максимальные элементы в списке могут быть очень большими в соответствии с этим постом. Я полагаю, что ограничение может быть основано на памяти. Однако проблема заключается не в том, что у вас слишком много вариантов.
Вы забываете *
свой аргумент в OptionsMenu. Это необходимо при передаче списка опций, иначе он даст вам один выпадающий элемент со всеми значениями из списка в одной строке.
Поэтому измените это:
Animals=tk.OptionMenu(root,Name,AnimalNameList)
К этому:
Animals=tk.OptionMenu(root,Name,*AnimalNameList)
Также убедитесь, что вы выполняете root.mainloop()
поскольку скобки необходимы.
root.mainloop
, без скобок?Animals = tk.OptionMenu(root, Name, *AnimalNameList)
и, как сказал @user2357112 user2357112, вызовите mainloop с помощьюroot.mainloop()