2017-12-25 26 views
0

ユーザ入力に基づいて実行時にオプションメニューを作成しました。私はメニューがクリックされたオプションを見つける方法を知らないので、新しい値が追加更新されていないオプションメニューを変更したときに、ここでPythonのtkinterで作成されたオプションメニューの配列にある要素にアクセスする際の問題

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): 
    a.append(b) 
    print(a) 
    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() 

オプションメニューはfly.Howeverに作成されます。

enter image description here

enter image description here

答えて

0

OptionMenu 1つのagumentで関数を実行します - 最初に値が選択されている

command=lambda val, n=num:new_number_of_pds(val, n)) 

、第二は、オプションメニューの数になりますので、次の2つの引数

lambdaを使用する必要があります - 選択した値"num"。

そして関数は二つの引数

def new_number_of_pds(value, optionmenu_number): 

を取得する必要があり、私はあなたがそれらの要素をどうしようか分からないが、あなたはリスト内の項目を交換したいならば、多分あなたは、空の5でリストを作成する必要があります要素を値で置き換えることができます。

optionmenu number: 0 
value: 3 
a: ['3', None, None, None, None] 
----- 
optionmenu number: 2 
value: 5 
a: ['3', None, '5', None, None] 
----- 

コード

import tkinter as tk 

# --- functions --- 

def new_number_of_pds(value, optionmenu_number): 
    print('optionmenu number:', optionmenu_number) 
    print('value:', value) 

    a[optionmenu_number] = value 
    print('a:', a) 
    print('-----') 

def new_number_of_pd(oE_number_of_pd): 
    global a 

    # delete previous values 
    a = [None, None, None, None, None] 

    for num in range(int(oE_number_of_pd)): 
     E_Name[num] = tk.OptionMenu(top, b[num], *list2, command=lambda val, n=num:new_number_of_pds(val, n)) 
     E_Name[num].pack(side="left") 

# --- main --- 

list2 = ['1', '2', '3', '4', '5'] 

E_Name=[None, None, None, None, None] 

a = [None, None, None, None, None] 

top = tk.Tk() 
b = [tk.StringVar(), tk.StringVar(), tk.StringVar(), tk.StringVar(), tk.StringVar()] 

number_of_pd = tk.Label(top, text="Number of Products") 
number_of_pd.pack(side="left") 

oE_number_of_pd = tk.StringVar() 

E_number_of_pd = tk.OptionMenu(top, oE_number_of_pd, *list2, command=new_number_of_pd) 
E_number_of_pd.pack(side="left") 

top.mainloop() 
関連する問題