2016-07-22 61 views
-1

我正在使用tkinter。當使用我的程序的人從下拉菜單(使用OptionMenu創建)中進行選擇時,根據所做的選擇,我想要出現Entry字段。因此,如果他們從菜單中選擇a,則應出現一個Entry字段,以便他們可以輸入數字,如11.6使用tkinter,如何通過選項菜單選擇添加或刪除條目或標籤?

然後,如果用戶從選項菜單中選擇b,我想要顯示2個Entry字段。

我一直試圖用OptionMenucommand=function參數來做到這一點,但我認爲它不起作用,因爲我試圖在啓動的函數中創建和編輯條目。

順便說一句,如果用戶在選擇'a'和'b'之間切換,代碼仍然可以工作 - 這是我遇到的問題。

代碼:

from tkinter import * 

root = Tk() 
rc = 0 

types = ['a', 'b', 'c'] 

type_header = Label(root, text='Select Type:', font='-weight bold') 
type_header.grid(row=rc, column=0,columnspan=2, sticky=W) 
rc += 1 

tvar0 = StringVar(root) 
tvar1 = StringVar(root) 
tvar2 = StringVar(root) 

type_label_0 = Label(root, text='row1:') 
type_label_0.grid(row=rc, column=0, sticky=E) 
type_list = OptionMenu(root, tvar0, *types, command=optc) 
type_list.config(width=15) 
type_list.grid(row=rc, column=1, sticky=W) 
rc += 1 

type_label_1 = Label(root, text='row2:') 
type_label_1.grid(row=rc, column=0, sticky=E) 
type_list = OptionMenu(root, tvar1, *types, command=optc) 
type_list.config(width=15) 
type_list.grid(row=rc, column=1, sticky=W) 
rc += 1 

def optc(v): 

    if v == 'a': 
     # if option 'a' selected, just have one label, and one entry box 

     t0_label1 = Label(root, text=' temperature:') 
     t0_label1.grid(row=1, column=2, sticky=E) 

     t0_field1 = Entry(root) 
     t0_field1.grid(row=1, column=3, sticky=W) 
     t0_field1.config(width=7) 

    if v == 'b': 
     # if option 'b', then 2 labels and 2 entry boxes 
     t0_label1 = Label(root, text=' height:') 
     t0_label1.grid(row=1, column=2, sticky=E) 

     t0_field1 = Entry(root) 
     t0_field1.grid(row=1, column=3, sticky=W) 
     t0_field1.config(width=7) 

     t0_label2 = Label(root, text=' width:') 
     t0_label2.grid(row=1, column=2, sticky=E) 

     t0_field2 = Entry(root) 
     t0_field2.grid(row=1, column=3, sticky=W) 
     t0_field2.config(width=7) 
+2

你應該發佈你的代碼。 –

+0

添加了代碼。 – jbren

+1

在調用它之前定義一個函數。 –

回答

-1

我認爲它不工作,因爲我所推出的功能中試圖創建和編輯條目 。

是什麼讓你覺得功能啓動?您的代碼給出

NameError: name 'optc' is not defined 

當您嘗試創建第一個OptionMenu時。 Python提供了相當不錯的錯誤消息。這一個告訴你,在之前,opc必須被定義爲,它可以被分配給OptionMenu。

+1

如果您解釋如何解決錯誤,看起來像一個合理的答案。羞辱下來的選民沒有解釋他們點擊向下箭頭的理由。 –

+0

對不起,當我嘗試調試時,這是代碼的更高版本。通常在被調用之前定義optc。 – jbren

相關問題