Имеется ли в меню параметров tkinter максимальное количество значений, которое оно может представлять? - PullRequest
0 голосов
/ 17 октября 2018

Я воссоздал проблему в своем коде здесь.Возможно, я неправильно определил список.

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()

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете проверить, сколько значений он может принять.

Вот простой пример:

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()

Вышеприведенное работает для меня, хотя загрузка занимает несколько секунд.Если я попытаюсь сделать 70000 вместо этого, это не получится.Хотя максимальные элементы в списке могут быть очень большими, согласно этому сообщению Я предполагаю, что ограничение может быть основано на памяти.Однако проблема не в том, что у вас слишком много опций.

Вы забываете * для аргумента в OptionsMenu.Это необходимо при передаче списка опций, иначе он даст вам один выпадающий элемент со всеми значениями из списка в одной строке.

Так что измените это:

Animals=tk.OptionMenu(root,Name,AnimalNameList)

На Это:

Animals=tk.OptionMenu(root,Name,*AnimalNameList)

Также убедитесь, что вы делаете root.mainloop(), поскольку требуются скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...