मैं एक चयन (पोर्टफोलियो) विजेट और एक निर्भर बहु-चयन (कीवर्ड) विजेट (चयनित पोर्टफोलियो के आधार पर कीवर्ड परिवर्तन) बनाने में सक्षम हूं। हालांकि, मैं मल्टीइलेक्ट के मूल्यों को पुनः प्राप्त करने के लिए संघर्ष कर रहा हूं। मुझे यकीन नहीं है कि आबादी वाले 'कीवर्ड' विजेट को get_folio_terms() से मुख्य खंड में कैसे पास किया जाए ताकि यह बहु-चयन में प्रतिबिंबित हो। इस पर किसी भी मदद की सराहना की जाती है।

पीएस: कोड get_folio_terms() से पॉप्युलेट किए गए सही मानों के साथ बहु-चयन को सही ढंग से प्रदर्शित करता है।

यहाँ कोड है:

keywords = MultiSelect(title="Keywords", options=[])

def get_folio_terms(attrname, old, new):
    connection = pymysql.connect(host='localhost',
                                 user='root',
                                 password='root',
                                 db='qa_env',
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)

    with connection.cursor() as cursor:
        sqlstmt1 = "SELECT * from portfolioterms where portfolio_name = "
        sql = sqlstmt1 + "'" + portfolio.value + "';" # handle Keyerror later
        print(sql)
        cursor.execute(sql)
        result = cursor.fetchall()
        if cursor.rowcount > 0:
            dfinput = pd.DataFrame.from_dict(result)
            print(dfinput)

            keywords = MultiSelect(title="Keywords", options=list(dfinput['businessterm']))
            layout.children[1] = keywords
        else:
            keywords = MultiSelect(title="Keywords", options=[]) # reset to empty
            layout.children[1] = keywords

def update_portfolio():

    print(portfolio.value, keywords.value)


def update(attrname, old, new):
    print(keywords.value)

# set up select widget
portfolio = Select(title="portfolio", options=['ERT','Trading', 'Wealth'])
portfolio.on_change('value', get_folio_terms)

keywords.on_change('value', update)

kwbutton = Button(label='Select Keywords',width=150,button_type="success")
kwbutton.on_click(update_portfolio)
layout = column(portfolio,keywords,kwbutton)
curdoc().add_root(layout)
0
mgn 3 अगस्त 2020, 17:18

1 उत्तर

सबसे बढ़िया उत्तर

आप अपने फ़ंक्शन में अपने प्रारंभिक कीवर्ड विजेट को अधिलेखित कर रहे हैं, जिसे आप फिर बच्चों को देते हैं। यह काम करता है, लेकिन वैश्विक खोजशब्दों को अधिलेखित नहीं किया जाता है, लेकिन पुराना बना रहता है। सीधे बच्चे को संदर्भित करके नए का संदर्भ लें:

print(portfolio.value, layout.children[1].value)

ऐसा करने का एक साफ तरीका यह है कि विजेट को किसी नए से बदला नहीं जाए, बल्कि केवल विकल्पों को बदला जाए:

keywords.options=list(dfinput['businessterm'])

और बच्चों के ओवरराइट को हटा दें क्योंकि अब इसकी आवश्यकता नहीं है।

layout.children[1] = keywords

इस तरह से करते समय आप अपने पुराने प्रिंट स्टेटमेंट को दोबारा इस्तेमाल कर सकते हैं।

print(portfolio.value, keywords.value)
1
EddyG 3 अगस्त 2020, 18:54