2017-11-24 2 views
-1

Ich möchte eine Fehlermeldung anzeigen, sobald beide Einträge die gleiche Eingabe haben und wenn es möglich ist, diese Werte in der CSV-Datei nicht zu drucken. Kannst du bitte helfen?Python: Ich möchte eine Fehlermeldung haben?

from tkinter import * 
import csv 

class App(Frame): 
    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack() 
     self.output() 

    def output(self): 
     self.playerA = Label(text='state player Name A:').pack() 
     self.E1 = Entry(root, bd=5) 
     self.E1.pack() 

     self.playerB = Label(text='state player Name A:').pack() 
     self.E2 = Entry(root, bd=5) 
     self.E2.pack() 


     self.b = Button(root, text='Submit', command=self.writeToFile) 
     self.b.pack(side=BOTTOM) 

    def writeToFile(self): 
     with open('ttest.csv', 'a') as f: 
      w=csv.writer(f, quoting=csv.QUOTE_ALL) 
      w.writerow([self.E1.get()]) 

if __name__ == "__main__": 

    root=Tk() 
    root.title('insert new scores') 
    root.geometry('200x200') 
    app=App(master=root) 
    app.mainloop() 
    root.mainloop() 
+0

Welche Art von Hilfe benötigen Sie? Es sieht so aus, als ob Sie wissen, wie man Widgets erstellt, und Sie wissen, wie man Funktionen aufruft, wenn Tasten gedrückt werden. Mit welchem ​​Teil des Problems kämpfen Sie? –

Antwort

0

Sie könnten eine EntryException Klasse erstellen, und raise es, wenn die Werte in den beiden Eingabefelder sind gleich:

Wenn beide Einträge verschieden sind, ein Datensatz in der CSV-Datei geschrieben wird.
Wenn sie unterschiedlich sind, wird ein EntryException ausgelöst, und nichts wird in die Datei geschrieben.

from tkinter import * 
import csv 

class EntryException(BaseException): 
    pass 

class App(Frame): 
    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack() 
     self.output() 

    def output(self): 
     self.playerA = Label(text='state player Name A:').pack() 
     self.E1 = Entry(root, bd=5) 
     self.E1.pack() 

     self.playerB = Label(text='state player Name A:').pack() 
     self.E2 = Entry(root, bd=5) 
     self.E2.pack() 


     self.b = Button(root, text='Submit', command=self.writeToFile) 
     self.b.pack(side=BOTTOM) 

    def writeToFile(self): 
     if self.E1.get() == self.E2.get(): 
      raise EntryException 
     else: 
      with open('ttest.csv', 'a') as f: 
       w=csv.writer(f, quoting=csv.QUOTE_ALL) 
       w.writerow([self.E1.get()]) 

if __name__ == "__main__": 

    root=Tk() 
    root.title('insert new scores') 
    root.geometry('200x200') 
    app=App(master=root) 
    app.mainloop() 
    root.mainloop() 
0

Sie können das Meldungsfeld auch verwenden, um die Meldung/den Fehler anzuzeigen, wenn beide Zahlen gleich sind.

from tkinter import messagebox 

def writeToFile(self): 
    if(self.E1.get()==self.E2.get()): 
     messagebox.showinfo("Message", "Both Values are Equal") 
    else: 
     with open('test.csv', 'a') as f: 
      w=csv.writer(f, quoting=csv.QUOTE_ALL) 
      w.writerow([self.E1.get()]) 
0

Sie können tun, was Sie mit einem einfachen Check-in der writeToFile() Funktion wollen vor dem Schreiben ...

def writeToFile(self): 
     #start new chunk 
     from tkinter import messagebox 
     if self.E1.get() == self.E2.get(): 
      messagebox.showerror('Error Message', "Both Users have the name '{}'".format(self.E1.get())) 
      return 
     #end new chunk 
     with open('ttest.csv', 'a') as f: 
      w=csv.writer(f, quoting=csv.QUOTE_ALL) 
      w.writerow([self.E1.get(), self.E2.get()]) 
      #      ^^^^^^^^^^^^^^^^ 

Die tkinter messagebox hat ein paar einfache Dialognachrichtenoptionen:
showerror(), showwarning() und showinfo(). Spiele mit ihnen und wähle das aus, was dir gefällt. Außerdem habe ich den zweiten Benutzernamen in die CSV-Datei geschrieben, wenn sie nicht identisch sind, falls Sie das übersehen haben.

Verwandte Themen