使用python tkinter创建optionsmenuu数组

问题描述 投票:0回答:2

我试图通过在运行时获取他们想要的选项菜单来创建选项菜单运行时。

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

在产品数量文本框中输入所需的选项菜单数。按钮正在创建。但是我收到如下错误

python tkinter
2个回答
1
投票

您可以创建空列表并使用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()

0
投票

你好下面的代码工作。

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()
© www.soinside.com 2019 - 2024. All rights reserved.