2016-06-01 13 views
0

Ich habe Probleme mit einer Zeile meines Codes, wo ich positive Zahlen tun kann, aber ich kann kein - Zeichen vor den Zahlen hinzufügen, um es zu einer negativen Zahl zu machen. HierNegative float Problem - Python (Tkinter)

ist der Code:

as_meter = dict(mm=0.001, cm=0.01, inch=0.0254,ft=0.3048, yd=0.9144, m=1.0,km=1000.0, mi=1609.344,) 
def update_length(self, *args): 
    try: 
     v = float(self.Text_Length_Left.get()) 
    except ValueError: 
     self.Text_Length_Left.set('') 
     self.Text_Length_Right.set('') 
     return 

Hier ist die linke Eingabefeld Code, in dem Sie den Schwimmer ein:

self.Text_Length_Left = StringVar() 
self.Entry_Length_Left = ttk.Entry(self.length_frame, textvariable = self.Text_Length_Left,width = 13) 
self.Text_Length_Left.trace('w', self.update_length) 
self.Entry_Length_Left.grid(row = 3, column = 0, padx = 5, pady = 5) 

Vielen Dank für jede Hilfe!

bearbeiten

-Code, um sie auszuführen:

class Conversion: 

as_meter = dict(mm=0.001, cm=0.01, inch=0.0254,ft=0.3048, yd=0.9144, m=1.0,km=1000.0, mi=1609.344,) 
def update_length(self, *args): 
    try: 
     v = float(self.Text_Length_Left.get()) 
    except ValueError: 
     self.Text_Length_Left.set('') 
     self.Text_Length_Right.set('') 
     return 
    m = v * self.as_meter [self.measurements.get()] 
    r = m/self.as_meter[self.measurements1.get()] 
    self.Text_Length_Right.set("{:.5g}".format(r)) 

class GUI(Conversion): 
def __init__(self,root): 
    self.notebook = ttk.Notebook(root) 
    self.notebook.pack() 

    self.length_frame = ttk.Frame(self.notebook) 
    self.weight_frame = ttk.Frame(self.notebook) 
    self.temperature_frame = ttk.Frame(self.notebook) 
    self.help_frame = ttk.Frame(self.notebook) 

    self.notebook.add(self.length_frame, text = 'Length') 

    #Combobox 
    self.measurements = StringVar() 
    self.Combobox_Length_Left = ttk.Combobox(self.length_frame, textvariable = self.measurements, values = ('mm', 'cm', 'inch', 'ft', 'yd', 'm', 'km', 'mi'), width = 10,state=['readonly']) 
    self.Combobox_Length_Left.current(5) 
    self.measurements.trace('w', self.update_length) 
    self.Combobox_Length_Left.grid(row = 2, column = 0, padx = 5, pady = 5, sticky = E) 

    self.measurements1 = StringVar() 
    self.Combobox_Length_Right = ttk.Combobox(self.length_frame, textvariable = self.measurements1, value = ('mm', 'cm', 'inch', 'ft', 'yd', 'm', 'km', 'mi'), width = 10,state = ['readonly']) 
    self.Combobox_Length_Right.current(5) 
    self.measurements1.trace('w', self.update_length) 
    self.Combobox_Length_Right.grid(row = 2, column = 2, padx = 5, pady = 5, sticky = E) 

    #Labels 
    self.Conversion = ttk.Label(self.length_frame, text = 'Convertion:').grid(row = 1, column = 0, padx = 5, pady = 5, sticky = W) 
    self.Label_Blank = ttk.Label(self.length_frame, text = '').grid(row = 1, column = 1, padx = 5, pady = 5, sticky = E) 
    self.Label_To2 = ttk.Label(self.length_frame, text = 'to').grid(row = 2, column = 1, padx = 5, pady = 5, sticky = E) 
    self.Label_To = ttk.Label(self.length_frame, text = 'to').grid(row = 3, column = 1, padx = 5, pady = 5, sticky = E) 

    #Entry Boxes 
    self.Text_Length_Left = StringVar() 
    self.Entry_Length_Left = ttk.Entry(self.length_frame, textvariable = self.Text_Length_Left,width = 13) 
    self.Text_Length_Left.trace('w', self.update_length) 
    self.Entry_Length_Left.grid(row = 3, column = 0, padx = 5, pady = 5) 

    self.Text_Length_Right = StringVar() 
    self.Entry_Length_Right = ttk.Entry(self.length_frame, textvariable = self.Text_Length_Right,width = 13, state='readonly') 
    self.Entry_Length_Right.grid(row = 3, column = 2, padx = 5, pady = 5) 
enter code here 
+0

können Sie näher ausführen "Ich kann kein - Zeichen vor den Zahlen hinzufügen" gibt es einen Fehler? Was passiert, wenn du es tust? oder das Eingabefeld lässt das Zeichen "-" nicht zu, wenn Sie versuchen, es einzugeben? Ihnen ist klar, dass wir den von Ihnen bereitgestellten Code nicht ausführen können? Bitte geben Sie ein überprüfbares Beispiel an. – glls

Antwort

0

Statt direkt den eingegebenen Text des Gießens zu schweben, können Sie überprüfen, ob ein Minuszeichen am Anfang des Strings gibt es:

def update_length(self, *args): 

    entered_value = self.Text_Length_Left.get() 

    if entered_value.startswith('-'): 
     sign = -1 
     entered_value = entered_value.replace('-', '', 1) 
    else: 
     sign = 1 

    try: 
     v = float(entered_value) 
    except ValueError: 
     self.Text_Length_Right.set('Invalid input') 
     return 
    m = v * sign * self.as_meter [self.measurements.get()] 
    r = m/self.as_meter[self.measurements1.get()] 
    self.Text_Length_Right.set("{:.5g}".format(r)) 

Sie konnten nichts anderes als Zahlen eingeben, weil self.Text_Length_Left.set('') das Eingabefeld gelöscht hat, als Sie dies getan haben.

Ich hoffe, es wird hilfreich sein.

+0

Danke für Ihre Hilfe! Ich habe den ganzen Code ausgegeben und ich habe es versucht, aber es funktioniert nicht. –

+0

@ReganKelly können Sie ein bisschen erarbeiten? Was hast du geändert? Was funktioniert nicht? – 3kt

+0

Ich habe nichts davon geändert, weil ich weiß, dass es funktionieren sollte, weil es gut aussieht. Wie wenn ich versuche, das negative Zeichen einzugeben, wird es nicht wegen des "ValueError" eingegeben. –