2016-01-12 5 views
0

Я работаю над этим кодом для вычисления определенных значений, содержащихся в файле gcode. Существует одно значение объема, найденное в загруженном файлом gcode кнопки, а затем найдена масса и цена. Я хотел, чтобы у кого-то было возможность вводить эти переменные, используя функцию ввода, но в первую очередь есть значения по умолчанию. Моя проблема заключается в том, что окно ввода не очищается и принимает другие значения, только те по умолчанию. Я использую entry.delete (0, END), но он не работает.Окно ввода в tkinter не удаляется

Это код:

def delete_entry(self): 
     e.delete(0, END) 
     return None 

# def Statusbar(self): 
#   self.stat1.set("Waiting for the file... ") 

    #Creation of init_window 
    def init_window(self): 

     # changing the title of our master widget  
     self.master.title("Filament Data") 

     # allowing the widget to take the full space of the root window 
     self.pack(fill=BOTH, expand=1) 

     # creating a menu instance 
     menu = Menu(self.master) 
     self.master.config(menu=menu) 

     # create the file object) 
     file = Menu(menu) 
     help = Menu(menu) 

     # adds a command to the menu option, calling it exit, and the command it runs on event is client_exit 
     file.add_command(label="Exit", command=self.client_exit) 
     help.add_command(label="About", command=self.about_popup) 

     #added "file" to our menu 
     menu.add_cascade(label="File", menu=file) 
     menu.add_cascade(label="Help", menu=help) 


     #Creating the intro label 
     l_instruction = Label(self, justify=CENTER, compound=TOP, text="Enter density and price per \n gram of your material and then \n load GCODE file to find volume, \n weight and price of used filament.") 
     l_instruction.grid(columnspan=2, ipady=10) 


     #Creating the button 
     gcodeButton = Button(self, text="Load GCODE", command=self.read_gcode) 
     gcodeButton.grid(row=3, columnspan=2, ipady=10) 

     #Entry fields for density and price per gram 
     e = Entry(self, justify=CENTER, width=5) 
#  e.delete(0, END) 
     e.insert(0, "1.13") 
     e.grid(row=1, column=0) 
     e.bind("<Button-1>", self.delete_entry) 
     self.density = float(e.get()) 


     e_label = Label(self, text="D") 
     e_label.grid(row=2, column=0) 

     e1 = Entry(self, justify=CENTER, width=5) 
#  e1.delete(0, END) 
     e1.insert(0, "0.175") 
     e1.grid(row=1, column=1) 
     self.price = float(e1.get()) 

     e1_label = Label(self, text="$") 
     e1_label.grid(row=2, column=1) 
+2

Попробуйте уменьшить этот код до наименьшей возможной программы, которая иллюстрирует проблему. См. Http://www.stackoverflow.com/help/mcve –

+1

Единственное место в вашем коде, где вы называете метод 'delete' виджета ввода, - это когда вы сначала создаете виджет (и он создан пустым, так что нет эффект). –

+1

Разве он не заполнен образцами? Вот как я это понял, и поэтому я сразу же удалил их. Я думал, что это удаление запускается всякий раз, когда мышь помещается в поле ввода. – Bart

ответ

1

При вызове метода delete, он сразу же удаляет все, что в виджете. В вашем случае вы вызываете его сразу же после создания виджета, когда ничего не нужно удалять.

Если вы хотите, чтобы текст в виджетах ввода удалялся, когда пользователь нажимает на него, вам необходимо определить привязку, которая удаляет содержимое.

Чтобы создать привязку, вызовите метод виджета bind и сообщите ему событие для привязки и функцию для вызова. Например, если вы хотите, чтобы вызвать функцию delete_entry, вы можете сделать это следующим образом:

def delete_entry(event): 
    event.widget.delete(0, "end") 

e = Entry(...) 
e.bind("<1>", delete_entry) 

Когда вы связываете функцию к событию, функция будет вызвана с аргументом - объект, который представляет собой мероприятие. Один из атрибутов объекта - widget, который является ссылкой на виджет, которому принадлежит событие. Вы можете использовать эту ссылку для взаимодействия с виджетами.

+0

Но в поле ввода есть значения вначале как номера по умолчанию, поэтому кто-то может не захотеть их изменить. И я понял, что этот параметр 'delete' работает только при вводе окна ввода - я имею в виду попытку изменить значение. – Bart

+0

Я уже сделал это (после вашего обновленного ответа), и это не сработало. При компиляции возникают ошибки, и когда я меняю событие на себя, ошибки исчезают, но окно ввода не очищается. – Bart

+0

@Bart: не видя своего кода, невозможно сказать. Переименование 'event' на' self' ничего не изменит (кроме принудительного последующего использования 'event' для отказа). Однако, если вы используете классы, в дополнение к объекту event_ обязательно требуется 'self'. Код в этом ответе абсолютно сработает. Вы должны получить сообщение об ошибке, сообщающее вам, в чем проблема. –

 Смежные вопросы

  • Нет связанных вопросов^_^