我试图通过在运行时获取他们想要的选项菜单来创建选项菜单运行时。
import tkinter
import tkinter.messagebox
from tkinter import *
top = tkinter.Tk()
number_of_pd = Label(top, text="Number of Products")
list2 = ['1','2','3','4','5']
E_Name=['','','','','','']
a=['','','','','','']
def New_number_of_pd(oE_number_of_pd):
y_axis=300
num=1
for num in range(int(oE_number_of_pd)):
y_axis=y_axis+75
E_Name[num]= OptionMenu(top,a[num],*list2)
E_Name[num].place(x=y_axis,y=150)
oE_number_of_pd=StringVar()
E_number_of_pd= OptionMenu(top, oE_number_of_pd, *list2,command=New_number_of_pd)
number_of_pd.place(x=150,y=75)
E_number_of_pd.place(x=300,y=75)
top.title('Sri Sai')
top.geometry('2000x1000') # Size 200, 200
top.mainloop()
在产品数量文本框中输入所需的选项菜单数。按钮正在创建。但是我收到如下错误
您可以创建空列表并使用append()
然后索引没有问题。
顺便说一句:因为你有数字作为选项所以你可以使用列表与数字[1, 2, 3, 4, 5]
和IntVar
import tkinter as tk
# --- functions ---
def add_optins_menus(number):
global all_optins_menus
global all_vars
# remove previous options menus
for widget in all_optins_menus:
widget.destroy()
all_optins_menus = []
all_vars = []
# add new options menu
for num in range(number_var.get()):
var = tk.IntVar()
widget = tk.OptionMenu(top, var, options)
widget.pack(side="left")
all_vars.append(var)
all_optins_menus.append(widget)
# --- main ---
options = [1, 2, 3, 4, 5]
all_optins_menus = []
all_vars = []
# ---
top = tk.Tk()
label = tk.Label(top, text="Number of Products")
label.pack(side="left")
number_var = tk.IntVar()
options_menu = tk.OptionMenu(top, number_var, *options, command=add_optins_menus)
options_menu.pack(side="left")
top.mainloop()
你好下面的代码工作。
import tkinter
import tkinter.messagebox
from tkinter import *
top = tkinter.Tk()
number_of_pd = Label(top, text="Number of Products")
list2 = ['1','2','3','4','5']
E_Name=['','','','','','']
a=['','','','','','']
b=[StringVar(),StringVar(),StringVar(),StringVar(),StringVar()]
def New_number_of_pds(b):
print(b)
def New_number_of_pd(oE_number_of_pd):
y_axis=300
num=1
for num in range(int(oE_number_of_pd)):
y_axis=y_axis+75
E_Name[num]= OptionMenu(top,b[num],*list2,command=New_number_of_pds)
E_Name[num].place(x=y_axis,y=150)
oE_number_of_pd=StringVar()
E_number_of_pd= OptionMenu(top, oE_number_of_pd, *list2,command=New_number_of_pd)
number_of_pd.place(x=150,y=75)
E_number_of_pd.place(x=300,y=75)
top.title('Sri Sai')
top.geometry('2000x1000') # Size 200, 200
top.mainloop()