schreiben Sie eine GUI in Tkinter mit Python 2.11 mit einem OOP-Ansatz und versuchen, Vererbung zu lernen. In der GUI unten habe ich zwei Eingabe-Widgets. Das erste Widget mit der Bezeichnung "Enter Value - Does Not Return" verwendet die Klasse EntryField, die von der Tkinter Entry Class erbt. Wenn Sie einen Wert in dieses Eingabefeld eingeben, wird die Methode setDesVol aufgerufen, aber der Wert in self.desV wird nicht zurückgegeben. Wenn ich versuche, die andere Anweisung self.desV = self.parent.get() (die auskommentiert ist) gibt einen Fehler, der besagt MainWindow-Instanz hat kein Attribut erhalten.Probleme mit dem Erben von Eintrag Box Widget mit Tkinter
Jetzt, wenn ich das nächste Eintrag Widget das Objekt entValue zugeordnet aufrufen, funktioniert dies völlig in Ordnung, da es in der MainWindow-Klasse enthalten ist und die Methode setValue und self.entValue.get() funktioniert wie vorgesehen.
Hat jemand irgendwelche Ideen, was ich falsch mache in der EntryField-Klasse, um den Wert aus dem Eingabefeld zu bekommen. Mein Plan ist es, mehr Eingabefelder in der endgültigen GUI zu haben und möchte, dass jedes Eingabefeld seine eigene assoziierte Methode wie setDesVol hat, um den Code sauberer und leichter zu verwalten. Ich habe ungefähr 3 Tage damit verbracht, herauszufinden, dass jede Hilfe geschätzt wird. Der Code ist unten angehängt. Dank
import Tkinter as tk
import ttk
import tkMessageBox as mBox
class MainWindow(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.olFrame = tk.LabelFrame(text = 'Open Loop Frame', bg = 'red')
self.olFrame.grid(column = 0, row = 0, sticky = 'w')
self.voltLabel = tk.Label(self.olFrame,
text = 'Enter Value - Does Not Return ',
font = ("Times", 10), bg = 'red').grid(column = 0, row = 1)
#entry box code that does not return anything
self.entDesVolt = EntryField(self.olFrame,bg = 'red')
self.entDesVolt.bind("<Return>", EntryField(self).setDesVol)
self.entDesVolt.grid(column = 1, row = 1)
#this entry box code works fine
self.mezLabel = tk.Label(self.olFrame,
text = 'Enter Another Value - works right ',
font = ("Times", 10), bg = 'grey').grid(column = 0, row = 2)
self.entValue = tk.Entry(self.olFrame, bg = 'grey')
self.entValue.bind("<Return>", self.setValue)
self.entValue.grid(column = 1, row = 2)
def setValue(self, event):
print self.entValue.get()
print 10 + float(self.entValue.get())
class EntryField(tk.Entry):
def __init__(self, parent, *args, **kwargs):
tk.Entry.__init__(self, parent, *args, **kwargs)
self.parent = parent
print "self.parent in EntryField is type: ", type(self.parent)
def setDesVol(self,event):
self.desV = EntryField(self).get() #doesnt return anything in print statement
#self.desV = self.parent.get() #MainWindow instance has no attribute get
#self.desV = tk.Entry(self).get() #doesnt return anything in print statement
print "self des V is: ", self.desV
root = tk.Tk()
root.geometry('500x400')
root.title('Test GUI')
root.configure(background = "black")
a = MainWindow(root)
root.mainloop()